On Mon, Aug 5, 2019 at 9:03 PM Darrell Ball <[email protected]> wrote:
> Thanks for the patch > > I see the test is much improved now from V1 and passes - thanks > > Ideally, tests should be associated with some code for context > It could be folded into patch 8 > I did some more testing and found a similar problem as in V1. This test can be run successfully once and then fails after that. Maybe you want to look into that. It is probably related to: dball@ubuntu:~/openvswitch/ovs$ lsmod | grep nf . nfnetlink_cttimeout 16384 1 . Darrell > > > On Thu, Aug 1, 2019 at 3:12 PM Yi-Hung Wei <[email protected]> wrote: > >> This patch adds a system traffic test to verify the zone-based conntrack >> timeout feature. The test uses ovs-vsctl commands to configure >> the customized ICMP and UDP timeout on zone 5 to a shorter period. >> It then injects ICMP and UDP traffic to conntrack, and checks if the >> corresponding conntrack entry expires after the predefined timeout. >> >> Signed-off-by: Yi-Hung Wei <[email protected]> >> --- >> tests/system-kmod-macros.at | 25 +++++++++++++++ >> tests/system-traffic.at | 66 >> ++++++++++++++++++++++++++++++++++++++++ >> tests/system-userspace-macros.at | 26 ++++++++++++++++ >> 3 files changed, 117 insertions(+) >> >> diff --git a/tests/system-kmod-macros.at b/tests/system-kmod-macros.at >> index 554a61e9bd95..1bc6f246f426 100644 >> --- a/tests/system-kmod-macros.at >> +++ b/tests/system-kmod-macros.at >> @@ -100,6 +100,15 @@ m4_define([CHECK_CONNTRACK_FRAG_OVERLAP], >> # >> m4_define([CHECK_CONNTRACK_NAT]) >> >> +# CHECK_CONNTRACK_TIMEOUT() >> +# >> +# Perform requirements checks for running conntrack customized timeout >> tests. >> +# >> +m4_define([CHECK_CONNTRACK_TIMEOUT], >> +[ >> + AT_SKIP_IF([! cat /boot/config-$(uname -r) | grep >> NF_CONNTRACK_TIMEOUT | grep '=y' > /dev/null]) >> +]) >> + >> # CHECK_CT_DPIF_PER_ZONE_LIMIT() >> # >> # Perform requirements checks for running ovs-dpctl >> ct-[set|get|del]-limits per >> @@ -185,3 +194,19 @@ m4_define([OVS_CHECK_KERNEL_EXCL], >> sublevel=$(uname -r | sed -e 's/\./ /g' | awk '{print $ 2}') >> AT_SKIP_IF([ ! ( test $version -lt $1 || ( test $version -eq $1 && >> test $sublevel -lt $2 ) || test $version -gt $3 || ( test $version -eq $3 >> && test $sublevel -gt $4 ) ) ]) >> ]) >> + >> +# VSCTL_ADD_DATAPATH_TABLE() >> +# >> +# Create system datapath table "system" for kernel tests in ovsdb >> +m4_define([VSCTL_ADD_DATAPATH_TABLE], >> +[ >> + AT_CHECK([ovs-vsctl -- --id=@m create Datapath datapath_version=0 -- >> set Open_vSwitch . datapaths:"system"=@m], [0], [stdout]) >> +]) >> + >> +# VSCTL_ADD_ZONE_TIMEOUT_POLICY([parameters]) >> +# >> +# Add zone based timeout policy to kernel datapath >> +m4_define([VSCTL_ADD_ZONE_TIMEOUT_POLICY], >> +[ >> + AT_CHECK([ovs-vsctl add-zone-tp system $1], [0], [stdout]) >> +]) >> diff --git a/tests/system-traffic.at b/tests/system-traffic.at >> index 1a04199dcfe9..f4ac8a8f2c06 100644 >> --- a/tests/system-traffic.at >> +++ b/tests/system-traffic.at >> @@ -3179,6 +3179,72 @@ NXST_FLOW reply: >> OVS_TRAFFIC_VSWITCHD_STOP >> AT_CLEANUP >> >> +AT_SETUP([conntrack - zone-based timeout policy]) >> +CHECK_CONNTRACK() >> +CHECK_CONNTRACK_TIMEOUT() >> +OVS_TRAFFIC_VSWITCHD_START() >> + >> +ADD_NAMESPACES(at_ns0, at_ns1) >> + >> +ADD_VETH(p0, at_ns0, br0, "10.1.1.1/24") >> +ADD_VETH(p1, at_ns1, br0, "10.1.1.2/24") >> + >> +AT_DATA([flows.txt], [dnl >> +priority=1,action=drop >> +priority=10,arp,action=normal >> +priority=100,in_port=1,ip,action=ct(zone=5, table=1) >> +priority=100,in_port=2,ip,action=ct(zone=5, table=1) >> +table=1,in_port=2,ip,ct_state=+trk+est,action=1 >> +table=1,in_port=1,ip,ct_state=+trk+new,action=ct(commit,zone=5),2 >> +table=1,in_port=1,ip,ct_state=+trk+est,action=2 >> +]) >> + >> +AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) >> + >> +dnl Test with default timeout >> +dnl The default udp_single and icmp_first timeouts are 30 seconds in >> +dnl kernel DP, and 60 seconds in userspace DP. >> + >> +dnl Send ICMP and UDP traffic >> +NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 10.1.1.2 | >> FORMAT_PING], [0], [dnl >> +3 packets transmitted, 3 received, 0% packet loss, time 0ms >> +]) >> +AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 "in_port=1 >> packet=50540000000a50540000000908004500001c000000000011a4cd0a0101010a0101020001000200080000 >> actions=resubmit(,0)"]) >> + >> +sleep 4 >> + >> +AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2) | sort], >> [0], [dnl >> >> +icmp,orig=(src=10.1.1.1,dst=10.1.1.2,id=<cleared>,type=8,code=0),reply=(src=10.1.1.2,dst=10.1.1.1,id=<cleared>,type=0,code=0),zone=5 >> >> +udp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=<cleared>,dport=<cleared>),reply=(src=10.1.1.2,dst=10.1.1.1,sport=<cleared>,dport=<cleared>),zone=5 >> +]) >> + >> +AT_CHECK([ovs-appctl dpctl/flush-conntrack]) >> + >> +dnl Shorten the udp_single and icmp_first timeout in zone 5 >> +VSCTL_ADD_DATAPATH_TABLE() >> +VSCTL_ADD_ZONE_TIMEOUT_POLICY([zone=5 udp_single=3 icmp_first=3]) >> + >> +dnl Send ICMP and UDP traffic >> +NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 10.1.1.2 | >> FORMAT_PING], [0], [dnl >> +3 packets transmitted, 3 received, 0% packet loss, time 0ms >> +]) >> +AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 "in_port=1 >> packet=50540000000a50540000000908004500001c000000000011a4cd0a0101010a0101020001000200080000 >> actions=resubmit(,0)"]) >> + >> +AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2) | sort], >> [0], [dnl >> >> +icmp,orig=(src=10.1.1.1,dst=10.1.1.2,id=<cleared>,type=8,code=0),reply=(src=10.1.1.2,dst=10.1.1.1,id=<cleared>,type=0,code=0),zone=5 >> >> +udp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=<cleared>,dport=<cleared>),reply=(src=10.1.1.2,dst=10.1.1.1,sport=<cleared>,dport=<cleared>),zone=5 >> +]) >> + >> +dnl Wait until the timeout expire. >> +dnl We intend to wait a bit longer, because conntrack does not recycle >> the entry right after it is expired. >> +sleep 4 >> + >> +AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], >> [dnl >> +]) >> + >> +OVS_TRAFFIC_VSWITCHD_STOP >> +AT_CLEANUP >> + >> AT_BANNER([conntrack - L7]) >> >> AT_SETUP([conntrack - IPv4 HTTP]) >> diff --git a/tests/system-userspace-macros.at b/tests/ >> system-userspace-macros.at >> index 9d5f3bf419d3..8950a4de7287 100644 >> --- a/tests/system-userspace-macros.at >> +++ b/tests/system-userspace-macros.at >> @@ -98,6 +98,16 @@ m4_define([CHECK_CONNTRACK_FRAG_OVERLAP]) >> # >> m4_define([CHECK_CONNTRACK_NAT]) >> >> +# CHECK_CONNTRACK_TIMEOUT() >> +# >> +# Perform requirements checks for running conntrack customized timeout >> tests. >> +* The userspace datapath does not support this feature yet. >> +# >> +m4_define([CHECK_CONNTRACK_TIMEOUT], >> +[ >> + AT_SKIP_IF([:]) >> +]) >> + >> # CHECK_CT_DPIF_PER_ZONE_LIMIT() >> # >> # Perform requirements checks for running ovs-dpctl >> ct-[set|get|del]-limits per >> @@ -295,3 +305,19 @@ m4_define([OVS_CHECK_KERNEL_EXCL], >> [ >> AT_SKIP_IF([:]) >> ]) >> + >> +# VSCTL_ADD_DATAPATH_TABLE() >> +# >> +# Create datapath table "netdev" for userspace tests in ovsdb >> +m4_define([VSCTL_ADD_DATAPATH_TABLE], >> +[ >> + AT_CHECK([ovs-vsctl -- --id=@m create Datapath datapath_version=0 -- >> set Open_vSwitch . datapaths:"netdev"=@m], [0], [stdout]) >> +]) >> + >> +# VSCTL_ADD_ZONE_TIMEOUT_POLICY([parameters]) >> +# >> +# Add zone based timeout policy to userspace datapath >> +m4_define([VSCTL_ADD_ZONE_TIMEOUT_POLICY], >> +[ >> + AT_CHECK([ovs-vsctl add-zone-tp netdev $1], [0], [stdout]) >> +]) >> -- >> 2.7.4 >> >> _______________________________________________ >> dev mailing list >> [email protected] >> https://mail.openvswitch.org/mailman/listinfo/ovs-dev >> > _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
