Skip to content

Commit

Permalink
multinode: Adding multinode ovn-ic test.
Browse files Browse the repository at this point in the history
This commit add a new ovn-ic test for the ovn-fake-multinode with 3 AZs
testing IPv4/IPv6 connectivity between them.

Signed-off-by: Tiago Pires <[email protected]>
  • Loading branch information
Tiago Pires authored and numansiddique committed Feb 4, 2025
1 parent aac5017 commit d1444c6
Show file tree
Hide file tree
Showing 2 changed files with 221 additions and 0 deletions.
80 changes: 80 additions & 0 deletions tests/multinode-macros.at
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ m_central_as () {
}

check_fake_multinode_setup() {
skip_fake_node_multi_az_setup
check m_as ovn-central-az1-1 ovn-nbctl --wait=sb sync
AT_CHECK([m_as ovn-chassis-1 ovn-appctl -t ovn-controller version], [0], [ignore])
AT_CHECK([m_as ovn-chassis-2 ovn-appctl -t ovn-controller version], [0], [ignore])
Expand Down Expand Up @@ -225,4 +226,83 @@ m_wait_for_ports_up() {
fi
}

skip_fake_node_multi_az_setup() {
m_as ovn-central-az3-1 ovn-nbctl --wait=sb sync
if [[ $? == 0 ]] ; then
AT_CHECK([exit 77])
fi
}

check_fake_node_multi_az_setup() {
m_as ovn-central-az3-1 ovn-nbctl --wait=sb sync
if [[ $? != 0 ]] ; then
AT_CHECK([exit 77])
fi

# Check if the fake multinode setup is using SSL, it will
# skip if it is enabled. The cleanup will break the setup,
# so it is recommended to use without SSL in order to
# test the OVN IC with fake multinode setup.
m_as ovn-chassis-1 ovs-vsctl list open | grep "ssl:"
if [[ $? == 0 ]] ; then
AT_CHECK([exit 77])
fi
}

check_fake_multinode_setup_by_az() {
check_fake_node_multi_az_setup

check m_as ovn-central-az1-1 ovn-nbctl --wait=sb sync
check m_as ovn-central-az2-1 ovn-nbctl --wait=sb sync
check m_as ovn-central-az2-1 ovn-nbctl --wait=sb sync

for c in $1
do
m_as $c ovn-appctl -t ovn-controller version
done
}

cleanup_multinode_resources_by_az() {
check_fake_node_multi_az_setup
m_as ovn-central-az1-1 rm -f /etc/ovn/ovnnb_db.db
m_as ovn-central-az1-1 /usr/share/ovn/scripts/ovn-ctl restart_northd
m_as ovn-central-az2-1 rm -f /etc/ovn/ovnnb_db.db
m_as ovn-central-az2-1 /usr/share/ovn/scripts/ovn-ctl restart_northd
m_as ovn-central-az3-1 rm -f /etc/ovn/ovnnb_db.db
m_as ovn-central-az3-1 /usr/share/ovn/scripts/ovn-ctl restart_northd
check m_as ovn-central-az1-1 ovn-nbctl --wait=sb sync
check m_as ovn-central-az2-1 ovn-nbctl --wait=sb sync
check m_as ovn-central-az3-1 ovn-nbctl --wait=sb sync

for c in $1
do
check m_as $c ovs-vsctl del-br br-int
check m_as $c ip --all netns delete
done
}

configure_multinode_az() {
# Configure OVN IC by AZ
check m_as ovn-central-az1-1 ovn-nbctl set-connection ptcp:6641
check m_as ovn-central-az1-1 ovn-sbctl set-connection ptcp:6642
check m_as ovn-central-az1-1 ovn-nbctl set NB_Global . name=ovn-central-az1
check m_as ovn-central-az1-1 ovn-nbctl set NB_Global . options:ic-route-adv=true \
options:ic-route-learn=true
check m_as ovn-central-az2-1 ovn-nbctl set-connection ptcp:6641
check m_as ovn-central-az2-1 ovn-sbctl set-connection ptcp:6642
check m_as ovn-central-az2-1 ovn-nbctl set NB_Global . name=ovn-central-az2
check m_as ovn-central-az2-1 ovn-nbctl set NB_Global . options:ic-route-adv=true \
options:ic-route-learn=true
check m_as ovn-central-az3-1 ovn-nbctl set-connection ptcp:6641
check m_as ovn-central-az3-1 ovn-sbctl set-connection ptcp:6642
check m_as ovn-central-az3-1 ovn-nbctl set NB_Global . name=ovn-central-az3
check m_as ovn-central-az3-1 ovn-nbctl set NB_Global . options:ic-route-adv=true \
options:ic-route-learn=true

# Configure OVN IC Gateway
check m_as ovn-gw-1 ovs-vsctl set open . external-ids:ovn-is-interconn=true
check m_as ovn-gw-2 ovs-vsctl set open . external-ids:ovn-is-interconn=true
check m_as ovn-gw-3 ovs-vsctl set open . external-ids:ovn-is-interconn=true
}

OVS_END_SHELL_HELPERS
141 changes: 141 additions & 0 deletions tests/multinode.at
Original file line number Diff line number Diff line change
Expand Up @@ -2575,3 +2575,144 @@ Connected to 10.0.2.4 (10.0.2.4) port 8080
fi

AT_CLEANUP

AT_SETUP([ovn multinode - ovn-ic - inter-AZ IPv4/IPv6])

# Check that ovn-fake-multinode setup is up and running - requires additional nodes
check_fake_multinode_setup_by_az 'ovn-chassis-1 ovn-chassis-2 ovn-chassis-3 ovn-gw-1 ovn-gw-2 ovn-gw-3'

# Delete the multinode NB and OVS resources before starting the test.
cleanup_multinode_resources_by_az 'ovn-chassis-1 ovn-chassis-2 ovn-chassis-3 ovn-gw-1 ovn-gw-2 ovn-gw-3'

# Configure OVN IC by AZ
configure_multinode_az

# Test Inter-AZ routing

# Create the Transit Switch
m_as ovn-central-az1-1 ovn-ic-nbctl ts-add ts-1

# AZ1 - Create one logical switch with one port
check m_as ovn-central-az1-1 ovn-nbctl ls-add sw1-az1
check m_as ovn-central-az1-1 ovn-nbctl lsp-add sw1-az1 sw1-az1-port1
check m_as ovn-central-az1-1 ovn-nbctl lsp-set-addresses sw1-az1-port1 "40:54:00:00:01:01 10.0.1.3 2001::3"

# AZ1 - Create a logical router and attach the logical switch
check m_as ovn-central-az1-1 ovn-nbctl lr-add lr1
check m_as ovn-central-az1-1 ovn-nbctl lrp-add lr1 lr1-sw1-az1 00:00:00:00:ff:01 10.0.1.1/24 2001::1/64
check m_as ovn-central-az1-1 ovn-nbctl lsp-add sw1-az1 sw1-az1-lr1
check m_as ovn-central-az1-1 ovn-nbctl lsp-set-type sw1-az1-lr1 router
check m_as ovn-central-az1-1 ovn-nbctl lsp-set-addresses sw1-az1-lr1 router
check m_as ovn-central-az1-1 ovn-nbctl lsp-set-options sw1-az1-lr1 router-port=lr1-sw1-az1

# AZ1 - Create the LRP, LSP and interconnect to the Transit Switch
check m_as ovn-central-az1-1 ovn-nbctl lrp-add lr1 lr1-ts-1 00:00:00:00:00:01 169.254.251.1/24 fe80:10::1/64
check m_as ovn-central-az1-1 ovn-nbctl lrp-set-gateway-chassis lr1-ts-1 ovn-gw-1
check m_as ovn-central-az1-1 ovn-nbctl lsp-add ts-1 lr1-lsp1 -- \
lsp-set-addresses lr1-lsp1 router -- \
lsp-set-type lr1-lsp1 router -- \
lsp-set-options lr1-lsp1 router-port=lr1-ts-1

m_as ovn-chassis-1 ip link del sw1-az1-p1-p
m_as ovn-chassis-1 /data/create_fake_vm.sh sw1-az1-port1 sw1-az1-p1 40:54:00:00:01:01 1342 10.0.1.3 24 10.0.1.1 2001::3/64 2001::1

# AZ2 - Create one logical switch with one port
check m_as ovn-central-az2-1 ovn-nbctl ls-add sw1-az2
check m_as ovn-central-az2-1 ovn-nbctl lsp-add sw1-az2 sw1-az2-port1
check m_as ovn-central-az2-1 ovn-nbctl lsp-set-addresses sw1-az2-port1 "40:54:00:00:02:01 10.0.2.3 2002::3"

# AZ2 - Create a logical router and attach the logical switch
check m_as ovn-central-az2-1 ovn-nbctl lr-add lr2
check m_as ovn-central-az2-1 ovn-nbctl lrp-add lr2 lr2-sw1-az2 00:00:00:00:ff:02 10.0.2.1/24 2002::1/64
check m_as ovn-central-az2-1 ovn-nbctl lsp-add sw1-az2 sw1-az2-lr2
check m_as ovn-central-az2-1 ovn-nbctl lsp-set-type sw1-az2-lr2 router
check m_as ovn-central-az2-1 ovn-nbctl lsp-set-addresses sw1-az2-lr2 router
check m_as ovn-central-az2-1 ovn-nbctl lsp-set-options sw1-az2-lr2 router-port=lr2-sw1-az2

# AZ2 - Create the LRP, LSP and interconnect to the Transit Switch
check m_as ovn-central-az2-1 ovn-nbctl lrp-add lr2 lr2-ts-1 00:00:00:00:00:02 169.254.251.2/24 fe80:10::2/64
check m_as ovn-central-az2-1 ovn-nbctl lrp-set-gateway-chassis lr2-ts-1 ovn-gw-2
check m_as ovn-central-az2-1 ovn-nbctl lsp-add ts-1 lr2-lsp1 -- \
lsp-set-addresses lr2-lsp1 router -- \
lsp-set-type lr2-lsp1 router -- \
lsp-set-options lr2-lsp1 router-port=lr2-ts-1

m_as ovn-chassis-2 ip link del sw1-az2-p1-p
m_as ovn-chassis-2 /data/create_fake_vm.sh sw1-az2-port1 sw1-az2-p1 40:54:00:00:02:01 1342 10.0.2.3 24 10.0.2.1 2002::3/64 2002::1

# AZ3 - Create one logical switch with one port
check m_as ovn-central-az3-1 ovn-nbctl ls-add sw1-az3
check m_as ovn-central-az3-1 ovn-nbctl lsp-add sw1-az3 sw1-az3-port1
check m_as ovn-central-az3-1 ovn-nbctl lsp-set-addresses sw1-az3-port1 "40:54:00:00:03:01 10.0.3.3 2003::3"

# AZ3 - Create a logical router and attach the logical switch
check m_as ovn-central-az3-1 ovn-nbctl lr-add lr3
check m_as ovn-central-az3-1 ovn-nbctl lrp-add lr3 lr3-sw1-az3 00:00:00:00:ff:03 10.0.3.1/24 2003::1/64
check m_as ovn-central-az3-1 ovn-nbctl lsp-add sw1-az3 sw1-az3-lr3
check m_as ovn-central-az3-1 ovn-nbctl lsp-set-type sw1-az3-lr3 router
check m_as ovn-central-az3-1 ovn-nbctl lsp-set-addresses sw1-az3-lr3 router
check m_as ovn-central-az3-1 ovn-nbctl lsp-set-options sw1-az3-lr3 router-port=lr3-sw1-az3

# AZ3 - Create the LRP, LSP and interconnect to the Transit Switch
check m_as ovn-central-az3-1 ovn-nbctl lrp-add lr3 lr3-ts-1 00:00:00:00:00:03 169.254.251.3/24 fe80:10::3/64
check m_as ovn-central-az3-1 ovn-nbctl lrp-set-gateway-chassis lr3-ts-1 ovn-gw-3
check m_as ovn-central-az3-1 ovn-nbctl lsp-add ts-1 lr3-lsp1 -- \
lsp-set-addresses lr3-lsp1 router -- \
lsp-set-type lr3-lsp1 router -- \
lsp-set-options lr3-lsp1 router-port=lr3-ts-1

m_as ovn-chassis-1 ip link del sw1-az3-p1-p
m_as ovn-chassis-3 /data/create_fake_vm.sh sw1-az3-port1 sw1-az3-p1 40:54:00:00:03:01 1342 10.0.3.3 24 10.0.3.1 2003::3/64 2003::1

# Test routes from lr2 and lr3 were learned to lr1
AT_CHECK([m_as ovn-central-az1-1 ovn-nbctl lr-route-list lr1 |
grep learned | awk '{print $1, $2}' | sort], [0], [dnl
10.0.2.0/24 169.254.251.2
10.0.3.0/24 169.254.251.3
2002::/64 fe80:10::2
2003::/64 fe80:10::3
])

# Test routes from lr1 and lr3 were learned to lr2
AT_CHECK([m_as ovn-central-az2-1 ovn-nbctl lr-route-list lr2 |
grep learned | awk '{print $1, $2}' | sort], [0], [dnl
10.0.1.0/24 169.254.251.1
10.0.3.0/24 169.254.251.3
2001::/64 fe80:10::1
2003::/64 fe80:10::3
])

# Test routes from lr1 and lr2 were learned to lr3
AT_CHECK([m_as ovn-central-az3-1 ovn-nbctl lr-route-list lr3 |
grep learned | awk '{print $1, $2}' | sort], [0], [dnl
10.0.1.0/24 169.254.251.1
10.0.2.0/24 169.254.251.2
2001::/64 fe80:10::1
2002::/64 fe80:10::2
])

# Ping IPv4 test Inter-AZ - AZ1 vs AZ2
M_NS_CHECK_EXEC([ovn-chassis-1], [sw1-az1-p1], [ping -q -c 3 -i 0.3 -w 2 10.0.2.3 | FORMAT_PING], \
[0], [dnl
3 packets transmitted, 3 received, 0% packet loss, time 0ms
])

# Ping IPv4 test Inter-AZ - AZ1 vs AZ3
M_NS_CHECK_EXEC([ovn-chassis-1], [sw1-az1-p1], [ping -q -c 3 -i 0.3 -w 2 10.0.3.3 | FORMAT_PING], \
[0], [dnl
3 packets transmitted, 3 received, 0% packet loss, time 0ms
])

# Ping IPv6 test Inter-AZ - AZ1 vs AZ2
M_NS_CHECK_EXEC([ovn-chassis-1], [sw1-az1-p1], [ping6 -q -c 3 -i 0.3 -w 2 2002::3 | FORMAT_PING], \
[0], [dnl
3 packets transmitted, 3 received, 0% packet loss, time 0ms
])

# Ping IPv6 test Inter-AZ - AZ1 vs AZ3
M_NS_CHECK_EXEC([ovn-chassis-1], [sw1-az1-p1], [ping6 -q -c 3 -i 0.3 -w 2 2003::3 | FORMAT_PING], \
[0], [dnl
3 packets transmitted, 3 received, 0% packet loss, time 0ms
])

AT_CLEANUP

0 comments on commit d1444c6

Please sign in to comment.