This adds a multinode test showing ovn bgp interfacing with an external bgp agent using frr, which learns the route to a VM and an external node connects via the bgp peer to the VM.
Signed-off-by: MJ Ponsonby <[email protected]> --- tests/multinode.at | 148 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) diff --git a/tests/multinode.at b/tests/multinode.at index 68c9eba22..bfd8a638a 100644 --- a/tests/multinode.at +++ b/tests/multinode.at @@ -3030,4 +3030,152 @@ m_as ovn-chassis-3 killall tcpdump AT_CLEANUP +AT_SETUP([ovn multinode bgp unnumbered]) +check_fake_multinode_setup +cleanup_multinode_resources + +check m_as ovn-gw-3 ovs-vsctl del-port br-ex eth2 + +check m_as ovn-gw-2 sed -i 's/bgpd=no/bgpd=yes/g' /etc/frr/daemons +check m_as ovn-gw-2 sed -i 's/StartLimitBurst=.*/StartLimitBurst=100/g' /usr/lib/systemd/system/frr.service +check m_as ovn-gw-2 systemctl daemon-reload +check m_as ovn-gw-2 systemctl stop frr + +check m_as ovn-gw-3 sed -i 's/bgpd=no/bgpd=yes/g' /etc/frr/daemons +check m_as ovn-gw-3 sed -i 's/StartLimitBurst=.*/StartLimitBurst=100/g' /usr/lib/systemd/system/frr.service +check m_as ovn-gw-3 systemctl daemon-reload +check m_as ovn-gw-3 systemctl restart frr + +check m_as ovn-gw-2 systemctl start frr + +echo "configure +! +ip prefix-list accept-all seq 5 permit any +! +router bgp 4200000100 +neighbor eth2 interface remote-as external +! +address-family ipv4 unicast + neighbor eth2 soft-reconfiguration inbound + neighbor eth2 prefix-list accept-all in +exit-address-family +! +address-family ipv6 unicast + neighbor eth2 soft-reconfiguration inbound + neighbor eth2 activate +exit-address-family +!" | podman exec -i ovn-gw-3 vtysh + +check m_as ovn-gw-2 ovs-vsctl set Open_vSwitch . external-ids:ovn-bridge-mappings="physnet_ovn-gw-2_eth2:br-ex" + +check multinode_nbctl --wait=hv lr-add lr-ovn-gw-2-eth2 +check multinode_nbctl --wait=hv set Logical_Router lr-ovn-gw-2-eth2 options:chassis=ovn-gw-2 +check multinode_nbctl set Logical_Router lr-ovn-gw-2-eth2 options:dynamic-routing=true options:requested-tnl-key=10 options:dynamic-routing-redistribute=nat + +check multinode_nbctl lrp-add lr-ovn-gw-2-eth2 lrp-ovn-gw-2-eth2 02:fb:d6:66:99:1c +check multinode_nbctl lrp-set-options lrp-ovn-gw-2-eth2 dynamic-routing-maintain-vrf=true + +check multinode_nbctl ls-add ls-ovn-gw-2-eth2 + +check multinode_nbctl lsp-add ls-ovn-gw-2-eth2 lsp-ovn-gw-2-eth2 +check multinode_nbctl lsp-set-type lsp-ovn-gw-2-eth2 router +check multinode_nbctl lsp-set-options lsp-ovn-gw-2-eth2 router-port=lrp-ovn-gw-2-eth2 +check multinode_nbctl lsp-set-addresses lsp-ovn-gw-2-eth2 router + +check multinode_nbctl lsp-add ls-ovn-gw-2-eth2 patch-ovn-gw-2-eth2 +check multinode_nbctl lsp-set-addresses patch-ovn-gw-2-eth2 unknown +check multinode_nbctl lsp-set-type patch-ovn-gw-2-eth2 localnet +check multinode_nbctl --wait=hv lsp-set-options patch-ovn-gw-2-eth2 network_name=physnet_ovn-gw-2_eth2 + +OVS_WAIT_UNTIL([m_as ovn-gw-2 ip link | grep -q ovnvrf10:.*UP]) + +check multinode_nbctl lsp-add ls-ovn-gw-2-eth2 lsp-ovn-gw-2-eth2-bgp +check multinode_nbctl lsp-set-addresses lsp-ovn-gw-2-eth2-bgp unknown + +check multinode_nbctl add Logical_Router_Port lrp-ovn-gw-2-eth2 options routing-protocols=\"BGP,BFD\" routing-protocol-redirect=lsp-ovn-gw-2-eth2-bgp +check multinode_nbctl set Logical_Router_Port lrp-ovn-gw-2-eth2 ipv6_ra_configs:send_periodic=true +check multinode_nbctl set Logical_Router_Port lrp-ovn-gw-2-eth2 ipv6_ra_configs:address_mode=slaac +check multinode_nbctl set Logical_Router_Port lrp-ovn-gw-2-eth2 ipv6_ra_configs:max_interval=1 +check multinode_nbctl set Logical_Router_Port lrp-ovn-gw-2-eth2 ipv6_ra_configs:min_interval=1 + +check m_as ovn-gw-2 ovs-vsctl add-port br-int eth2-bgp -- set Interface eth2-bgp type=internal mac=\"02:fb:d6:66:99:1c\" external-ids:iface-id=lsp-ovn-gw-2-eth2-bgp +check m_as ovn-gw-2 ip link set dev eth2-bgp master ovnvrf10 +check m_as ovn-gw-2 ip link set dev eth2-bgp up + +echo "configure +ip prefix-list no-default seq 5 deny 0.0.0.0/0 +ip prefix-list no-default seq 10 permit 0.0.0.0/0 le 32 +ipv6 prefix-list no-default seq 5 deny ::/0 +ipv6 prefix-list no-default seq 10 permit ::/0 le 128 +vrf ovnvrf10 +exit-vrf +router bgp 4210000000 vrf ovnvrf10 +bgp router-id 42.42.42.42 +neighbor eth2-bgp interface remote-as external +address-family ipv4 unicast +redistribute kernel +neighbor eth2-bgp prefix-list no-default out +exit-address-family +address-family ipv6 unicast +neighbor eth2-bgp soft-reconfiguration inbound +neighbor eth2-bgp prefix-list no-default out +redistribute kernel +neighbor eth2-bgp activate +exit-address-family +do copy running-config startup-config" | podman exec -i ovn-gw-2 vtysh + +# OVS_WAIT_UNTIL([m_as ovn-gw-2 vtysh -c 'show bgp vrf ovnvrf10 neighbors' | grep 'Connections established' | sed 's/Connections established \([0-9]\+\); dropped \([0-9]\+\)/\1-\2/' | bc | grep -q '1']) +# OVS_WAIT_UNTIL([m_as ovn-gw-2 vtysh -c 'show bgp vrf ovnvrf10 neighbors' | grep -qE 'Connections established \[1-9\]\[0-9\]*']) +OVS_WAIT_UNTIL([m_as ovn-gw-2 vtysh -c 'show bgp vrf ovnvrf10 neighbors' | grep -qE 'Connections established 1']) + +gw_lr="lr-ovn-gw-2-eth2" +guest_ls="ls-guest-net" +guest_lsp_to_lr="lsp-to-gw" +lrp_to_guest_ls="lrp-to-guest" +guest_lrp_ip="192.168.10.1" +guest_lrp_cidr="$guest_lrp_ip/24" +guest_vm_ip="192.168.10.10" +guest_vm_cidr="$guest_vm_ip/24" +guest_vm_iface="guest-vm" +guest_vm_ns="ns-guest" +lsp_name="ovn-gw-2-ns-guest-$guest_vm_iface" + +check multinode_nbctl lrp-add $gw_lr $lrp_to_guest_ls 02:00:ff:00:00:01 $guest_lrp_cidr +check multinode_nbctl ls-add $guest_ls +check multinode_nbctl lsp-add $guest_ls $guest_lsp_to_lr +check multinode_nbctl lsp-set-type $guest_lsp_to_lr router +check multinode_nbctl lsp-set-options $guest_lsp_to_lr router-port=$lrp_to_guest_ls +check multinode_nbctl lsp-set-addresses $guest_lsp_to_lr router + +check multinode_nbctl lsp-add $guest_ls $lsp_name +check multinode_nbctl lsp-set-addresses $lsp_name '00:00:02:00:01:01 192.168.10.10/24' +m_as ovn-gw-2 /data/create_fake_vm.sh $lsp_name $guest_vm_ns 00:00:02:00:01:01 1342 192.168.10.10 24 192.168.10.1 1000::3/64 1000:a/64 + +neighbor_lla=$(m_as ovn-gw-2 vtysh -c "show bgp vrf ovnvrf10 neighbor eth2-bgp" | grep "^Foreign host:" | awk '{print $3}' | tr -d ',') +check multinode_nbctl lr-route-add $gw_lr "0.0.0.0/0" $neighbor_lla lrp-ovn-gw-2-eth2 +check multinode_nbctl lr-nat-add $gw_lr dnat_and_snat 172.16.10.2 192.168.10.10 + +OVS_WAIT_UNTIL([m_as ovn-central-az1-1 ovn-sbctl list Advertised_Route | grep -q 172.16.10.2]) + +OVS_WAIT_UNTIL([m_as ovn-gw-3 ip route | grep -q 'eth2']) +OVS_WAIT_UNTIL([m_as ovn-gw-3 ping -W 1 -c 1 172.16.10.2]) + +check m_as ovn-chassis-2 ip addr add 10.42.0.10/24 dev eth1 +check m_as ovn-gw-3 ip addr add 10.42.0.1/24 dev eth1 +check m_as ovn-chassis-2 ip route del default +check m_as ovn-chassis-2 ip route add default via 10.42.0.1 + +OVS_WAIT_UNTIL([m_as ovn-chassis-2 ping -W 1 -c 1 172.16.10.2]) + +check m_as ovn-chassis-2 ip route del default +check m_as ovn-chassis-2 ip route add default via 10.88.0.1 dev eth0 proto static metric 100 +check m_as ovn-chassis-2 ip addr del 10.42.0.10/24 dev eth1 +check m_as ovn-gw-3 ip addr del 10.42.0.1/24 dev eth1 + +check m_as ovn-gw-3 systemctl stop frr +check m_as ovn-gw-2 systemctl stop frr +check m_as ovn-gw-3 ovs-vsctl add-port br-ex eth2 +check m_as ovn-gw-2 ovs-vsctl del-port br-int eth2-bgp + +AT_CLEANUP -- 2.43.0 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
