Skip to content

Commit 664a82e

Browse files
simonartxavierdceara
authored andcommitted
controller: Redirect traffic for container port.
When a container port has been migrated to a dst chassis (i.e. its parent has requested-chassis=dst), make sure that we have a flow in src chassis for sending the traffic through tunnel to dst. For the migration scenario test, we were testing the migration of a port p1 from src to dst, and checking whether ping to/from a port p2 in a 3rd node was fine. We now added testing ping from p1 to ports in src, dst and 3rd node. The IPs have been changed to make them more 'logical' i.e. simplify debugging. Due to the high number of ping issued in the test, the ping interval has also been reduced to limit the test duration. Fixes: 894ffe8 ("controller: Release container lport when releasing parent port.") Reported-at: https://issues.redhat.com/browse/FDP-1223 Signed-off-by: Xavier Simonart <[email protected]> Acked-by: Ales Musil <[email protected]> Signed-off-by: Dumitru Ceara <[email protected]> (cherry picked from commit fad4b56)
1 parent e07c56c commit 664a82e

File tree

2 files changed

+138
-48
lines changed

2 files changed

+138
-48
lines changed

controller/physical.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -1777,9 +1777,9 @@ consider_port_binding(const struct physical_ctx *ctx,
17771777
parent_port)) {
17781778
/* Even though there is an ofport for this container
17791779
* parent port, it is requested on different chassis ignore
1780-
* this container port.
1780+
* this ofport.
17811781
*/
1782-
return;
1782+
ofport = 0;
17831783
}
17841784
}
17851785
} else if (type == LP_LOCALNET || type == LP_L2GATEWAY) {

tests/multinode.at

+136-46
Original file line numberDiff line numberDiff line change
@@ -2795,7 +2795,9 @@ check_fake_multinode_setup_by_nodes 'ovn-chassis-1 ovn-chassis-2 ovn-chassis-3'
27952795
cleanup_multinode_resources_by_nodes 'ovn-chassis-1 ovn-chassis-2 ovn-chassis-3'
27962796

27972797
m_as ovn-chassis-1 ip link del migrator-p
2798-
m_as ovn-chassis-2 ip link del sw0p2-p
2798+
m_as ovn-chassis-2 ip link del sw0-port1-p
2799+
m_as ovn-chassis-2 ip link del sw0-port2-p
2800+
m_as ovn-chassis-2 ip link del sw0-port3-p
27992801
m_as ovn-chassis-3 ip link del migrator-p
28002802

28012803
OVS_WAIT_UNTIL([m_as ovn-chassis-1 ip link show | grep -q genev_sys])
@@ -2829,7 +2831,7 @@ check_ping() {
28292831
dst_chassis=$(multinode_sbctl --bare --columns name list chassis $dst_chassis_uuid)
28302832
dst_ip=$(multinode_nbctl lsp-get-addresses $dst_port | awk '{print $2}')
28312833
echo "$src_port on $src_chassis => $dst_port on $dst_chassis(requested_chassis=$requested_chassis_uuid)"
2832-
M_NS_CHECK_EXEC([$src_chassis], [$src_ns], [ping -q -c 3 -i 0.3 -w 2 $dst_ip | FORMAT_PING], \
2834+
M_NS_CHECK_EXEC([$src_chassis], [$src_ns], [ping -q -c 3 -i 0.1 -w 2 $dst_ip | FORMAT_PING], \
28332835
[0], [stdout])
28342836
if [[ "$status" == "success" ]]; then
28352837
AT_CHECK([cat stdout | grep -c "3 packets transmitted, 3 received, 0% packet loss"], [0], [dnl
@@ -2851,85 +2853,115 @@ check_ping() {
28512853

28522854
check multinode_nbctl ls-add sw0
28532855
check multinode_nbctl lsp-add sw0 migrator
2854-
check multinode_nbctl lsp-set-addresses migrator "50:54:00:00:00:03 10.0.0.3 1000::3"
2855-
check multinode_nbctl lsp-add sw0 sw0-port2
2856-
check multinode_nbctl lsp-set-addresses sw0-port2 "50:54:00:00:00:04 10.0.0.4 1000::4"
2856+
check multinode_nbctl lsp-set-addresses migrator "50:54:00:00:00:09 10.0.0.9 1000::9"
2857+
for i in 1 2 3; do
2858+
check multinode_nbctl lsp-add sw0 sw0-port${i}
2859+
check multinode_nbctl lsp-set-addresses sw0-port${i} "50:54:00:00:00:0${i} 10.0.0.${i} 1000::${i}"
2860+
done
28572861

28582862
# Set requested chassis before creating migrator on chassis-3
28592863
check multinode_nbctl --wait=hv set Logical_Switch_Port migrator options:requested-chassis=ovn-chassis-1
28602864

2861-
m_as ovn-chassis-1 /data/create_fake_vm.sh migrator migrator 50:54:00:00:00:03 1342 10.0.0.3 24 10.0.0.1 1000::3/64 1000::a
2862-
m_as ovn-chassis-3 /data/create_fake_vm.sh migrator migrator 50:54:00:00:00:03 1342 10.0.0.3 24 10.0.0.1 1000::3/64 1000::a
2863-
m_as ovn-chassis-2 /data/create_fake_vm.sh sw0-port2 sw0-port2 50:54:00:00:00:04 1342 10.0.0.4 24 10.0.0.1 1000::4/64 1000::a
2865+
m_as ovn-chassis-1 /data/create_fake_vm.sh migrator migrator 50:54:00:00:00:09 1342 10.0.0.9 24 10.0.0.10 1000::9/64 1000::a
2866+
m_as ovn-chassis-3 /data/create_fake_vm.sh migrator migrator 50:54:00:00:00:09 1342 10.0.0.9 24 10.0.0.10 1000::9/64 1000::a
2867+
for i in 1 2 3; do
2868+
m_as ovn-chassis-${i} /data/create_fake_vm.sh sw0-port${i} sw0-port${i} 50:54:00:00:00:0${i} 1342 10.0.0.${i} 24 10.0.0.10 1000::${i}/64 1000::a
2869+
done
28642870

28652871
m_wait_for_ports_up
28662872

28672873
M_START_TCPDUMP([ovn-chassis-1], [-neei genev_sys_6081 arp or ip], [ch1_genev])
28682874
M_START_TCPDUMP([ovn-chassis-1], [-neei migrator-p arp or ip], [ch1_migrator])
28692875
M_START_TCPDUMP([ovn-chassis-2], [-neei genev_sys_6081 arp or ip], [ch2_genev])
2870-
M_START_TCPDUMP([ovn-chassis-2], [-neei sw0-port2-p arp or ip], [ch2_sw0p2])
2876+
for i in 1 2 3; do
2877+
M_START_TCPDUMP([ovn-chassis-${i}], [-neei sw0-port${i}-p arp or ip], [ch${i}_sw0-port${i}])
2878+
done
28712879
M_START_TCPDUMP([ovn-chassis-3], [-neei genev_sys_6081 arp or ip], [ch3_genev])
28722880
M_START_TCPDUMP([ovn-chassis-3], [-neei migrator-p arp or ip], [ch3_migrator])
28732881

28742882
AS_BOX([Migration with vifs])
2875-
check_ping migrator ovn-chassis-1 sw0-port2
2876-
check_ping sw0-port2 ovn-chassis-2 migrator
2883+
for i in 1 2 3; do
2884+
check_ping migrator ovn-chassis-1 sw0-port${i}
2885+
check_ping sw0-port${i} ovn-chassis-${i} migrator
2886+
done
28772887

28782888
echo "== Starting migration =="
28792889
check multinode_nbctl --wait=hv set Logical_Switch_Port migrator options:requested-chassis=ovn-chassis-1,ovn-chassis-3
28802890

2881-
check_ping migrator ovn-chassis-1 sw0-port2
2882-
check_ping migrator ovn-chassis-3 sw0-port2
2883-
2884-
check_ping sw0-port2 ovn-chassis-2 migrator "potential-duplicates"
2891+
for i in 1 2 3; do
2892+
check_ping migrator ovn-chassis-1 sw0-port${i}
2893+
check_ping migrator ovn-chassis-3 sw0-port${i}
2894+
check_ping sw0-port${i} ovn-chassis-${i} migrator "potential-duplicates"
2895+
done
28852896

28862897
echo "== Finalizing migration =="
28872898
check multinode_nbctl --wait=hv set Logical_Switch_Port migrator options:requested-chassis=ovn-chassis-3
28882899

2889-
check_ping migrator ovn-chassis-3 sw0-port2
2890-
check_ping sw0-port2 ovn-chassis-2 migrator
2900+
for i in 1 2 3; do
2901+
check_ping migrator ovn-chassis-1 sw0-port${i} "lost"
2902+
check_ping migrator ovn-chassis-3 sw0-port${i}
2903+
check_ping sw0-port${i} ovn-chassis-${i} migrator
2904+
done
28912905

28922906
AS_BOX([Migration with container ports])
28932907
# Create container ports.
28942908
check multinode_nbctl ls-add sw1
28952909
check multinode_nbctl lsp-add sw1 mig-cont migrator 10 \
2896-
-- lsp-set-addresses mig-cont "f0:00:00:01:02:03 20.0.0.3"
2897-
check multinode_nbctl lsp-add sw1 cont2 sw0-port2 10 \
2898-
-- lsp-set-addresses cont2 "f0:00:00:01:02:04 20.0.0.4"
2910+
-- lsp-set-addresses mig-cont "f0:00:00:01:02:09 20.0.0.9"
2911+
for i in 1 2 3; do
2912+
check multinode_nbctl lsp-add sw1 cont${i} sw0-port${i} 10 \
2913+
-- lsp-set-addresses cont${i} "f0:00:00:01:02:0${i} 20.0.0.${i}"
2914+
done
28992915

29002916
# Create the interface for lport mig-cont
29012917
M_NS_CHECK_EXEC([ovn-chassis-1], [migrator], [ip link add link migrator name cont type vlan id 10], [0])
2902-
M_NS_CHECK_EXEC([ovn-chassis-1], [migrator], [ip link set cont address f0:00:00:01:02:03], [0])
2918+
M_NS_CHECK_EXEC([ovn-chassis-1], [migrator], [ip link set cont address f0:00:00:01:02:09], [0])
29032919
M_NS_CHECK_EXEC([ovn-chassis-1], [migrator], [ip link set cont up], [0])
2904-
M_NS_CHECK_EXEC([ovn-chassis-1], [migrator], [ip addr add 20.0.0.3/24 dev cont], [0])
2920+
M_NS_CHECK_EXEC([ovn-chassis-1], [migrator], [ip addr add 20.0.0.9/24 dev cont], [0])
29052921

29062922
M_NS_CHECK_EXEC([ovn-chassis-3], [migrator], [ip link add link migrator name cont type vlan id 10], [0])
2907-
M_NS_CHECK_EXEC([ovn-chassis-3], [migrator], [ip link set cont address f0:00:00:01:02:03], [0])
2923+
M_NS_CHECK_EXEC([ovn-chassis-3], [migrator], [ip link set cont address f0:00:00:01:02:09], [0])
29082924
M_NS_CHECK_EXEC([ovn-chassis-3], [migrator], [ip link set cont up], [0])
2909-
M_NS_CHECK_EXEC([ovn-chassis-3], [migrator], [ip addr add 20.0.0.3/24 dev cont], [0])
2910-
2911-
# Create the interface for lport sw1-port2
2912-
M_NS_CHECK_EXEC([ovn-chassis-2], [sw0-port2], [ip link add link sw0-port2 name cont2 type vlan id 10], [0])
2913-
M_NS_CHECK_EXEC([ovn-chassis-2], [sw0-port2], [ip link set cont2 address f0:00:00:01:02:04], [0])
2914-
M_NS_CHECK_EXEC([ovn-chassis-2], [sw0-port2], [ip link set cont2 up], [0])
2915-
M_NS_CHECK_EXEC([ovn-chassis-2], [sw0-port2], [ip addr add 20.0.0.4/24 dev cont2], [0])
2925+
M_NS_CHECK_EXEC([ovn-chassis-3], [migrator], [ip addr add 20.0.0.9/24 dev cont], [0])
2926+
2927+
# Create the cont interface for lport sw0-port1, sw0-port2, sw0-port3
2928+
for i in 1 2 3; do
2929+
M_NS_CHECK_EXEC([ovn-chassis-${i}], [sw0-port${i}], [ip link add link sw0-port${i} name cont${i} type vlan id 10], [0])
2930+
M_NS_CHECK_EXEC([ovn-chassis-${i}], [sw0-port${i}], [ip link set cont${i} address f0:00:00:01:02:0${i}], [0])
2931+
M_NS_CHECK_EXEC([ovn-chassis-${i}], [sw0-port${i}], [ip link set cont${i} up], [0])
2932+
M_NS_CHECK_EXEC([ovn-chassis-${i}], [sw0-port${i}], [ip addr add 20.0.0.${i}/24 dev cont${i}], [0])
2933+
done
29162934

2917-
check_ping mig-cont ovn-chassis-3 cont2
2918-
check_ping cont2 ovn-chassis-2 mig-cont
2935+
for i in 1 2 3; do
2936+
check_ping mig-cont ovn-chassis-3 cont${i}
2937+
check_ping cont${i} ovn-chassis-${i} mig-cont
2938+
check_ping migrator ovn-chassis-3 cont${i}
2939+
check_ping cont${i} ovn-chassis-${i} migrator
2940+
done
29192941

29202942
echo "== Starting migration back =="
29212943
check multinode_nbctl --wait=hv set Logical_Switch_Port migrator options:requested-chassis=ovn-chassis-3,ovn-chassis-1
29222944

2923-
check_ping mig-cont ovn-chassis-3 cont2
2924-
check_ping mig-cont ovn-chassis-1 cont2
2925-
check_ping cont2 ovn-chassis-2 mig-cont "potential-duplicates"
2945+
for i in 1 2 3; do
2946+
check_ping mig-cont ovn-chassis-3 cont${i}
2947+
check_ping mig-cont ovn-chassis-1 cont${i}
2948+
check_ping cont${i} ovn-chassis-${i} mig-cont "potential-duplicates"
2949+
check_ping migrator ovn-chassis-3 cont${i}
2950+
check_ping migrator ovn-chassis-1 cont${i}
2951+
check_ping cont${i} ovn-chassis-${i} migrator "potential-duplicates"
2952+
done
29262953

29272954
echo "== Finalizing migration =="
29282955
check multinode_nbctl --wait=hv set Logical_Switch_Port migrator options:requested-chassis=ovn-chassis-1
29292956

2930-
check_ping mig-cont ovn-chassis-3 cont2 "lost"
2931-
check_ping mig-cont ovn-chassis-1 cont2
2932-
check_ping cont2 ovn-chassis-2 mig-cont
2957+
for i in 1 2 3; do
2958+
check_ping mig-cont ovn-chassis-3 cont${i} "lost"
2959+
check_ping mig-cont ovn-chassis-1 cont${i}
2960+
check_ping cont${i} ovn-chassis-${i} mig-cont
2961+
check_ping migrator ovn-chassis-3 cont${i} "lost"
2962+
check_ping migrator ovn-chassis-1 cont${i}
2963+
check_ping cont${i} ovn-chassis-${i} migrator
2964+
done
29332965

29342966
echo "== Starting another migration, this time before starting dst VM =="
29352967
# Unbind migrator from chassis-3
@@ -2939,18 +2971,76 @@ check multinode_nbctl --wait=hv set Logical_Switch_Port migrator options:request
29392971
sleep 1
29402972
m_as ovn-chassis-3 ovs-vsctl -- set Interface migrator-p external_ids:iface-id=migrator
29412973

2942-
2943-
check_ping mig-cont ovn-chassis-3 cont2
2944-
check_ping mig-cont ovn-chassis-1 cont2
2945-
check_ping cont2 ovn-chassis-2 mig-cont "potential-duplicates"
2946-
2974+
for i in 1 2 3; do
2975+
check_ping mig-cont ovn-chassis-3 cont${i}
2976+
check_ping mig-cont ovn-chassis-1 cont${i}
2977+
check_ping cont${i} ovn-chassis-${i} mig-cont "potential-duplicates"
2978+
check_ping migrator ovn-chassis-3 cont${i}
2979+
check_ping migrator ovn-chassis-1 cont${i}
2980+
check_ping cont${i} ovn-chassis-${i} migrator "potential-duplicates"
2981+
done
29472982

29482983
echo "== Finalizing migration =="
29492984
check multinode_nbctl --wait=hv set Logical_Switch_Port migrator options:requested-chassis=ovn-chassis-3
29502985

2951-
check_ping mig-cont ovn-chassis-1 cont2 "lost"
2952-
check_ping mig-cont ovn-chassis-3 cont2
2953-
check_ping cont2 ovn-chassis-2 mig-cont
2986+
for i in 1 2 3; do
2987+
check_ping mig-cont ovn-chassis-1 cont${i} "lost"
2988+
check_ping mig-cont ovn-chassis-3 cont${i}
2989+
check_ping cont${i} ovn-chassis-${i} mig-cont
2990+
check_ping migrator ovn-chassis-1 cont${i} "lost"
2991+
check_ping migrator ovn-chassis-3 cont${i}
2992+
check_ping cont${i} ovn-chassis-${i} migrator
2993+
done
2994+
2995+
# Remove iface-id from src after migration is completed
2996+
m_as ovn-chassis-1 ovs-vsctl -- remove Interface migrator-p external_ids iface-id
2997+
check multinode_nbctl --wait=sb sync
2998+
2999+
for i in 1 2 3; do
3000+
check_ping migrator ovn-chassis-1 sw0-port${i} "lost"
3001+
check_ping mig-cont ovn-chassis-1 cont${i} "lost"
3002+
check_ping migrator ovn-chassis-1 cont${i} "lost"
3003+
check_ping migrator ovn-chassis-3 sw0-port${i}
3004+
check_ping mig-cont ovn-chassis-3 cont${i}
3005+
check_ping migrator ovn-chassis-3 cont${i}
3006+
check_ping sw0-port${i} ovn-chassis-${i} migrator
3007+
check_ping cont${i} ovn-chassis-${i} mig-cont
3008+
check_ping cont${i} ovn-chassis-${i} migrator
3009+
done
3010+
3011+
# Finally, remove interface from src after migration is completed
3012+
m_as ovn-chassis-1 ovs-vsctl -- del-port migrator-p
3013+
for i in 1 2 3; do
3014+
check_ping migrator ovn-chassis-1 sw0-port${i} "lost"
3015+
check_ping mig-cont ovn-chassis-1 cont${i} "lost"
3016+
check_ping migrator ovn-chassis-1 cont${i} "lost"
3017+
check_ping migrator ovn-chassis-3 sw0-port${i}
3018+
check_ping mig-cont ovn-chassis-3 cont${i}
3019+
check_ping migrator ovn-chassis-3 cont${i}
3020+
check_ping sw0-port${i} ovn-chassis-${i} migrator
3021+
check_ping cont${i} ovn-chassis-${i} mig-cont
3022+
check_ping cont${i} ovn-chassis-${i} migrator
3023+
done
3024+
3025+
# Also do some recomputes ...
3026+
AS_BOX([Recompute after removing interface])
3027+
for i in 1 2 3; do
3028+
m_as ovn-chassis-${i} ovn-appctl -t ovn-controller recompute
3029+
done
3030+
3031+
check multinode_nbctl --wait=sb sync
3032+
3033+
for i in 1 2 3; do
3034+
check_ping migrator ovn-chassis-1 sw0-port${i} "lost"
3035+
check_ping mig-cont ovn-chassis-1 cont${i} "lost"
3036+
check_ping migrator ovn-chassis-1 cont${i} "lost"
3037+
check_ping migrator ovn-chassis-3 sw0-port${i}
3038+
check_ping mig-cont ovn-chassis-3 cont${i}
3039+
check_ping migrator ovn-chassis-3 cont${i}
3040+
check_ping sw0-port${i} ovn-chassis-${i} migrator
3041+
check_ping cont${i} ovn-chassis-${i} mig-cont
3042+
check_ping cont${i} ovn-chassis-${i} migrator
3043+
done
29543044

29553045
m_as ovn-chassis-1 killall tcpdump
29563046
m_as ovn-chassis-2 killall tcpdump

0 commit comments

Comments
 (0)