From 6d0dbb7996ea77a48f4a963dd760e1720e99f03b Mon Sep 17 00:00:00 2001 From: Lou Berger Date: Fri, 3 Nov 2017 16:39:09 -0400 Subject: [PATCH] bgp_direct_to_bgp_vpn: initial version Signed-off-by: Lou Berger --- .../bgp_direct_to_bgp_vpn/__init__.py | 0 .../bgp_direct_to_bgp_vpn/ce1/bgpd.conf | 33 ++ .../bgp_direct_to_bgp_vpn/ce1/zebra.conf | 17 + .../bgp_direct_to_bgp_vpn/ce2/bgpd.conf | 33 ++ .../bgp_direct_to_bgp_vpn/ce2/zebra.conf | 17 + .../bgp_direct_to_bgp_vpn/ce3/bgpd.conf | 33 ++ .../bgp_direct_to_bgp_vpn/ce3/zebra.conf | 17 + .../bgp_direct_to_bgp_vpn/r1/bgpd.conf | 40 +++ .../bgp_direct_to_bgp_vpn/r1/ldpd.conf | 23 ++ .../bgp_direct_to_bgp_vpn/r1/ospfd.conf | 8 + .../bgp_direct_to_bgp_vpn/r1/zebra.conf | 24 ++ .../bgp_direct_to_bgp_vpn/r2/bgpd.conf | 33 ++ .../bgp_direct_to_bgp_vpn/r2/ldpd.conf | 25 ++ .../bgp_direct_to_bgp_vpn/r2/ospfd.conf | 7 + .../bgp_direct_to_bgp_vpn/r2/zebra.conf | 27 ++ .../bgp_direct_to_bgp_vpn/r3/bgpd.conf | 42 +++ .../bgp_direct_to_bgp_vpn/r3/ldpd.conf | 23 ++ .../bgp_direct_to_bgp_vpn/r3/ospfd.conf | 9 + .../bgp_direct_to_bgp_vpn/r3/zebra.conf | 29 ++ .../bgp_direct_to_bgp_vpn/r4/bgpd.conf | 42 +++ .../bgp_direct_to_bgp_vpn/r4/ldpd.conf | 23 ++ .../bgp_direct_to_bgp_vpn/r4/ospfd.conf | 8 + .../bgp_direct_to_bgp_vpn/r4/zebra.conf | 23 ++ .../scripts/add_routes.py | 13 + .../scripts/adjacencies.py | 5 + .../scripts/check_routes.py | 13 + .../scripts/cleanup_all.py | 17 + .../test_bgp_direct_to_bgp_vpn.py | 294 ++++++++++++++++++ .../bgp_direct_to_bgp_vpn/testfinish.py | 2 + .../bgp_direct_to_bgp_vpn/teststart.py | 4 + 30 files changed, 884 insertions(+) create mode 100755 tests/topotests/bgp_direct_to_bgp_vpn/__init__.py create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/ce1/bgpd.conf create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/ce1/zebra.conf create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/ce2/bgpd.conf create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/ce2/zebra.conf create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/ce3/bgpd.conf create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/ce3/zebra.conf create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/r1/bgpd.conf create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/r1/ldpd.conf create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/r1/ospfd.conf create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/r1/zebra.conf create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/r2/bgpd.conf create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/r2/ldpd.conf create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/r2/ospfd.conf create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/r2/zebra.conf create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/r3/bgpd.conf create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/r3/ldpd.conf create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/r3/ospfd.conf create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/r3/zebra.conf create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/r4/bgpd.conf create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/r4/ldpd.conf create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/r4/ospfd.conf create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/r4/zebra.conf create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/scripts/add_routes.py create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/scripts/adjacencies.py create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/scripts/check_routes.py create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/scripts/cleanup_all.py create mode 100755 tests/topotests/bgp_direct_to_bgp_vpn/test_bgp_direct_to_bgp_vpn.py create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/testfinish.py create mode 100644 tests/topotests/bgp_direct_to_bgp_vpn/teststart.py diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/__init__.py b/tests/topotests/bgp_direct_to_bgp_vpn/__init__.py new file mode 100755 index 0000000000..e69de29bb2 diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/ce1/bgpd.conf b/tests/topotests/bgp_direct_to_bgp_vpn/ce1/bgpd.conf new file mode 100644 index 0000000000..bd10248d7b --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/ce1/bgpd.conf @@ -0,0 +1,33 @@ +frr defaults traditional +! +hostname ce1 +password zebra +log stdout notifications +log monitor notifications +log commands +router bgp 5226 + bgp router-id 99.0.0.1 + neighbor 192.168.1.1 remote-as 5226 + neighbor 192.168.1.1 update-source 192.168.1.2 + address-family ipv4 unicast + network 5.1.0.0/24 route-map rm-nh + network 5.1.1.0/24 route-map rm-nh + neighbor 192.168.1.1 activate + exit-address-family +! +access-list al-any permit any +! +route-map rm-nh permit 10 + match ip address al-any + set ip next-hop 99.0.0.1 + set local-preference 123 + set metric 98 + set large-community 12:34:56 + set extcommunity rt 89:123 + set community 0:67 +! + +end + + + diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/ce1/zebra.conf b/tests/topotests/bgp_direct_to_bgp_vpn/ce1/zebra.conf new file mode 100644 index 0000000000..41cce5e6f4 --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/ce1/zebra.conf @@ -0,0 +1,17 @@ +log file /tmp/ce1-zebra.log +! +hostname ce1 +! +interface lo + ip address 99.0.0.1/32 +! +interface ce1-eth0 + description to r1 + ip address 192.168.1.2/24 + no link-detect +! +ip forwarding +! +! +line vty +! diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/ce2/bgpd.conf b/tests/topotests/bgp_direct_to_bgp_vpn/ce2/bgpd.conf new file mode 100644 index 0000000000..ab86c5e1b8 --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/ce2/bgpd.conf @@ -0,0 +1,33 @@ +frr defaults traditional +! +hostname ce2 +password zebra +log stdout notifications +log monitor notifications +log commands +router bgp 5226 + bgp router-id 99.0.0.2 + neighbor 192.168.1.1 remote-as 5226 + neighbor 192.168.1.1 update-source 192.168.1.2 + address-family ipv4 unicast + network 5.1.0.0/24 route-map rm-nh + network 5.1.1.0/24 route-map rm-nh + neighbor 192.168.1.1 activate + exit-address-family +! +access-list al-any permit any +! +route-map rm-nh permit 10 + match ip address al-any + set ip next-hop 99.0.0.2 + set local-preference 100 + set metric 100 + set large-community 12:34:56 + set extcommunity rt 89:123 + set community 0:67 +! + +end + + + diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/ce2/zebra.conf b/tests/topotests/bgp_direct_to_bgp_vpn/ce2/zebra.conf new file mode 100644 index 0000000000..b12a9d6e68 --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/ce2/zebra.conf @@ -0,0 +1,17 @@ +log file /tmp/ce2-zebra.log +! +hostname ce2 +! +interface lo + ip address 99.0.0.2/32 +! +interface ce2-eth0 + description to r3 + ip address 192.168.1.2/24 + no link-detect +! +ip forwarding +! +! +line vty +! diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/ce3/bgpd.conf b/tests/topotests/bgp_direct_to_bgp_vpn/ce3/bgpd.conf new file mode 100644 index 0000000000..7d239b0bd5 --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/ce3/bgpd.conf @@ -0,0 +1,33 @@ +frr defaults traditional +! +hostname ce3 +password zebra +log stdout notifications +log monitor notifications +log commands +router bgp 5226 + bgp router-id 99.0.0.3 + neighbor 192.168.1.1 remote-as 5226 + neighbor 192.168.1.1 update-source 192.168.1.2 + address-family ipv4 unicast + network 5.1.2.0/24 route-map rm-nh + network 5.1.3.0/24 route-map rm-nh + neighbor 192.168.1.1 activate + exit-address-family +! +access-list al-any permit any +! +route-map rm-nh permit 10 + match ip address al-any + set ip next-hop 99.0.0.3 + set local-preference 50 + set metric 200 + set large-community 12:34:56 + set extcommunity rt 89:123 + set community 0:67 +! + +end + + + diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/ce3/zebra.conf b/tests/topotests/bgp_direct_to_bgp_vpn/ce3/zebra.conf new file mode 100644 index 0000000000..65a5bfc86f --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/ce3/zebra.conf @@ -0,0 +1,17 @@ +log file /tmp/ce3-zebra.log +! +hostname ce3 +! +interface lo + ip address 99.0.0.3/32 +! +interface ce3-eth0 + description to r4 + ip address 192.168.1.2/24 + no link-detect +! +ip forwarding +! +! +line vty +! diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/r1/bgpd.conf b/tests/topotests/bgp_direct_to_bgp_vpn/r1/bgpd.conf new file mode 100644 index 0000000000..7ec941ee6b --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/r1/bgpd.conf @@ -0,0 +1,40 @@ +frr defaults traditional +! +hostname r1 +password zebra +log stdout notifications +log monitor notifications +log commands +router bgp 5226 + bgp router-id 1.1.1.1 + bgp cluster-id 1.1.1.1 + neighbor 192.168.1.2 remote-as 5226 + neighbor 192.168.1.2 update-source 192.168.1.1 + neighbor 192.168.1.2 route-reflector-client + neighbor 2.2.2.2 remote-as 5226 + neighbor 2.2.2.2 update-source 1.1.1.1 +! + address-family ipv4 unicast + redistribute vnc-direct + neighbor 192.168.1.2 activate + neighbor 192.168.1.2 next-hop-self + no neighbor 2.2.2.2 activate + exit-address-family +! + address-family ipv4 vpn + neighbor 2.2.2.2 activate + exit-address-family +! + vrf-policy cust1 + label 101 + rd 10:1 + rt both 52:100 + nexthop 192.168.1.1 + exit-vrf-policy +! + vnc export bgp mode group-nve + vnc export bgp group-nve group cust1 + vnc redistribute mode resolve-nve + vnc redistribute ipv4 bgp-direct + ! +end diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/r1/ldpd.conf b/tests/topotests/bgp_direct_to_bgp_vpn/r1/ldpd.conf new file mode 100644 index 0000000000..428b674106 --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/r1/ldpd.conf @@ -0,0 +1,23 @@ +hostname r1 +log file /tmp/r1-ldpd.log +! +debug mpls ldp zebra +debug mpls ldp event +debug mpls ldp errors +debug mpls ldp messages recv +debug mpls ldp messages sent +debug mpls ldp discovery hello recv +debug mpls ldp discovery hello sent +! +mpls ldp + router-id 1.1.1.1 + ! + address-family ipv4 + discovery transport-address 1.1.1.1 + ! + interface r1-eth0 + ! + ! +! +line vty +! diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/r1/ospfd.conf b/tests/topotests/bgp_direct_to_bgp_vpn/r1/ospfd.conf new file mode 100644 index 0000000000..d05e7c9406 --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/r1/ospfd.conf @@ -0,0 +1,8 @@ +hostname r1 +log file /tmp/r1-ospfd.log +! +router ospf + router-id 1.1.1.1 + network 0.0.0.0/4 area 0 + redistribute static +! diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/r1/zebra.conf b/tests/topotests/bgp_direct_to_bgp_vpn/r1/zebra.conf new file mode 100644 index 0000000000..cddc7b679a --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/r1/zebra.conf @@ -0,0 +1,24 @@ +log file /tmp/r1-zebra.log +! +hostname r1 +! +interface lo + ip address 1.1.1.1/32 +! +interface r1-eth0 + description to sw0 + ip address 10.0.1.1/24 + no link-detect +! +interface r1-eth4 + description to ce1 + ip address 192.168.1.1/24 + no link-detect +! +ip route 99.0.0.1/32 192.168.1.2 +! +ip forwarding +! +! +line vty +! diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/r2/bgpd.conf b/tests/topotests/bgp_direct_to_bgp_vpn/r2/bgpd.conf new file mode 100644 index 0000000000..241c2ac0ae --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/r2/bgpd.conf @@ -0,0 +1,33 @@ +frr defaults traditional +! +hostname r2 +password zebra +log stdout notifications +log monitor notifications +log commands +router bgp 5226 + bgp router-id 2.2.2.2 + bgp cluster-id 2.2.2.2 + neighbor 1.1.1.1 remote-as 5226 + neighbor 1.1.1.1 update-source 2.2.2.2 + neighbor 3.3.3.3 remote-as 5226 + neighbor 3.3.3.3 update-source 2.2.2.2 + neighbor 4.4.4.4 remote-as 5226 + neighbor 4.4.4.4 update-source 2.2.2.2 + address-family ipv4 unicast + no neighbor 1.1.1.1 activate + no neighbor 3.3.3.3 activate + no neighbor 4.4.4.4 activate + exit-address-family + address-family ipv4 vpn + neighbor 1.1.1.1 activate + neighbor 1.1.1.1 route-reflector-client + neighbor 3.3.3.3 activate + neighbor 3.3.3.3 route-reflector-client + neighbor 4.4.4.4 activate + neighbor 4.4.4.4 route-reflector-client + exit-address-family +end + + + diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/r2/ldpd.conf b/tests/topotests/bgp_direct_to_bgp_vpn/r2/ldpd.conf new file mode 100644 index 0000000000..9bba8d8387 --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/r2/ldpd.conf @@ -0,0 +1,25 @@ +hostname r2 +log file /tmp/r2-ldpd.log +! +debug mpls ldp zebra +debug mpls ldp event +debug mpls ldp errors +debug mpls ldp messages recv +debug mpls ldp messages sent +debug mpls ldp discovery hello recv +debug mpls ldp discovery hello sent +! +mpls ldp + router-id 2.2.2.2 + ! + address-family ipv4 + discovery transport-address 2.2.2.2 + ! + interface r2-eth0 + ! + interface r2-eth1 + ! + ! +! +line vty +! diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/r2/ospfd.conf b/tests/topotests/bgp_direct_to_bgp_vpn/r2/ospfd.conf new file mode 100644 index 0000000000..c58914a7fa --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/r2/ospfd.conf @@ -0,0 +1,7 @@ +hostname r2 +log file /tmp/r2-ospfd.log +! +router ospf + router-id 2.2.2.2 + network 0.0.0.0/0 area 0 +! diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/r2/zebra.conf b/tests/topotests/bgp_direct_to_bgp_vpn/r2/zebra.conf new file mode 100644 index 0000000000..b74ce318e4 --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/r2/zebra.conf @@ -0,0 +1,27 @@ +log file /tmp/r2-zebra.log +! +hostname r2 +! +interface lo + ip address 2.2.2.2/32 +! +interface r2-eth0 + description to sw0 + ip address 10.0.1.2/24 + no link-detect +! +interface r2-eth1 + description to sw1 + ip address 10.0.2.2/24 + no link-detect +! +interface r2-eth2 + description to sw2 + ip address 10.0.3.2/24 + no link-detect +! +ip forwarding +! +! +line vty +! diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/r3/bgpd.conf b/tests/topotests/bgp_direct_to_bgp_vpn/r3/bgpd.conf new file mode 100644 index 0000000000..5591c633c6 --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/r3/bgpd.conf @@ -0,0 +1,42 @@ +frr defaults traditional +! +hostname r3 +password zebra +log stdout notifications +log monitor notifications +log commands +router bgp 5226 + bgp router-id 3.3.3.3 + bgp cluster-id 3.3.3.3 + neighbor 192.168.1.2 remote-as 5226 + neighbor 192.168.1.2 update-source 192.168.1.2 + neighbor 192.168.1.2 route-reflector-client + neighbor 2.2.2.2 remote-as 5226 + neighbor 2.2.2.2 update-source 3.3.3.3 +! + address-family ipv4 unicast + redistribute vnc-direct + neighbor 192.168.1.2 activate + neighbor 192.168.1.2 next-hop-self + no neighbor 2.2.2.2 activate + exit-address-family + address-family ipv4 vpn + neighbor 2.2.2.2 activate + exit-address-family +! + vrf-policy cust1 + label 103 + rd 10:3 + rt both 52:100 + nexthop 192.168.1.1 + exit-vrf-policy +! + vnc export bgp mode group-nve + vnc export bgp group-nve group cust1 + vnc redistribute mode resolve-nve + vnc redistribute ipv4 bgp-direct +! +end + + + diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/r3/ldpd.conf b/tests/topotests/bgp_direct_to_bgp_vpn/r3/ldpd.conf new file mode 100644 index 0000000000..53ccf9ed17 --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/r3/ldpd.conf @@ -0,0 +1,23 @@ +hostname r3 +log file /tmp/r3-ldpd.log +! +debug mpls ldp zebra +debug mpls ldp event +debug mpls ldp errors +debug mpls ldp messages recv +debug mpls ldp messages sent +debug mpls ldp discovery hello recv +debug mpls ldp discovery hello sent +! +mpls ldp + router-id 3.3.3.3 + ! + address-family ipv4 + discovery transport-address 3.3.3.3 + ! + interface r3-eth0 + ! + ! +! +line vty +! diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/r3/ospfd.conf b/tests/topotests/bgp_direct_to_bgp_vpn/r3/ospfd.conf new file mode 100644 index 0000000000..bbd9487532 --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/r3/ospfd.conf @@ -0,0 +1,9 @@ +hostname r3 +password 1 +log file /tmp/r3-ospfd.log +! +router ospf + router-id 3.3.3.3 + network 0.0.0.0/4 area 0 + redistribute static +! diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/r3/zebra.conf b/tests/topotests/bgp_direct_to_bgp_vpn/r3/zebra.conf new file mode 100644 index 0000000000..eff266bcfa --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/r3/zebra.conf @@ -0,0 +1,29 @@ +log file /tmp/r3-zebra.log +! +hostname r3 +! +interface lo + ip address 3.3.3.3/32 +! +interface r3-eth0 + description to sw1 + ip address 10.0.2.3/24 + no link-detect +! +interface r3-eth1 + description to sw2 + ip address 10.0.3.3/24 + no link-detect +! +interface r3-eth4 + description to ce2 + ip address 192.168.1.1/24 + no link-detect +! +ip route 99.0.0.2/32 192.168.1.2 +! +ip forwarding +! +! +line vty +! diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/r4/bgpd.conf b/tests/topotests/bgp_direct_to_bgp_vpn/r4/bgpd.conf new file mode 100644 index 0000000000..145390d724 --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/r4/bgpd.conf @@ -0,0 +1,42 @@ +frr defaults traditional +! +hostname r4 +password zebra +log stdout notifications +log monitor notifications +log commands +router bgp 5226 + bgp router-id 4.4.4.4 + bgp cluster-id 4.4.4.4 + neighbor 192.168.1.2 remote-as 5226 + neighbor 192.168.1.2 update-source 192.168.1.1 + neighbor 192.168.1.2 route-reflector-client + neighbor 2.2.2.2 remote-as 5226 + neighbor 2.2.2.2 update-source 4.4.4.4 +! + address-family ipv4 unicast + redistribute vnc-direct + neighbor 192.168.1.2 activate + neighbor 192.168.1.2 next-hop-self + no neighbor 2.2.2.2 activate + exit-address-family + address-family ipv4 vpn + neighbor 2.2.2.2 activate + exit-address-family +! + vrf-policy cust1 + label 104 + rd 10:4 + rt both 52:100 + nexthop 192.168.1.1 + exit-vrf-policy +! + vnc export bgp mode group-nve + vnc export bgp group-nve group cust1 + vnc redistribute mode resolve-nve + vnc redistribute ipv4 bgp-direct +! +end + + + diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/r4/ldpd.conf b/tests/topotests/bgp_direct_to_bgp_vpn/r4/ldpd.conf new file mode 100644 index 0000000000..7bfdf7f3a8 --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/r4/ldpd.conf @@ -0,0 +1,23 @@ +hostname r4 +log file /tmp/r4-ldpd.log +! +debug mpls ldp zebra +debug mpls ldp event +debug mpls ldp errors +debug mpls ldp messages recv +debug mpls ldp messages sent +debug mpls ldp discovery hello recv +debug mpls ldp discovery hello sent +! +mpls ldp + router-id 4.4.4.4 + ! + address-family ipv4 + discovery transport-address 4.4.4.4 + ! + interface r4-eth0 + ! + ! +! +line vty +! diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/r4/ospfd.conf b/tests/topotests/bgp_direct_to_bgp_vpn/r4/ospfd.conf new file mode 100644 index 0000000000..c2355d2b26 --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/r4/ospfd.conf @@ -0,0 +1,8 @@ +hostname r4 +log file /tmp/r4-ospfd.log +! +router ospf + router-id 4.4.4.4 + network 0.0.0.0/4 area 0 + redistribute static +! diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/r4/zebra.conf b/tests/topotests/bgp_direct_to_bgp_vpn/r4/zebra.conf new file mode 100644 index 0000000000..6bcb302336 --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/r4/zebra.conf @@ -0,0 +1,23 @@ +log file /tmp/r4-zebra.log +! +hostname r4 +! +interface lo + ip address 4.4.4.4/32 +! +interface r4-eth0 + description to sw1 + ip address 10.0.2.4/24 + no link-detect +! +interface r4-eth4 + description to ce3 + ip address 192.168.1.1/24 + no link-detect +! +ip route 99.0.0.3/32 192.168.1.2 +! +ip forwarding +! +line vty +! diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/scripts/add_routes.py b/tests/topotests/bgp_direct_to_bgp_vpn/scripts/add_routes.py new file mode 100644 index 0000000000..ac25d0b8fc --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/scripts/add_routes.py @@ -0,0 +1,13 @@ +from lutil import luCommand +luCommand('r1','vtysh -c "add vrf cust1 prefix 99.0.0.1/32"','.','none','IP Address') +luCommand('r3','vtysh -c "add vrf cust1 prefix 99.0.0.2/32"','.','none','IP Address') +luCommand('r4','vtysh -c "add vrf cust1 prefix 99.0.0.3/32"','.','none','IP Address') +luCommand('r1','vtysh -c "show vnc registrations local"','99.0.0.1','pass','Local Registration') +luCommand('r3','vtysh -c "show vnc registrations local"','99.0.0.2','pass','Local Registration') +luCommand('r4','vtysh -c "show vnc registrations local"','99.0.0.3','pass','Local Registration') +luCommand('r1','vtysh -c "show vnc registrations remote"','4 out of 4','wait','Remote Registration') +luCommand('r3','vtysh -c "show vnc registrations remote"','6 out of 6','wait','Remote Registration') +luCommand('r4','vtysh -c "show vnc registrations remote"','4 out of 4','wait','Remote Registration') +luCommand('r1','vtysh -c "show vnc registrations"','.','none') +luCommand('r3','vtysh -c "show vnc registrations"','.','none') +luCommand('r4','vtysh -c "show vnc registrations"','.','none') diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/scripts/adjacencies.py b/tests/topotests/bgp_direct_to_bgp_vpn/scripts/adjacencies.py new file mode 100644 index 0000000000..049c1b430d --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/scripts/adjacencies.py @@ -0,0 +1,5 @@ +from lutil import luCommand +luCommand('r1','vtysh -c "show bgp summary"',' 00:0.* 00:0','wait','Adjacencies up') +luCommand('r2','vtysh -c "show bgp summary"',' 00:0.* 00:0','wait','Adjacencies up') +luCommand('r3','vtysh -c "show bgp summary"',' 00:0.* 00:0','wait','Adjacencies up') +luCommand('r4','vtysh -c "show bgp summary"',' 00:0.* 00:0','wait','Adjacencies up') diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/scripts/check_routes.py b/tests/topotests/bgp_direct_to_bgp_vpn/scripts/check_routes.py new file mode 100644 index 0000000000..e4a9044393 --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/scripts/check_routes.py @@ -0,0 +1,13 @@ +from lutil import luCommand +luCommand('ce1','vtysh -c "show bgp ipv4 uni"','7 routes and 7','wait','Local and remote routes') +luCommand('ce2','vtysh -c "show bgp ipv4 uni"','7 routes and 9','wait','Local and remote routes') +luCommand('ce3','vtysh -c "show bgp ipv4 uni"','7 routes and 7','wait','Local and remote routes') +luCommand('r1','vtysh -c "show bgp ipv4 uni"','7 routes and 9','pass','Unicast SAFI') +luCommand('r2','vtysh -c "show bgp ipv4 uni"','No BGP prefixes displayed','pass','Unicast SAFI') +luCommand('r3','vtysh -c "show bgp ipv4 uni"','7 routes and 9','pass','Unicast SAFI') +luCommand('r4','vtysh -c "show bgp ipv4 uni"','7 routes and 9','pass','Unicast SAFI') +luCommand('r1','vtysh -c "show bgp ipv4 vpn"','7 routes and 7','pass','VPN SAFI') +luCommand('r2','vtysh -c "show bgp ipv4 vpn"','7 routes and 7','pass','VPN SAFI') +luCommand('r3','vtysh -c "show bgp ipv4 vpn"','7 routes and 7','pass','VPN SAFI') +luCommand('r4','vtysh -c "show bgp ipv4 vpn"','7 routes and 7','pass','VPN SAFI') + diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/scripts/cleanup_all.py b/tests/topotests/bgp_direct_to_bgp_vpn/scripts/cleanup_all.py new file mode 100644 index 0000000000..3a2f037833 --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/scripts/cleanup_all.py @@ -0,0 +1,17 @@ +from lutil import luCommand +luCommand('r1','vtysh -c "clear vrf cust1 prefix 99.0.0.1/32"','.','none','Cleared VRF route') +luCommand('r3','vtysh -c "clear vrf cust1 prefix 99.0.0.2/32"','.','none','Cleared VRF route') +luCommand('r4','vtysh -c "clear vrf cust1 prefix 99.0.0.3/32"','.','none','Cleared VRF route') +luCommand('r1','vtysh -c "show vnc registrations local"','99.0.0.1','fail','Local Registration cleared') +luCommand('r3','vtysh -c "show vnc registrations local"','99.0.0.2','fail','Local Registration cleared') +luCommand('r4','vtysh -c "show vnc registrations local"','99.0.0.3','fail','Local Registration cleared') +luCommand('r1','vtysh -c "show bgp ipv4 uni"','2 routes and 2','wait','Unicast SAFI updated') +luCommand('r2','vtysh -c "show bgp ipv4 uni"','No BGP prefixes displayed','pass','Unicast SAFI') +luCommand('r3','vtysh -c "show bgp ipv4 uni"','2 routes and 2','wait','Unicast SAFI updated') +luCommand('r4','vtysh -c "show bgp ipv4 uni"','2 routes and 2','wait','Unicast SAFI updated') +luCommand('ce1','vtysh -c "show bgp ipv4 uni"','2 routes and 2','wait','Local and remote routes') +luCommand('ce2','vtysh -c "show bgp ipv4 uni"','2 routes and 2','wait','Local and remote routes') +luCommand('ce3','vtysh -c "show bgp ipv4 uni"','2 routes and 2','wait','Local and remote routes') +luCommand('r1','vtysh -c "show vnc registrations remote"','Prefix ','fail','Remote Registration cleared') +luCommand('r3','vtysh -c "show vnc registrations remote"','Prefix ','fail','Remote Registration cleared') +luCommand('r4','vtysh -c "show vnc registrations remote"','Prefix ','fail','Remote Registration cleared') diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/test_bgp_direct_to_bgp_vpn.py b/tests/topotests/bgp_direct_to_bgp_vpn/test_bgp_direct_to_bgp_vpn.py new file mode 100755 index 0000000000..34c64db057 --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/test_bgp_direct_to_bgp_vpn.py @@ -0,0 +1,294 @@ +#!/usr/bin/env python + +# +# test_bgp_multiview_topo1.py +# Part of NetDEF Topology Tests +# +# Copyright (c) 2016 by +# Network Device Education Foundation, Inc. ("NetDEF") +# +# Permission to use, copy, modify, and/or distribute this software +# for any purpose with or without fee is hereby granted, provided +# that the above copyright notice and this permission notice appear +# in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND NETDEF DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NETDEF BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY +# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +# OF THIS SOFTWARE. +# + +""" +test_mpls_vpn_topo1.py: Simple FRR/Quagga MPLS VPN Test + + | + +----+----+ + | ce1 | + | 99.0.0.1| CE Router + +----+----+ + 192.168.1. | .2 ce1-eth0 + | .1 r1-eth4 + +---------+ + | r1 | + | 1.1.1.1 | PE Router + +----+----+ + | .1 r1-eth0 + | + ~~~~~~~~~~~~~ + ~~ sw0 ~~ + ~~ 10.0.1.0/24 ~~ + ~~~~~~~~~~~~~ + |10.0.1.0/24 + | + | .2 r2-eth0 + +----+----+ + | r2 | + | 2.2.2.2 | P router + +--+---+--+ + r2-eth2 .2 | | .2 r2-eth1 + ______/ \______ + / \ + ~~~~~~~~~~~~~ ~~~~~~~~~~~~~ +~~ sw2 ~~ ~~ sw1 ~~ +~~ 10.0.3.0/24 ~~ ~~ 10.0.2.0/24 ~~ + ~~~~~~~~~~~~~ ~~~~~~~~~~~~~ + | / | + \ _________/ | + \ / \ +r3-eth1 .3 | | .3 r3-eth0 | .4 r4-eth0 + +----+--+---+ +----+----+ + | r3 | | r4 | + | 3.3.3.3 | | 4.4.4.4 | PE Routers + +-----------+ +---------+ + 192.168.1. | .1 192.168.1. | .1 rX-eth4 + | .2 | .2 ceX-eth0 + +-----+-----+ +----+-----+ + | ce2 | | ce3 | + | 99.0.0.2 | | 99.0.0.3 | CE Routers + +-----+-----+ +----+-----+ + | | + +""" + +import os +import re +import sys +import pytest +from time import sleep + +from mininet.topo import Topo +from mininet.net import Mininet +from mininet.node import Node, OVSSwitch, Host +from mininet.log import setLogLevel, info +from mininet.cli import CLI +from mininet.link import Intf + +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + '/utilities') + +from lib import topotest + +from lutil import luStart, luInclude, luFinish, luNumFail + +fatal_error = "" + +# Expected version of CLI Output - Appendix to filename +# empty string = current, latest output (default) +# "-1" ... "-NNN" previous versions (incrementing with each version) +cli_version = "" + +##################################################### +## +## Network Topology Definition +## +##################################################### + +class NetworkTopo(Topo): + "VPN Test Topology 1" + + def build(self, **_opts): + + # Setup Routers + router = {} + for i in range(1, 5): + router[i] = topotest.addRouter(self, 'r%s' % i) + ce = {} + for i in range(1, 4): + ce[i] = topotest.addRouter(self, 'ce%s' % i) + + self.addLink(ce[1], router[1], intfName1='ce1-eth0', intfName2='r1-eth4', addr1='00:11:01:00:00:00', addr2='00:11:00:01:00:04') + self.addLink(ce[2], router[3], intfName1='ce2-eth0', intfName2='r3-eth4', addr1='00:11:02:00:00:00', addr2='00:11:00:03:00:04') + self.addLink(ce[3], router[4], intfName1='ce3-eth0', intfName2='r4-eth4', addr1='00:11:03:00:00:00', addr2='00:11:00:04:00:04') + # Setup Switches, add Interfaces and Connections + switch = {} + # First switch + switch[0] = self.addSwitch('sw0', cls=topotest.LegacySwitch) + self.addLink(switch[0], router[1], intfName2='r1-eth0', addr1='80:AA:00:00:00:00', addr2='00:11:00:01:00:00') + self.addLink(switch[0], router[2], intfName2='r2-eth0', addr1='80:AA:00:00:00:01', addr2='00:11:00:02:00:00') + # Second switch + switch[1] = self.addSwitch('sw1', cls=topotest.LegacySwitch) + self.addLink(switch[1], router[2], intfName2='r2-eth1', addr1='80:AA:00:01:00:00', addr2='00:11:00:02:00:01') + self.addLink(switch[1], router[3], intfName2='r3-eth0', addr1='80:AA:00:01:00:01', addr2='00:11:00:03:00:00') + self.addLink(switch[1], router[4], intfName2='r4-eth0', addr1='80:AA:00:01:00:02', addr2='00:11:00:04:00:00') + # Third switch + switch[2] = self.addSwitch('sw2', cls=topotest.LegacySwitch) + self.addLink(switch[2], router[2], intfName2='r2-eth2', addr1='80:AA:00:02:00:00', addr2='00:11:00:02:00:02') + self.addLink(switch[2], router[3], intfName2='r3-eth1', addr1='80:AA:00:02:00:01', addr2='00:11:00:03:00:01') + +##################################################### +## +## Tests starting +## +##################################################### + +def setup_module(module): + global topo, net + global fatal_error + global thisDir + + print("\n\n** %s: Setup Topology" % module.__name__) + print("******************************************\n") + + print("Cleanup old Mininet runs") + os.system('sudo mn -c > /dev/null 2>&1') + + thisDir = os.path.dirname(os.path.realpath(__file__)) + topo = NetworkTopo() + + net = Mininet(controller=None, topo=topo) + net.start() + luStart(thisDir, net) + + # Starting Routers + for i in range(1, 5): + net['r%s' % i].loadConf('zebra', '%s/r%s/zebra.conf' % (thisDir, i)) + net['r%s' % i].loadConf('ospfd', '%s/r%s/ospfd.conf' % (thisDir, i)) + net['r%s' % i].loadConf('ldpd', '%s/r%s/ldpd.conf' % (thisDir, i)) + net['r%s' % i].loadConf('bgpd', '%s/r%s/bgpd.conf' % (thisDir, i)) + fatal_error = net['r%s' % i].startRouter() + + if fatal_error != "": + break + + # Starting CE Routers + for i in range(1, 4): + net['ce%s' % i].loadConf('zebra', '%s/ce%s/zebra.conf' % (thisDir, i)) + net['ce%s' % i].loadConf('bgpd', '%s/ce%s/bgpd.conf' % (thisDir, i)) + fatal_error = net['ce%s' % i].startRouter() + + if fatal_error != "": + break + + # For debugging after starting FRR/Quagga daemons, uncomment the next line + #CLI(net) + +def teardown_module(module): + global net + + print("\n\n** %s: Shutdown Topology" % module.__name__) + print("******************************************\n") + + # End - Shutdown network + net.stop() + +def test_add_vnc_routes(): + global fatal_error + global net + global cli_version + + # Skip if previous fatal error condition is raised + if (fatal_error != ""): + pytest.skip(fatal_error) + + print("\n\n** Running main test cases") + print("******************************\n") + luInclude('teststart.py') + # For debugging after starting FRR/Quagga daemons, uncomment the next line + #CLI(net) + + luInclude('testfinish.py') + # For debugging after starting FRR/Quagga daemons, uncomment the next line + #CLI(net) + + # Make sure that all daemons are running + numFail = luNumFail() + if numFail > 0: + fatal_error = '%d tests failed' % numFail + assert fatal_error == "", fatal_error + +def test_shutdown_check_stderr(): + global fatal_error + global net + + # Skip if previous fatal error condition is raised + if (fatal_error != ""): + pytest.skip(fatal_error) + + if os.environ.get('TOPOTESTS_CHECK_STDERR') is None: + print("SKIPPED final check on StdErr output: Disabled (TOPOTESTS_CHECK_STDERR undefined)\n") + pytest.skip('Skipping test for Stderr output') + + thisDir = os.path.dirname(os.path.realpath(__file__)) + + print("\n\n** Verifying unexpected STDERR output from daemons") + print("******************************************\n") + + for i in range(1, 5): + net['r%s' % i].stopRouter() + log = net['r%s' % i].getStdErr('bgpd') + if log: + print("\nRouter r%s BGPd StdErr Log:\n%s" % (i, log)) + log = net['r%s' % i].getStdErr('ldpd') + if log: + print("\nRouter r%s LDPd StdErr Log:\n%s" % (i, log)) + log = net['r%s' % i].getStdErr('ospfd') + if log: + print("\nRouter r%s OSPFd StdErr Log:\n%s" % (i, log)) + log = net['r%s' % i].getStdErr('zebra') + if log: + print("\nRouter r%s Zebra StdErr Log:\n%s" % (i, log)) + + for i in range(1, 4): + net['ce%s' % i].stopRouter() + log = net['ce%s' % i].getStdErr('bgpd') + if log: + print("\nRouter r%s BGPd StdErr Log:\n%s" % (i, log)) + log = net['ce%s' % i].getStdErr('zebra') + if log: + print("\nRouter r%s Zebra StdErr Log:\n%s" % (i, log)) + + +def test_shutdown_check_memleak(): + global fatal_error + global net + + # Skip if previous fatal error condition is raised + if (fatal_error != ""): + pytest.skip(fatal_error) + + if os.environ.get('TOPOTESTS_CHECK_MEMLEAK') is None: + print("SKIPPED final check on Memory leaks: Disabled (TOPOTESTS_CHECK_MEMLEAK undefined)\n") + pytest.skip('Skipping test for memory leaks') + + thisDir = os.path.dirname(os.path.realpath(__file__)) + + for i in range(1, 5): + net['r%s' % i].stopRouter() + net['r%s' % i].report_memory_leaks(os.environ.get('TOPOTESTS_CHECK_MEMLEAK'), os.path.basename(__file__)) + + for i in range(1, 4): + net['ce%s' % i].stopRouter() + net['ce%s' % i].report_memory_leaks(os.environ.get('TOPOTESTS_CHECK_MEMLEAK'), os.path.basename(__file__)) + +if __name__ == '__main__': + + setLogLevel('info') + # To suppress tracebacks, either use the following pytest call or add "--tb=no" to cli + # retval = pytest.main(["-s", "--tb=no"]) + retval = pytest.main(["-s"]) + print(luFinish()) + sys.exit(retval) diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/testfinish.py b/tests/topotests/bgp_direct_to_bgp_vpn/testfinish.py new file mode 100644 index 0000000000..fe83773462 --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/testfinish.py @@ -0,0 +1,2 @@ +from lutil import luInclude +luInclude('scripts/cleanup_all.py') diff --git a/tests/topotests/bgp_direct_to_bgp_vpn/teststart.py b/tests/topotests/bgp_direct_to_bgp_vpn/teststart.py new file mode 100644 index 0000000000..4fd90af901 --- /dev/null +++ b/tests/topotests/bgp_direct_to_bgp_vpn/teststart.py @@ -0,0 +1,4 @@ +from lutil import luInclude +luInclude('scripts/adjacencies.py') +luInclude('scripts/add_routes.py') +luInclude('scripts/check_routes.py') -- 2.39.5