summaryrefslogtreecommitdiffstats
path: root/tests/topotests/bgp_evpn_vxlan_svd_topo1/test_bgp_evpn_vxlan_svd.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/topotests/bgp_evpn_vxlan_svd_topo1/test_bgp_evpn_vxlan_svd.py')
-rwxr-xr-xtests/topotests/bgp_evpn_vxlan_svd_topo1/test_bgp_evpn_vxlan_svd.py72
1 files changed, 70 insertions, 2 deletions
diff --git a/tests/topotests/bgp_evpn_vxlan_svd_topo1/test_bgp_evpn_vxlan_svd.py b/tests/topotests/bgp_evpn_vxlan_svd_topo1/test_bgp_evpn_vxlan_svd.py
index 65c0c35..fd75c34 100755
--- a/tests/topotests/bgp_evpn_vxlan_svd_topo1/test_bgp_evpn_vxlan_svd.py
+++ b/tests/topotests/bgp_evpn_vxlan_svd_topo1/test_bgp_evpn_vxlan_svd.py
@@ -91,6 +91,10 @@ def setup_pe_router(tgen, pe_name, tunnel_local_ip, svi_ip, intf):
pe.run("ip link add name bridge type bridge stp_state 0")
pe.run("ip link set dev bridge type bridge vlan_filtering 1")
pe.run("bridge vlan add vid 1 dev bridge self")
+ if pe_name == "PE1":
+ pe.run("ip link set dev bridge address 44:00:00:ff:ff:01")
+ if pe_name == "PE2":
+ pe.run("ip link set dev bridge address 44:20:00:ff:ff:01")
pe.run("ip link set dev bridge up")
# setup svi
@@ -113,6 +117,18 @@ def setup_pe_router(tgen, pe_name, tunnel_local_ip, svi_ip, intf):
pe.run("bridge vlan add dev vxlan0 vid 1 tunnel_info id 101")
pe.run("ip link set up dev vxlan0")
+ # VRF creation
+ pe.run("ip link add vrf-purple type vrf table 1003")
+ pe.run("ip link set dev vrf-purple up")
+ if pe_name == "PE1":
+ pe.run("ip link add vrf-blue type vrf table 1002")
+ pe.run("ip link set dev vrf-blue up")
+ pe.run("ip addr add 27.2.0.85/32 dev vrf-blue")
+ pe.run("ip addr add 27.3.0.85/32 dev vrf-purple")
+ if pe_name == "PE2":
+ pe.run("ip link add vrf-blue type vrf table 2400")
+ pe.run("ip link set dev vrf-blue up")
+
# setup PE interface
pe.run("ip link set dev {0}-{1} master bridge".format(pe_name, intf))
pe.run("bridge vlan del vid 1 dev {0}-{1}".format(pe_name, intf))
@@ -120,7 +136,7 @@ def setup_pe_router(tgen, pe_name, tunnel_local_ip, svi_ip, intf):
pe.run("bridge vlan add vid 1 dev {0}-{1}".format(pe_name, intf))
pe.run("bridge vlan add vid 1 pvid untagged dev {0}-{1}".format(pe_name, intf))
- # l3vni 100
+ # L3VNI 100
pe.run("ip link add vrf-red type vrf table 1400")
pe.run("ip link add link bridge name vlan100 type vlan id 100 protocol 802.1q")
pe.run("ip link set dev vlan100 master vrf-blue")
@@ -129,9 +145,16 @@ def setup_pe_router(tgen, pe_name, tunnel_local_ip, svi_ip, intf):
pe.run("bridge vlan add dev vxlan0 vid 100")
pe.run("bridge vlan add dev vxlan0 vid 100 tunnel_info id 100")
+ # L3VNI 4000
+ pe.run("ip link add link bridge name vlan400 type vlan id 400 protocol 802.1q")
+ pe.run("ip link set dev vlan400 master vrf-purple")
+ pe.run("ip link set dev vlan400 up")
+ pe.run("bridge vlan add vid 400 dev bridge self")
+ pe.run("bridge vlan add dev vxlan0 vid 400")
+ pe.run("bridge vlan add dev vxlan0 vid 400 tunnel_info id 4000")
+
# add a vrf for testing DVNI
if pe_name == "PE2":
- pe.run("ip link add vrf-blue type vrf table 2400")
pe.run("ip link add link bridge name vlan300 type vlan id 300 protocol 802.1q")
pe.run("ip link set dev vlan300 master vrf-blue")
pe.run("ip link set dev vlan300 up")
@@ -199,6 +222,14 @@ def show_vni_json_elide_ifindex(pe, vni, expected):
return topotest.json_cmp(output_json, expected)
+def show_bgp_l2vpn_evpn_route_type_prefix_json(pe, expected):
+ output_json = pe.vtysh_cmd(
+ "show bgp l2vpn evpn route type prefix json", isjson=True
+ )
+
+ return topotest.json_cmp(output_json, expected)
+
+
def check_vni_macs_present(tgen, router, vni, maclist):
result = router.vtysh_cmd("show evpn mac vni {} json".format(vni), isjson=True)
for rname, ifname in maclist:
@@ -331,6 +362,7 @@ def mac_test_local_remote(local, remote):
remote_output_json = json.loads(remote_output)
local_output_vni_json = json.loads(local_output_vni)
+ # breakpoint()
for vni in local_output_json:
if vni not in remote_output_json:
continue
@@ -542,6 +574,42 @@ def test_dvni():
# tgen.mininet_cli()
+def test_pe_advertise_aggr_evpn_route():
+ "BGP advertise aggregated Type-5 prefix route"
+
+ tgen = get_topogen()
+ # Don't run this test if we have any failure.
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ logger.info("Checking BGP EVPN route contains non-aggregate prefixes")
+ pe1 = tgen.gears["PE1"]
+ json_file = "{}/{}/bgp.evpn.route.prefix.before.json".format(CWD, pe1.name)
+ expected = json.loads(open(json_file).read())
+
+ test_func = partial(show_bgp_l2vpn_evpn_route_type_prefix_json, pe1, expected)
+ _, result = topotest.run_and_expect(test_func, None, count=45, wait=1)
+ assertmsg = '"{}" JSON output mismatches'.format(pe1.name)
+ assert result is None, assertmsg
+
+ logger.info("Configure BGP aggregate-address summary-only under ipv4-unicast")
+ pe1.cmd(
+ 'vtysh -c "config t" -c "router bgp 65000 vrf vrf-purple" '
+ + ' -c "address-family ipv4 unicast" '
+ + ' -c "aggregate-address 10.27.0.0/16 summary-only" '
+ )
+
+ logger.info("Checking BGP EVPN route contains aggregated prefix")
+ pe1 = tgen.gears["PE1"]
+ json_file = "{}/{}/bgp.evpn.route.prefix.after.json".format(CWD, pe1.name)
+ expected = json.loads(open(json_file).read())
+
+ test_func = partial(show_bgp_l2vpn_evpn_route_type_prefix_json, pe1, expected)
+ _, result = topotest.run_and_expect(test_func, None, count=45, wait=1)
+ assertmsg = '"{}" JSON output mismatches'.format(pe1.name)
+ assert result is None, assertmsg
+
+
def test_memory_leak():
"Run the memory leak test and report results."
tgen = get_topogen()