#!/usr/bin/env python3 # ,------------------------------------------------, # | [TARGET] | # | | # | | # | target:mgmt target:data0 targetgt:data1 | # | [192.168.0.1] [10.0.0.1] | # '------------------------------------------------' # | | | # | | | # ,----------------------------------------------, # | host:mgmt host:data0 host:data1 | # | [192.168.0.10] [10.0.0.10] | # | (ns0) (ns1) | # | | # | [ HOST ] | # '----------------------------------------------' """ Routing basic Verify routing between interfaces is possible. That enable/disable routing in configuration has the expected result. """ import infamy def config_target(target, tport0, tport1, enable_fwd): target.put_config_dict("ietf-interfaces", { "interfaces": { "interface": [ { "name": tport0, "enabled": True, "ipv4": { "forwarding": enable_fwd, "address": [{ "ip": "192.168.0.1", "prefix-length": 24 }] } }, { "name": tport1, "enabled": True, "ipv4": { "forwarding": enable_fwd, "address": [{ "ip": "10.0.0.1", "prefix-length": 24 }] } } ] } }) with infamy.Test() as test: with test.step("Set up topology and attach to target DUTs"): env = infamy.Env() target = env.attach("target", "mgmt") _, tport0 = env.ltop.xlate("target", "data1") _, tport1 = env.ltop.xlate("target", "data2") _, hport0 = env.ltop.xlate("host", "data1") _, hport1 = env.ltop.xlate("host", "data2") with infamy.IsolatedMacVlan(hport0) as ns0, \ infamy.IsolatedMacVlan(hport1) as ns1 : with test.step("Setup host"): ns0.addip("192.168.0.10") ns0.addroute("default", "192.168.0.1") ns1.addip("10.0.0.10") ns1.addroute("default", "10.0.0.1") with test.step("Enable forwarding on target:data1 and target:data2"): config_target(target, tport0, tport1, True) with test.step("Verify ping from host:data1 to 10.0.0.10"): ns0.must_reach("10.0.0.10") with test.step("Verify ping from host:data2 to 192.168.0.10"): ns1.must_reach("192.168.0.10") with test.step("Disable forwarding on target:data1 and target:data2"): config_target(target, tport0, tport1, False) with test.step("Verify ping does not work host:data1 to 10.0.0.10 and host:data2 to 192.168.0.10"): infamy.parallel(lambda: ns0.must_not_reach("10.0.0.10"), lambda: ns1.must_not_reach("192.168.0.10")) test.succeed()