Bug 1890856

Summary: fail to ping host on another chassis when set addresses as dynamic if encap-type is vxlan
Product: Red Hat Enterprise Linux Fast Datapath Reporter: Jianlin Shi <jishi>
Component: ovn2.13Assignee: OVN Team <ovnteam>
Status: NEW --- QA Contact: Jianlin Shi <jishi>
Severity: unspecified Docs Contact:
Priority: low    
Version: FDP 20.HCC: ctrautma, jishi, mmichels, ralongi
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Jianlin Shi 2020-10-23 05:46:59 UTC
Description of problem:
fail to ping host on another chassis when set addresses as dynamic if encap-type is vxlan

Version-Release number of selected component (if applicable):
ovn2.13-20.09.0-4.el8fdp.x86_64

How reproducible:
Always

Steps to Reproduce:
1. set encap-type as vxlan and start ovn-northd
2. start ovn-controller on two chassis
3. add ls, and set address for logical switch port as dynamic
4. ping from one host to another host on another chassis

Actual results:
fail to ping

Expected results:
ping succeed

Additional info:


server:
systemctl start openvswitch
systemctl start ovn-northd                                 
ovn-nbctl set-connection ptcp:6641
ovn-sbctl set-connection ptcp:6642                                                        
ovs-vsctl set open . external_ids:system-id=hv1 external_ids:ovn-remote=tcp:20.0.30.25:6642 external_ids:ovn-encap-type=vxlan external_ids:ovn-encap-ip=20.0.30.25
systemctl restart ovn-controller
sleep 2             
                                                                          
ip netns add server0                                                      
ip link add veth0_s0 type veth peer name veth0_s0_p
ip link set veth0_s0 netns server0   
ip netns exec server0 ip link set lo up              
ip netns exec server0 ip link set veth0_s0 up        
#ip netns exec server0 ip link set veth0_s0 address $mac_veth2_hv1
ip netns exec server0 ip addr add 172.16.2.1/24 dev veth0_s0
ip netns exec server0 ip addr add 2000::1/64 dev veth0_s0
ip netns exec server0 ip route add default via 172.16.2.254 dev veth0_s0
ip netns exec server0 ip -6 route add default via 2000::a dev veth0_s0

ovs-vsctl add-port br-int veth0_s0_p                                 
ip link set veth0_s0_p up                                                                           
ovs-vsctl set interface veth0_s0_p external_ids:iface-id=ls2p1                     
                                                                                        
ovn-nbctl ls-add ls1                                                                          
ovn-nbctl set logical_switch ls1 other_config:mac_only=true                                                                                                                                                
#ovn-nbctl set logical_switch ls1 other_config:subnet=192.168.1.1/24 other_config:ipv6_prefix=1e2d::                                                                                                       
ovn-nbctl lsp-add ls1 ls1p1                                                                                                                                                                                
#ovn-nbctl lsp-set-addresses ls1p1 "$mac_veth2_hv0 2001::1 172.16.1.1 3001::1 172.16.11.1"                                                                                                                 
ovn-nbctl lsp-set-addresses ls1p1 dynamic                                                                                                                                                                  
                                                                                     
ovn-nbctl ls-add ls2                                                      
ovn-nbctl set logical_switch ls2 other_config:mac_only=true                                                                                                                                                
ovn-nbctl lsp-add ls2 ls2p1
#ovn-nbctl lsp-set-addresses ls2p1 "$mac_veth2_hv1 2000::1 172.16.2.1 3002::1 172.16.12.1"
ovn-nbctl lsp-set-addresses ls2p1 dynamic                                              
                                                                                           
ovn-nbctl lr-add lr1                                                                       
ovn-nbctl lrp-add lr1 lr1-ls1 00:de:ad:ff:01:01 172.16.1.254/24 2001::a/64
ovn-nbctl lrp-add lr1 lr1-ls2 00:de:ad:ff:01:02 172.16.2.254/24 2000::a/64                                                                                                                                 
ovn-nbctl lsp-add ls1 ls1-lr1                                
ovn-nbctl lsp-set-type ls1-lr1 router
ovn-nbctl lsp-set-addresses ls1-lr1 00:de:ad:ff:01:01
ovn-nbctl lsp-set-options ls1-lr1 router-port=lr1-ls1

ovn-nbctl lsp-add ls2 ls2-lr1
ovn-nbctl lsp-set-type ls2-lr1 router
ovn-nbctl lsp-set-addresses ls2-lr1 00:de:ad:ff:01:02
ovn-nbctl lsp-set-options ls2-lr1 router-port=lr1-ls2

ssh -q dell-per740-42.rhts.eng.pek2.redhat.com "ip netns add client0"
ssh -q dell-per740-42.rhts.eng.pek2.redhat.com "ip link add veth0_c0 type veth peer name veth0_c0_p"
ssh -q dell-per740-42.rhts.eng.pek2.redhat.com "ip link set veth0_c0 netns client0"
ssh -q dell-per740-42.rhts.eng.pek2.redhat.com "ip netns exec client0 ip link set lo up"
ssh -q dell-per740-42.rhts.eng.pek2.redhat.com "ip netns exec client0 ip link set veth0_c0 up"
ssh -q dell-per740-42.rhts.eng.pek2.redhat.com "ip netns exec client0 ip addr add 172.16.1.1/24 dev veth0_c0"
ssh -q dell-per740-42.rhts.eng.pek2.redhat.com "ip netns exec client0 ip route add default via 172.16.1.254 dev veth0_c0"
ssh -q dell-per740-42.rhts.eng.pek2.redhat.com "ip netns exec client0 ip addr add 2001::1/64 dev veth0_c0"
ssh -q dell-per740-42.rhts.eng.pek2.redhat.com "ip netns exec client0 ip route add default via 2001::a dev veth0_c0"
ssh -q dell-per740-42.rhts.eng.pek2.redhat.com "ovs-vsctl add-port br-int veth0_c0_p"               
ssh -q dell-per740-42.rhts.eng.pek2.redhat.com "ip link set veth0_c0_p up"          
ssh -q dell-per740-42.rhts.eng.pek2.redhat.com "ovs-vsctl set interface veth0_c0_p external_ids:iface-id=ls1p1"
                                                                                              
nb_global_uuid=$(ovn-nbctl list nb_global | grep _uuid | awk '{print $3}')                                         
mac_prefix=$(ovn-nbctl get nb_global $nb_global_uuid options:mac_prefix | sed 's/"//g')                      
ls1p1_mac=$(ovn-nbctl list logical_switch_port ls1p1 | grep -E -o "$mac_prefix:[0-9a-z:]*")                              
ls2p1_mac=$(ovn-nbctl list logical_switch_port ls2p1 | grep -E -o "$mac_prefix:[0-9a-z:]*")               
                                                                                                                    
ssh -q dell-per740-42.rhts.eng.pek2.redhat.com "ip netns exec client0 ip link set veth0_c0 address $ls1p1_mac"
ip netns exec server0 ip link set veth0_s0 address $ls2p1_mac

client:

systemctl start openvswitch
ovs-vsctl set open . external_ids:system-id=hv0 external_ids:ovn-remote=tcp:20.0.30.25:6642 external_ids:ovn-encap-type=vxlan external_ids:ovn-encap-ip=20.0.30.26
                                                                                                      
systemctl start ovn-controller

[root@dell-per740-12 test]# ip netns exec server0 ping 172.16.1.1 -c 1                                
PING 172.16.1.1 (172.16.1.1) 56(84) bytes of data.                                                    

--- 172.16.1.1 ping statistics ---                                                                    
1 packets transmitted, 0 received, 100% packet loss, time 0ms                                         

[root@dell-per740-12 test]# ovn-sbctl list mac_binding                                                
_uuid               : d75cffc4-e4b0-4c12-9c42-6084edf4b9b6
datapath            : 496f093c-5426-4218-adbd-399a1c20c1bf
ip                  : "::"
logical_port        : lr1-ls1
mac                 : "00:00:00:00:00:00"

_uuid               : 872012cd-48f9-43d8-a292-eaef91b5f01b
datapath            : 496f093c-5426-4218-adbd-399a1c20c1bf
ip                  : "::"
logical_port        : lr1-ls2
mac                 : "00:00:00:00:00:00"

_uuid               : bfaf0a93-8236-4cb3-b78d-8f4126393b3f
datapath            : 496f093c-5426-4218-adbd-399a1c20c1bf
ip                  : "172.16.2.1"
logical_port        : lr1-ls2
mac                 : "9e:dd:6d:00:00:02"

client0 doesn't receive arp request from ovn, then mac_binding for 172.16.1.1 is not created.

[root@dell-per740-42 test]# rpm -qa | grep -E "openvswitch|ovn"
openvswitch2.13-2.13.0-61.el8fdp.x86_64
kernel-kernel-networking-openvswitch-ovn-add_setting-1.0-5.noarch                                     
kernel-kernel-networking-openvswitch-ovn-common-1.0-13.noarch
ovn2.13-20.09.0-4.el8fdp.x86_64
kernel-kernel-networking-openvswitch-ovn-soak_test-1.0-5.noarch                                       
openvswitch-selinux-extra-policy-1.0-23.el8fdp.noarch                                                 
ovn2.13-central-20.09.0-4.el8fdp.x86_64
ovn2.13-host-20.09.0-4.el8fdp.x86_64
python3-openvswitch2.13-2.13.0-61.el8fdp.x86_64

if encap-type is geneve, it works well