Note: This bug is displayed in read-only format because the product is no longer active in Red Hat Bugzilla.
The FDP team is no longer accepting new bugs in Bugzilla. Please report your issues under FDP project in Jira. Thanks.

Bug 1983872

Summary: [OVN] sctp load_balancer doesn't work when use dpdk in ovn
Product: Red Hat Enterprise Linux Fast Datapath Reporter: ying xu <yinxu>
Component: OVNAssignee: OVN Team <ovnteam>
Status: CLOSED NEXTRELEASE QA Contact: ying xu <yinxu>
Severity: medium Docs Contact:
Priority: medium    
Version: FDP 21.FCC: ctrautma, i.maximets, jiji, jishi
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: 2024-02-14 21:13:10 UTC 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 ying xu 2021-07-20 04:20:28 UTC
Description of problem:
sctp load_balancer doesn't work when use dpdk in ovn

Version-Release number of selected component (if applicable):
# rpm -qa|grep ovn
ovn-2021-host-21.06.0-4.el8fdp.x86_64
ovn-2021-21.06.0-4.el8fdp.x86_64
ovn-2021-central-21.06.0-4.el8fdp.x86_64


How reproducible:
always

Steps to Reproduce:
server:
systemctl start openvswitch                          

systemctl start ovn-northd     
ovn-nbctl set-connection ptcp:6641                                         
ovn-sbctl set-connection ptcp:6642

ovs-vsctl set Open_vSwitch . other_config={}
ovs-vsctl  set Open_vSwitch . other_config:dpdk-init=true
ovs-vsctl  set Open_vSwitch . other_config:dpdk-lcore-mask=0x02
ovs-vsctl  set Open_vSwitch . other_config:dpdk-socket-mem="1024,1024"
systemctl restart openvswitch
pmd_cmd="python2 /root/dpdk/get_pmd.py"
cpu_mask=$($pmd_cmd --cmd host_pmd --nic ens1f1 --pmd 2)
ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=$cpu_mask

ovs-vsctl add-br br-phy -- set bridge br-phy datapath_type=netdev
#ovs-vsctl add-br br-phy
#ovs-vsctl add-port br-phy ens1f0
ip link set br-phy up
#ip link set ens1f0 up
ip addr add 20.0.173.25/24 dev br-phy
dpdk1=$(ethtool -i ens1f0 | grep bus-info | awk '{print $2}')
ovs-vsctl add-port br-phy dpdk1 -- set Interface dpdk1 type=dpdk options:dpdk-devargs=$dpdk1

#ovs-vsctl set bridge br-int datapath_type=netdev

ovs-vsctl set open . external_ids:system-id=hv1 external_ids:ovn-remote=tcp:20.0.173.25:6642 external_ids:ovn-encap-type=geneve external_ids:ovn-encap-ip=20.0.173.25 external_ids:ovn-bridge-datapath-type=netdev
#ovs-vsctl set open . external_ids:system-id=hv1 external_ids:ovn-remote=tcp:20.0.173.25:6642 external_ids:ovn-encap-type=geneve external_ids:ovn-encap-ip=20.0.173.25
#ovs-vsctl set open . external_ids:system-id=hv1 external_ids:ovn-remote=tcp:20.0.173.25:6642 external_ids:ovn-encap-type=vxlan external_ids:ovn-encap-ip=20.0.173.25 external_ids:ovn-bridge-datapath-type=netdev
systemctl restart ovn-controller

dpdk0=$(ethtool -i ens1f1 | grep bus-info | awk '{print $2}')
ovs-vsctl add-port br-int dpdk0 -- set Interface dpdk0 type=dpdk options:dpdk-devargs=$dpdk0
ovs-vsctl set interface dpdk0 external_ids:iface-id=ls1p1

ovn-nbctl ls-add ls1
ovn-nbctl lsp-add ls1 ls1p1
ovn-nbctl lsp-set-addresses ls1p1 "00:00:00:01:01:02 192.168.173.1 2001:173::1"
ovn-nbctl lsp-add ls1 ls1p2
ovn-nbctl lsp-set-addresses ls1p2 "00:00:00:01:02:02 192.168.173.2 2001:173::2"
ovn-nbctl lsp-add ls1 ls1p3
ovn-nbctl lsp-set-addresses ls1p3 "00:00:00:01:03:02 192.168.173.3 2001:173::3"
ovn-nbctl lsp-add ls1 ls1p4
ovn-nbctl lsp-set-addresses ls1p4 "00:00:00:01:04:02 192.168.173.4 2001:173::4"

ovs-vsctl add-port br-int ls1p2 -- set interface ls1p2 type=internal external_ids:iface-id=ls1p2

ip netns add ls1p2
ip link set ls1p2 netns ls1p2
ip netns exec ls1p2 ip link set ls1p2 address 00:00:00:01:02:02
ip netns exec ls1p2 ip link set ls1p2 up
ip netns exec ls1p2 ip addr add 192.168.173.2/24 dev ls1p2
ip netns exec ls1p2 ip addr add 2001:173::2/64 dev ls1p2

ovs-vsctl add-port br-int ls1p4 -- set interface ls1p4 type=internal external_ids:iface-id=ls1p4

ip netns add ls1p4
ip link set ls1p4 netns ls1p4
ip netns exec ls1p4 ip link set ls1p4 address 00:00:00:01:04:02
ip netns exec ls1p4 ip link set ls1p4 up
ip netns exec ls1p4 ip addr add 192.168.173.4/24 dev ls1p4
ip netns exec ls1p4 ip addr add 2001:173::4/64 dev ls1p4

ovn-nbctl lr-add lr1
ovn-nbctl lrp-add lr1 lr1ls1 00:01:02:0d:01:01 192.168.173.254/24 2001:173::a/64
ovn-nbctl lsp-add ls1 ls1lr1
ovn-nbctl lsp-set-type ls1lr1 router
ovn-nbctl lsp-set-options ls1lr1 router-port=lr1ls1
ovn-nbctl lsp-set-addresses ls1lr1 "00:01:02:0d:01:01 192.168.173.254 2001:173::a"

uuid=`ovn-nbctl create load_balancer vips:192.168.173.5="192.168.173.1,192.168.173.2
ovn-nbctl set load_balancer $uuid vips:'"192.168.173.254:8000"'='"192.168.173.1:80,192.168.173.2:80"'
ovn-nbctl set load_balancer $uuid vips:'"192.168.1.10:1234"'='"192.168.173.4:8000,192.168.173.2:8000"'
ovn-nbctl set logical_switch ls1 load_balancer=$uuid

ovn-nbctl set load_balancer $uuid protocol=sctp




client:
systemctl start openvswitch

ovs-vsctl set Open_vSwitch . other_config={}
ovs-vsctl  set Open_vSwitch . other_config:dpdk-init=true
ovs-vsctl  set Open_vSwitch . other_config:dpdk-lcore-mask=0x02
ovs-vsctl  set Open_vSwitch . other_config:dpdk-socket-mem="1024,1024"
systemctl restart openvswitch
pmd_cmd="python2 /root/dpdk/get_pmd.py"
cpu_mask=$($pmd_cmd --cmd host_pmd --nic ens1f1 --pmd 2)
ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=$cpu_mask

ovs-vsctl add-br br-phy -- set bridge br-phy datapath_type=netdev
#ovs-vsctl add-br br-phy
#ovs-vsctl add-port br-phy ens1f0
ip link set br-phy up
#ip link set ens1f0 up
ip addr add 20.0.173.26/24 dev br-phy
dpdk1=$(ethtool -i ens1f0 | grep bus-info | awk '{print $2}')
ovs-vsctl add-port br-phy dpdk1 -- set Interface dpdk1 type=dpdk options:dpdk-devargs=$dpdk1



ovs-vsctl set open . external_ids:system-id=hv0 external_ids:ovn-remote=tcp:20.0.173.25:6642 external_ids:ovn-encap-type=geneve external_ids:ovn-encap-ip=20.0.173.26 external_ids:ovn-bridge-datapath-type=netdev
#ovs-vsctl set open . external_ids:system-id=hv0 external_ids:ovn-remote=tcp:20.0.173.25:6642 external_ids:ovn-encap-type=geneve external_ids:ovn-encap-ip=20.0.173.26
#ovs-vsctl set open . external_ids:system-id=hv0 external_ids:ovn-remote=tcp:20.0.173.25:6642 external_ids:ovn-encap-type=vxlan external_ids:ovn-encap-ip=20.0.173.26 external_ids:ovn-bridge-datapath-type=netdev
systemctl start ovn-controller 

ovs-vsctl add-port br-int ls1p3 -- set interface ls1p3 type=internal external_ids:iface-id=ls1p3

ip netns add ls1p3
ip link set ls1p3 netns ls1p3
ip netns exec ls1p3 ip link set ls1p3 address 00:00:00:01:03:02
ip netns exec ls1p3 ip link set ls1p3 up
ip netns exec ls1p3 ip addr add 192.168.173.3/24 dev ls1p3
ip netns exec ls1p3 ip addr add 2001:173::3/64 dev ls1p3
ip netns add ls1p1
ip link set ens1f1 netns ls1p1
ip netns exec ls1p1 ip link set ens1f1 address 00:00:00:01:01:02
ip netns exec ls1p1 ip link set ens1f1 up
ip netns exec ls1p1 ip addr add 192.168.173.1/24 dev ens1f1
ip netns exec ls1p1 ip addr add 2001:173::1/64 dev ens1f1



then, start ncat listening on server:
ip netns exec ls1p2 ncat --sctp -l 80 -k >> sctp.log&

and client:
ip netns exec ls1p1 ncat --sctp -l 80 -k >> sctp.log&

then, from ls1p4 start sctp ncat,
 ip netns exec ls1p4 ncat --sctp 192.168.173.254 8000 <<< s
Ncat: Connection refused.


Actual results:
sctp  connection fail.

Expected results:
sctp LB work.


Additional info:
tried tcp and udp, work normally.

Comment 1 OVN Bot 2024-02-14 21:13:09 UTC
This issue is being closed as an automatic process due to the issue's age. If you wish to re-open this issue, please do so in Jira (https://issues.redhat.com) in the 'FDP' project. Please be sure to set the component to the latest OVN version where this issue is known to occur. If this is a feature request or improvement, please set the component to 'OVN'.

Comment 2 Ilya Maximets 2024-02-15 14:01:33 UTC
FWIW, userspace datapath didn't have support for SCTP connection tracking
until OVS 3.2.  Should work with that version or later.  If it's still a
problem with openvswitch3.2+, please, open a Jira issue.