diff options
Diffstat (limited to 'src/plugins')
-rwxr-xr-x | src/plugins/map/examples/gen-rules.py | 160 | ||||
-rwxr-xr-x | src/plugins/map/examples/test_map.py | 119 | ||||
-rwxr-xr-x | src/plugins/map/gen-rules.py | 123 | ||||
-rw-r--r-- | src/plugins/nat/extras/nat_100ks.py | 24 | ||||
-rw-r--r-- | src/plugins/nat/extras/nat_10Ms.py | 24 | ||||
-rw-r--r-- | src/plugins/nat/extras/nat_10ks.py | 24 | ||||
-rw-r--r-- | src/plugins/nat/extras/nat_1Ms.py | 24 | ||||
-rw-r--r-- | src/plugins/nat/extras/nat_out2in_100ks.py | 24 | ||||
-rw-r--r-- | src/plugins/nat/extras/nat_out2in_10Ms.py | 24 | ||||
-rw-r--r-- | src/plugins/nat/extras/nat_out2in_10ks.py | 24 | ||||
-rw-r--r-- | src/plugins/nat/extras/nat_out2in_1Ms.py | 24 | ||||
-rw-r--r-- | src/plugins/nat/extras/nat_ses_open.py | 83 | ||||
-rwxr-xr-x | src/plugins/nat/extras/nat_static_gen_cfg.py | 34 | ||||
-rw-r--r-- | src/plugins/nat/extras/nat_test_fast_path.py | 64 | ||||
-rw-r--r-- | src/plugins/nat/extras/nat_test_slow_path.py | 60 | ||||
-rw-r--r-- | src/plugins/nat/extras/nat_test_slow_path_with_latency.py | 81 | ||||
-rwxr-xr-x | src/plugins/nat/pnat/tests/test_genpackets.py | 30 | ||||
-rwxr-xr-x | src/plugins/srv6-mobile/extra/runner.py | 824 |
18 files changed, 1061 insertions, 709 deletions
diff --git a/src/plugins/map/examples/gen-rules.py b/src/plugins/map/examples/gen-rules.py index 7964aa9a359..d22d4633ef6 100755 --- a/src/plugins/map/examples/gen-rules.py +++ b/src/plugins/map/examples/gen-rules.py @@ -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> -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 -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): - 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("<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>") @@ -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>") + def domain_print_end(): - if format == 'xml': + if format == "xml": print("</softwire-instance>") + def rule_print(i, psid, dst): - if format == 'vpp': + if format == "vpp": print("map add rule index", i, "psid", psid, "ip6-dst", dst) - if format == 'confd': + if format == "confd": 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>") + # # 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() + # # 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) @@ -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): - 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 + # # 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) @@ -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)): - 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 @@ -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 # -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)) @@ -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): - 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(): - print(''' + print( + """ <?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> - ''') + """ + ) + def xml_footer_print(): - print(''' + print( + """ </softwire-instances> </softwire> </vpp> @@ -175,12 +245,20 @@ def xml_footer_print(): </rpc> ]]>]]> - ''') + """ + ) format = args.format -if format == 'xml': +if format == "xml": 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() diff --git a/src/plugins/map/examples/test_map.py b/src/plugins/map/examples/test_map.py index 7a48964b3f2..02df64015a2 100755 --- a/src/plugins/map/examples/test_map.py +++ b/src/plugins/map/examples/test_map.py @@ -1,10 +1,10 @@ #!/usr/bin/env python3 -import time,argparse,sys,cmd, unittest +import time, argparse, sys, cmd, unittest 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: @@ -14,115 +14,150 @@ from vpp_papi import * # # 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) - 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() - 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: - print "map_add_domain failed" + print("map_add_domain failed") 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)): - 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 - print "Running time:", time.clock() - a + print(f"Running time: {time.clock() - a}") + class TestMAP(unittest.TestCase): - ''' + """ 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) - 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): - 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) + # # RX thread, that should sit on blocking vpe_api_read() -# +# # # # import threading -class RXThread (threading.Thread): + + +class RXThread(threading.Thread): def __init__(self): threading.Thread.__init__(self) def run(self): - print "Starting " + print("Starting ") 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 - #del msg + # del msg continue - #time.sleep(0.001) + # time.sleep(0.001) return + # Create RX thread rxthread = RXThread() rxthread.setDaemon(True) - -print "Connect", connect_to_vpe("client124") + +print(f"Connect {connect_to_vpe('client124')}") import timeit + 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) -#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() -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: @@ -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))) -''' +""" suite = unittest.TestLoader().loadTestsFromTestCase(TestMAP) unittest.TextTestRunner(verbosity=2).run(suite) disconnect_from_vpe() - - diff --git a/src/plugins/map/gen-rules.py b/src/plugins/map/gen-rules.py index e43b8e155be..7e74f14ad6f 100755 --- a/src/plugins/map/gen-rules.py +++ b/src/plugins/map/gen-rules.py @@ -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> -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(): - 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): - 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): - 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(): - 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): - 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): - 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(): - 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): - 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): - 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(): - 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): - 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(): - 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): - 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(): - 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_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): - 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]() - - diff --git a/src/plugins/nat/extras/nat_100ks.py b/src/plugins/nat/extras/nat_100ks.py index c85a4591cd3..4e8dc2486d6 100644 --- a/src/plugins/nat/extras/nat_100ks.py +++ b/src/plugins/nat/extras/nat_100ks.py @@ -1,35 +1,39 @@ 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.load = '\x00' * pad_len + pad.load = "\x00" * pad_len 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") - pkt = STLPktBuilder(pkt=base_pkt/pad, vm=vm) + pkt = STLPktBuilder(pkt=base_pkt / pad, vm=vm) 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() - - - diff --git a/src/plugins/nat/extras/nat_10Ms.py b/src/plugins/nat/extras/nat_10Ms.py index 6ce62a0b5e7..96a18ec018a 100644 --- a/src/plugins/nat/extras/nat_10Ms.py +++ b/src/plugins/nat/extras/nat_10Ms.py @@ -1,35 +1,39 @@ 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.load = '\x00' * pad_len + pad.load = "\x00" * pad_len 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") - pkt = STLPktBuilder(pkt=base_pkt/pad, vm=vm) + pkt = STLPktBuilder(pkt=base_pkt / pad, vm=vm) 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() - - - diff --git a/src/plugins/nat/extras/nat_10ks.py b/src/plugins/nat/extras/nat_10ks.py index 33c7196eb9e..c210d5e81d8 100644 --- a/src/plugins/nat/extras/nat_10ks.py +++ b/src/plugins/nat/extras/nat_10ks.py @@ -1,35 +1,39 @@ 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.load = '\x00' * pad_len + pad.load = "\x00" * pad_len 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") - pkt = STLPktBuilder(pkt=base_pkt/pad, vm=vm) + pkt = STLPktBuilder(pkt=base_pkt / pad, vm=vm) 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() - - - diff --git a/src/plugins/nat/extras/nat_1Ms.py b/src/plugins/nat/extras/nat_1Ms.py index 73a91a70985..7271cf73781 100644 --- a/src/plugins/nat/extras/nat_1Ms.py +++ b/src/plugins/nat/extras/nat_1Ms.py @@ -1,35 +1,39 @@ 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.load = '\x00' * pad_len + pad.load = "\x00" * pad_len 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") - pkt = STLPktBuilder(pkt=base_pkt/pad, vm=vm) + pkt = STLPktBuilder(pkt=base_pkt / pad, vm=vm) 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() - - - diff --git a/src/plugins/nat/extras/nat_out2in_100ks.py b/src/plugins/nat/extras/nat_out2in_100ks.py index 55ab5d42ee1..911f2cefda4 100644 --- a/src/plugins/nat/extras/nat_out2in_100ks.py +++ b/src/plugins/nat/extras/nat_out2in_100ks.py @@ -1,35 +1,39 @@ 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.load = '\x00' * pad_len + pad.load = "\x00" * pad_len 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") - pkt = STLPktBuilder(pkt=base_pkt/pad, vm=vm) + pkt = STLPktBuilder(pkt=base_pkt / pad, vm=vm) 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() - - - diff --git a/src/plugins/nat/extras/nat_out2in_10Ms.py b/src/plugins/nat/extras/nat_out2in_10Ms.py index 48d3d199080..b3493641ea0 100644 --- a/src/plugins/nat/extras/nat_out2in_10Ms.py +++ b/src/plugins/nat/extras/nat_out2in_10Ms.py @@ -1,35 +1,39 @@ 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.load = '\x00' * pad_len + pad.load = "\x00" * pad_len 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") - pkt = STLPktBuilder(pkt=base_pkt/pad, vm=vm) + pkt = STLPktBuilder(pkt=base_pkt / pad, vm=vm) 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() - - - diff --git a/src/plugins/nat/extras/nat_out2in_10ks.py b/src/plugins/nat/extras/nat_out2in_10ks.py index e961504fcf9..abd82ce320d 100644 --- a/src/plugins/nat/extras/nat_out2in_10ks.py +++ b/src/plugins/nat/extras/nat_out2in_10ks.py @@ -1,35 +1,39 @@ 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.load = '\x00' * pad_len + pad.load = "\x00" * pad_len 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") - pkt = STLPktBuilder(pkt=base_pkt/pad, vm=vm) + pkt = STLPktBuilder(pkt=base_pkt / pad, vm=vm) 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() - - - diff --git a/src/plugins/nat/extras/nat_out2in_1Ms.py b/src/plugins/nat/extras/nat_out2in_1Ms.py index d2cb0810263..c08ef191e6c 100644 --- a/src/plugins/nat/extras/nat_out2in_1Ms.py +++ b/src/plugins/nat/extras/nat_out2in_1Ms.py @@ -1,35 +1,39 @@ 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.load = '\x00' * pad_len + pad.load = "\x00" * pad_len 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") - pkt = STLPktBuilder(pkt=base_pkt/pad, vm=vm) + pkt = STLPktBuilder(pkt=base_pkt / pad, vm=vm) 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() - - - diff --git a/src/plugins/nat/extras/nat_ses_open.py b/src/plugins/nat/extras/nat_ses_open.py index d614d4e7356..a267a6b67fb 100644 --- a/src/plugins/nat/extras/nat_ses_open.py +++ b/src/plugins/nat/extras/nat_ses_open.py @@ -1,44 +1,72 @@ 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() - 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()) - def get_streams (self, direction = 0, **kwargs): + def get_streams(self, direction=0, **kwargs): 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: - 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.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") @@ -47,12 +75,9 @@ class STLS1: 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() - - - diff --git a/src/plugins/nat/extras/nat_static_gen_cfg.py b/src/plugins/nat/extras/nat_static_gen_cfg.py index 9e59bbfc0c2..009cf099582 100755 --- a/src/plugins/nat/extras/nat_static_gen_cfg.py +++ b/src/plugins/nat/extras/nat_static_gen_cfg.py @@ -2,24 +2,24 @@ 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() -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)) diff --git a/src/plugins/nat/extras/nat_test_fast_path.py b/src/plugins/nat/extras/nat_test_fast_path.py index e869d40872a..fb880fb9e96 100644 --- a/src/plugins/nat/extras/nat_test_fast_path.py +++ b/src/plugins/nat/extras/nat_test_fast_path.py @@ -2,7 +2,6 @@ from trex_stl_lib.api import * class STLS1: - 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()) - 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.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()) diff --git a/src/plugins/nat/extras/nat_test_slow_path.py b/src/plugins/nat/extras/nat_test_slow_path.py index a6351b98adf..3145a2c6a59 100644 --- a/src/plugins/nat/extras/nat_test_slow_path.py +++ b/src/plugins/nat/extras/nat_test_slow_path.py @@ -2,7 +2,6 @@ from trex_stl_lib.api import * class STLS1: - 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()) - 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.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()) diff --git a/src/plugins/nat/extras/nat_test_slow_path_with_latency.py b/src/plugins/nat/extras/nat_test_slow_path_with_latency.py index 6c7663434c5..0c08e7a5e80 100644 --- a/src/plugins/nat/extras/nat_test_slow_path_with_latency.py +++ b/src/plugins/nat/extras/nat_test_slow_path_with_latency.py @@ -2,7 +2,6 @@ from trex_stl_lib.api import * class STLS1: - 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()) - 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.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()] - return self.create_stream(kwargs['port_id']) + return self.create_stream(kwargs["port_id"]) # dynamic load - used for trex console or simulator diff --git a/src/plugins/nat/pnat/tests/test_genpackets.py b/src/plugins/nat/pnat/tests/test_genpackets.py index 9d32d3e3656..40867317078 100755 --- a/src/plugins/nat/pnat/tests/test_genpackets.py +++ b/src/plugins/nat/pnat/tests/test_genpackets.py @@ -6,33 +6,35 @@ from importlib.machinery import SourceFileLoader 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 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: - print(' {') + print(" {") 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: - content = f.read().replace('\n', '') + content = f.read().replace("\n", "") tests = eval(content) output_test(filename, tests) - diff --git a/src/plugins/srv6-mobile/extra/runner.py b/src/plugins/srv6-mobile/extra/runner.py index b18fdc32766..eee89d7d41a 100755 --- a/src/plugins/srv6-mobile/extra/runner.py +++ b/src/plugins/srv6-mobile/extra/runner.py @@ -1,10 +1,8 @@ #!/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 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 @@ -18,10 +16,7 @@ from scapy.contrib.gtp import * from scapy.all import * -verbose_levels = { - 'error': ERROR, - 'debug': DEBUG, - 'info': INFO} +verbose_levels = {"error": ERROR, "debug": DEBUG, "info": INFO} class ContainerStartupError(Exception): @@ -87,10 +82,8 @@ class Container(object): 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: @@ -119,7 +112,7 @@ class Container(object): 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): @@ -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( - "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): @@ -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") - 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)) - 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_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)) - 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): @@ -186,55 +186,56 @@ class Container(object): 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( - "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( - "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( - "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( - "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): - 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): - 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( - "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 __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): - 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): - 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): @@ -299,7 +308,6 @@ class Containers(object): class Network(object): - def __init__(self, ref, name): self._name = name self._ref = ref @@ -310,8 +318,7 @@ class Network(object): @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 @@ -331,7 +338,6 @@ class Network(object): class Networks(object): - 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 - 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__)) @@ -469,15 +470,20 @@ class Program(object): 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", - 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() @@ -516,16 +522,17 @@ class Program(object): 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", - 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( - "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") @@ -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") - 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() @@ -561,7 +571,7 @@ class Program(object): 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 @@ -844,7 +854,7 @@ class Program(object): print("Receiving packet on {}:".format(c4.name)) for p in c4.pg_read_packets(): p.show2() - ''' + """ 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", - 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", - 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("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") @@ -880,8 +894,8 @@ class Program(object): 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") @@ -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") - 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() - time.sleep(10) + time.sleep(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", - 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", - 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("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") @@ -950,8 +970,8 @@ class Program(object): 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") @@ -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") - 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() - time.sleep(10) + time.sleep(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", - 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", - 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("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") @@ -1020,8 +1046,8 @@ class Program(object): 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") @@ -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") - 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() @@ -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", - 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", - 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("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") @@ -1090,8 +1122,8 @@ class Program(object): 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") @@ -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") - 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() @@ -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", - 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", - 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("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") @@ -1157,8 +1195,8 @@ class Program(object): 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") @@ -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") - 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() @@ -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", - 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", - 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("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") @@ -1224,8 +1268,8 @@ class Program(object): 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") @@ -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") - 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() @@ -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", - 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", - 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("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") @@ -1293,8 +1344,8 @@ class Program(object): 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") @@ -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") - 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() @@ -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", - 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", - 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("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") @@ -1362,8 +1419,8 @@ class Program(object): 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") @@ -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") - 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() @@ -1419,18 +1478,19 @@ class Program(object): 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", - 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( - "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") @@ -1447,12 +1507,14 @@ class Program(object): 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() @@ -1494,18 +1556,19 @@ class Program(object): 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", - 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( - "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") @@ -1522,13 +1585,15 @@ class Program(object): 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() @@ -1570,18 +1635,19 @@ class Program(object): 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", - 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( - "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") @@ -1598,10 +1664,12 @@ class Program(object): 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() @@ -1643,18 +1711,19 @@ class Program(object): 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", - 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( - "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") @@ -1671,10 +1740,12 @@ class Program(object): 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() @@ -1716,18 +1787,19 @@ class Program(object): 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", - 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( - "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") @@ -1744,12 +1816,15 @@ class Program(object): 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() @@ -1791,18 +1866,19 @@ class Program(object): 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", - 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( - "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") @@ -1819,12 +1895,14 @@ class Program(object): 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() @@ -1866,18 +1944,19 @@ class Program(object): 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", - 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( - "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") @@ -1894,13 +1973,15 @@ class Program(object): 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() @@ -1942,18 +2023,19 @@ class Program(object): 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", - 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( - "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") @@ -1971,12 +2053,14 @@ class Program(object): 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() @@ -2018,18 +2102,19 @@ class Program(object): 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", - 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( - "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") @@ -2047,13 +2132,15 @@ class Program(object): 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() @@ -2095,18 +2182,19 @@ class Program(object): 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", - 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( - "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") @@ -2124,12 +2212,14 @@ class Program(object): 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() @@ -2171,18 +2261,19 @@ class Program(object): 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", - 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( - "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") @@ -2200,13 +2291,15 @@ class Program(object): 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() @@ -2246,19 +2339,22 @@ class Program(object): 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", - 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 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") @@ -2266,12 +2362,14 @@ class Program(object): 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() @@ -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", - 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", - 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") @@ -2329,12 +2429,14 @@ class Program(object): 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() @@ -2360,17 +2462,21 @@ class Program(object): 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("\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)) @@ -2382,7 +2488,9 @@ class Program(object): system( "docker cp release-build:{}/vpp-package.tgz {}/".format( - self.vpp_path, self.vpp_path)) + self.vpp_path, self.vpp_path + ) + ) instance.rem() @@ -2408,39 +2516,30 @@ class Program(object): 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() - p1 = subparsers.add_parser( - "infra", help="Infrastructure related commands.") + p1 = subparsers.add_parser("infra", help="Infrastructure related commands.") 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.") - p2.add_argument("op", choices=['vppctl', 'bash']) + p2.add_argument("op", choices=["vppctl", "bash"]) 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.") @@ -2473,7 +2572,9 @@ def get_args(): "gtp6_ipv6", "gtp6_ipv6_5g", "gtp6_dt", - "gtp4_dt"]) + "gtp4_dt", + ], + ) args = parser.parse_args() if not hasattr(args, "op") or not args.op: @@ -2483,15 +2584,14 @@ def get_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 image == 'release': + if image == "release": image = "srv6m-release-image" - elif image == 'debug': + elif image == "debug": image = "srv6m-image" else: image = "srv6m-image" @@ -2501,23 +2601,23 @@ def main(op=None, prefix=None, verbose=None, program = Program(image, prefix) try: - if op == 'build': + if op == "build": program.build_image() - elif op == 'release': + elif op == "release": program.release_image() - elif op == 'stop': + elif op == "stop": program.stop_containers() - elif op == 'start': + elif op == "start": program.start_containers() - elif op == 'status': + elif op == "status": program.status_containers() - elif op == 'vppctl': + elif op == "vppctl": program.vppctl(index, command) - elif op == 'bash': + elif op == "bash": program.bash(index) - elif op == 'ping': + elif op == "ping": program.test_ping() - elif op == 'srv6': + elif op == "srv6": 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() - elif op == 'gtp4': + elif op == "gtp4": program.test_gtp4() - elif op == 'gtp4_usid': + elif op == "gtp4_usid": program.test_gtp4_usid() - elif op == 'gtp4_5g': + elif op == "gtp4_5g": program.test_gtp4_5g() - elif op == 'gtp4_echo': + elif op == "gtp4_echo": program.test_gtp4_echo() - elif op == 'gtp4_reply': + elif op == "gtp4_reply": program.test_gtp4_reply() - elif op == 'gtp4_error': + elif op == "gtp4_error": program.test_gtp4_error() - elif op == 'gtp4_ipv6': + elif op == "gtp4_ipv6": program.test_gtp4_ipv6() - elif op == 'gtp4_ipv6_5g': + elif op == "gtp4_ipv6_5g": program.test_gtp4_ipv6_5g() - elif op == 'gtp6_drop_in': + elif op == "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() - elif op == 'gtp6_drop_in_echo': + elif op == "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() - elif op == 'gtp6_drop_in_error': + elif op == "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() - elif op == 'gtp6_drop_in_ipv6_5g': + elif op == "gtp6_drop_in_ipv6_5g": program.test_gtp6_drop_in_ipv6_5g() - elif op == 'gtp6': + elif op == "gtp6": program.test_gtp6() - elif op == 'gtp6_5g': + elif op == "gtp6_5g": program.test_gtp6_5g() - elif op == 'gtp6_ipv6': + elif op == "gtp6_ipv6": program.test_gtp6_ipv6() - elif op == 'gtp6_ipv6_5g': + elif op == "gtp6_ipv6_5g": program.test_gtp6_ipv6_5g() - elif op == 'gtp6_dt': + elif op == "gtp6_dt": program.test_gtp6_dt() - elif op == 'gtp4_dt': + elif op == "gtp4_dt": program.test_gtp4_dt() except Exception: |