From d040e377966ef461210bbf1561fba7c01037d83e Mon Sep 17 00:00:00 2001 From: Open vSwitch CI Date: Dec 13 2024 13:15:04 +0000 Subject: Import openvswitch3.4-3.4.0-26 from Fast DataPath --- diff --git a/SOURCES/openvswitch-3.4.0.patch b/SOURCES/openvswitch-3.4.0.patch index 6335cfc..5bfbdb7 100644 --- a/SOURCES/openvswitch-3.4.0.patch +++ b/SOURCES/openvswitch-3.4.0.patch @@ -46,7 +46,7 @@ index d73154a971..9f0fbfe40d 100644 matrix: COMPILER: gcc diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml -index 9d3a13ca1c..a234dbdb67 100644 +index 9d3a13ca1c..9aaf451451 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -7,15 +7,18 @@ env: @@ -202,7 +202,12 @@ index 9d3a13ca1c..a234dbdb67 100644 - name: prepare run: ./.ci/linux-prepare.sh -@@ -279,13 +336,13 @@ jobs: +@@ -275,17 +332,20 @@ jobs: + name: logs-linux-${{ join(matrix.*, '-') }} + path: logs.tgz + +- build-clang-analyze: ++ build-clang-analyze-cache: needs: build-dpdk env: dependencies: | @@ -213,13 +218,108 @@ index 9d3a13ca1c..a234dbdb67 100644 CC: clang DPDK: dpdk CLANG_ANALYZE: true - name: clang-analyze +- name: clang-analyze - runs-on: ubuntu-22.04 ++ name: clang-analyze-cache ++ outputs: ++ key: ${{ steps.cache_key.outputs.key }} ++ outcome: ${{ steps.build_base.outcome }} + runs-on: ubuntu-24.04 timeout-minutes: 30 steps: -@@ -432,7 +489,7 @@ jobs: +@@ -355,35 +415,86 @@ jobs: + key: ${{ steps.cache_key.outputs.key }} + + - name: set up python ++ if: steps.clang_cache.outputs.cache-hit != 'true' + uses: actions/setup-python@v5 + with: + python-version: ${{ env.python_default }} + + - name: get cached dpdk-dir ++ if: steps.clang_cache.outputs.cache-hit != 'true' + uses: actions/cache/restore@v4 + with: + path: dpdk-dir + key: ${{ needs.build-dpdk.outputs.dpdk_key }} + + - name: update APT cache ++ if: steps.clang_cache.outputs.cache-hit != 'true' + run: sudo apt update || true + + - name: install common dependencies ++ if: steps.clang_cache.outputs.cache-hit != 'true' + run: sudo apt install -y ${{ env.dependencies }} + + - name: prepare ++ if: steps.clang_cache.outputs.cache-hit != 'true' + run: ./.ci/linux-prepare.sh + + - name: build base reference ++ id: build_base + if: steps.clang_cache.outputs.cache-hit != 'true' ++ continue-on-error: true + run: ./.ci/linux-build.sh + +- - name: save cache +- uses: actions/cache/save@v4 +- if: steps.clang_cache.outputs.cache-hit != 'true' ++ build-clang-analyze: ++ needs: [build-dpdk, build-clang-analyze-cache] ++ if: > ++ needs.build-clang-analyze-cache.outputs.outcome == 'success' || ++ needs.build-clang-analyze-cache.outputs.outcome == 'skipped' ++ env: ++ dependencies: | ++ automake bc clang-tools libnuma-dev libunbound-dev libunwind-dev \ ++ libssl-dev libtool libxdp-dev llvm-dev ++ CC: clang ++ DPDK: dpdk ++ CLANG_ANALYZE: true ++ name: clang-analyze ++ runs-on: ubuntu-24.04 ++ timeout-minutes: 30 ++ ++ steps: ++ - name: checkout ++ uses: actions/checkout@v4 ++ ++ - name: update PATH ++ run: | ++ echo "$HOME/bin" >> $GITHUB_PATH ++ echo "$HOME/.local/bin" >> $GITHUB_PATH ++ ++ - name: check for analyzer result cache ++ uses: actions/cache/restore@v4 + with: + path: base-clang-analyzer-results +- key: ${{ steps.cache_key.outputs.key }} ++ key: ${{ needs.build-clang-analyze-cache.outputs.key }} ++ ++ - name: set up python ++ uses: actions/setup-python@v5 ++ with: ++ python-version: ${{ env.python_default }} ++ ++ - name: get cached dpdk-dir ++ uses: actions/cache/restore@v4 ++ with: ++ path: dpdk-dir ++ key: ${{ needs.build-dpdk.outputs.dpdk_key }} ++ ++ - name: update APT cache ++ run: sudo apt update || true ++ ++ - name: install common dependencies ++ run: sudo apt install -y ${{ env.dependencies }} ++ ++ - name: prepare ++ run: ./.ci/linux-prepare.sh + + - name: build + run: ./.ci/linux-build.sh +@@ -432,7 +543,7 @@ jobs: DPDK: ${{ matrix.dpdk }} name: linux deb ${{ matrix.dpdk }} dpdk @@ -1533,22 +1633,23 @@ index 8596741aa1..6e3091b939 100644 return af_inet_ifreq_ioctl(name, &ifr, SIOCSIFFLAGS, "SIOCSIFFLAGS"); diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c -index 7cced0f226..d3cd66f18a 100644 +index 7cced0f226..e885e11928 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c -@@ -1355,12 +1355,13 @@ dpdk_eth_dev_init(struct netdev_dpdk *dev) +@@ -1353,14 +1353,12 @@ dpdk_eth_dev_init(struct netdev_dpdk *dev) + info.tx_offload_capa &= ~RTE_ETH_TX_OFFLOAD_TCP_CKSUM; + } - if (!strcmp(info.driver_name, "net_ice") - || !strcmp(info.driver_name, "net_i40e") +- if (!strcmp(info.driver_name, "net_ice") +- || !strcmp(info.driver_name, "net_i40e") - || !strcmp(info.driver_name, "net_iavf")) { -+ || !strcmp(info.driver_name, "net_iavf") -+ || !strcmp(info.driver_name, "net_txgbe")) { ++ if (!strcmp(info.driver_name, "net_txgbe")) { /* FIXME: Driver advertises the capability but doesn't seem * to actually support it correctly. Can remove this once * the driver is fixed on DPDK side. */ VLOG_INFO("%s: disabled Tx outer udp checksum offloads for a " - "net/ice, net/i40e or net/iavf port.", -+ "net/ice, net/i40e, net/iavf or net/txgbe port.", ++ "net/txgbe port.", netdev_get_name(&dev->up)); info.tx_offload_capa &= ~RTE_ETH_TX_OFFLOAD_OUTER_UDP_CKSUM; info.tx_offload_capa &= ~RTE_ETH_TX_OFFLOAD_VXLAN_TNL_TSO; @@ -1939,7 +2040,7 @@ index c31869a4c7..45a36fabb9 100644 VLOG_INFO("bond %s: active member is now %s", bond->name, member->name); diff --git a/ofproto/ofproto-dpif-upcall.c b/ofproto/ofproto-dpif-upcall.c -index 4d39bc5a71..bb0c55a334 100644 +index 4d39bc5a71..7577d14ec4 100644 --- a/ofproto/ofproto-dpif-upcall.c +++ b/ofproto/ofproto-dpif-upcall.c @@ -57,6 +57,7 @@ COVERAGE_DEFINE(dumped_inconsistent_flow); @@ -1996,6 +2097,53 @@ index 4d39bc5a71..bb0c55a334 100644 if (result != UKEY_KEEP) { /* Clears 'recircs' if filled by revalidate_ukey(). */ reval_op_init(&ops[n_ops++], result, udpif, ukey, &recircs, +@@ -3320,8 +3339,9 @@ static void + upcall_unixctl_ofproto_detrace(struct unixctl_conn *conn, int argc, + const char *argv[], void *aux OVS_UNUSED) + { +- unsigned int pmd_id = NON_PMD_CORE_ID; + const char *key_s = argv[1]; ++ const char *pmd_str = NULL; ++ unsigned int pmd_id; + ovs_u128 ufid; + + if (odp_ufid_from_string(key_s, &ufid) <= 0) { +@@ -3330,7 +3350,7 @@ upcall_unixctl_ofproto_detrace(struct unixctl_conn *conn, int argc, + } + + if (argc == 3) { +- const char *pmd_str = argv[2]; ++ pmd_str = argv[2]; + if (!ovs_scan(pmd_str, "pmd=%d", &pmd_id)) { + unixctl_command_reply_error(conn, + "Invalid pmd argument format. " +@@ -3343,8 +3363,16 @@ upcall_unixctl_ofproto_detrace(struct unixctl_conn *conn, int argc, + struct udpif *udpif; + + LIST_FOR_EACH (udpif, list_node, &all_udpifs) { ++ if (!pmd_str) { ++ const char *type = dpif_normalize_type(dpif_type(udpif->dpif)); ++ ++ pmd_id = !strcmp(type, "system") ? PMD_ID_NULL : NON_PMD_CORE_ID; ++ } ++ + struct udpif_key *ukey = ukey_lookup(udpif, &ufid, pmd_id); + if (!ukey) { ++ ds_put_format(&ds, "UFID was not found for %s\n", ++ dpif_name(udpif->dpif)); + continue; + } + +@@ -3354,6 +3382,9 @@ upcall_unixctl_ofproto_detrace(struct unixctl_conn *conn, int argc, + if ((ukey->state == UKEY_VISIBLE || ukey->state == UKEY_OPERATIONAL) + && ukey->xcache) { + xlate_xcache_format(&ds, ukey->xcache); ++ } else { ++ ds_put_format(&ds, "Cache was not found for %s\n", ++ dpif_name(udpif->dpif)); + } + ovs_mutex_unlock(&ukey->mutex); + } diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c index 7506ab5371..4cc7001a5b 100644 --- a/ofproto/ofproto-dpif-xlate.c @@ -2085,7 +2233,7 @@ index 93a13f32b1..05e82ea968 100644 AT_CHECK([ovs-vsctl set Flow_Table t0 prefixes=nw_dst,nw_dst], [1], [], [ovs-vsctl: nw_dst,nw_dst: set contains duplicate value diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at -index 42fb66de68..18bd359bfe 100644 +index 42fb66de68..8f9eab0d26 100644 --- a/tests/ofproto-dpif.at +++ b/tests/ofproto-dpif.at @@ -351,6 +351,49 @@ recirc_id(0),in_port(4),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b,dst=ff: @@ -2307,47 +2455,88 @@ index 42fb66de68..18bd359bfe 100644 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port]) AT_KEYWORDS([mirror mirrors mirroring]) OVS_VSWITCHD_START -@@ -12661,3 +12852,48 @@ AT_CHECK([ovs-appctl revalidator/resume]) - - OVS_VSWITCHD_STOP +@@ -12606,58 +12797,47 @@ Datapath actions: psample(group=42,cookie=0x64000000c8),drop + OVS_VSWITCHD_STOP("/Enabling an unsupported feature is very dangerous/d") AT_CLEANUP -+ + +-AT_SETUP([ofproto-dpif - Dump OF rules corresponding to UFID]) +AT_SETUP([ofproto-dpif - Cleanup missing datapath flows]) + -+OVS_VSWITCHD_START + OVS_VSWITCHD_START +add_of_ports br0 1 2 -+ + +-add_of_ports br0 1 2 3 +m4_define([ICMP_PKT], [m4_join([,], + [eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800)], + [ipv4(src=10.10.10.2,dst=10.10.10.1,proto=1,tos=1,ttl=128,frag=no)], + [icmp(type=8,code=0)])]) -+ + +-dnl Add some OpenFlow rules and groups. +-AT_DATA([groups.txt], [dnl +-group_id=1,type=select,selection_method=dp_hash,bucket=bucket_id:0,weight:100,actions=ct(commit,table=2,nat(dst=20.0.0.2)) +-group_id=2,type=all,bucket=resubmit(,3),bucket=resubmit(,4) +-]) +-AT_DATA([flows.txt], [dnl +-table=0,priority=100,cookie=0x12345678,in_port=p1,ip,nw_dst=10.0.0.2,actions=resubmit(,1) +-table=1,priority=200,ip,actions=group:1 +-table=2,ip,actions=group:2 +-table=3,ip,actions=p2 +-table=4,ip,actions=p3 +-]) +-AT_CHECK([ovs-ofctl add-groups br0 groups.txt]) +-AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) +AT_CHECK([ovs-ofctl del-flows br0]) +AT_CHECK([ovs-ofctl add-flow br0 'actions=normal' ]) -+ + +-AT_CHECK([ovs-appctl netdev-dummy/receive p1 'ipv4(src=10.0.0.1,dst=10.0.0.2,proto=6),tcp(src=1,dst=2)']) +-AT_CHECK([ovs-appctl netdev-dummy/receive p1 'ipv4(src=10.0.0.1,dst=10.0.0.2,proto=6),tcp(src=1,dst=2)']) +-AT_CHECK([ovs-appctl revalidator/wait]) +-AT_CHECK([ovs-appctl revalidator/pause]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 'ICMP_PKT']) -+ + +-AT_CHECK([ovs-appctl dpctl/dump-flows | strip_used | strip_stats | strip_duration | strip_dp_hash | sort], [0], [dnl +AT_CHECK([ovs-appctl dpctl/dump-flows --names | strip_used | strip_stats | dnl + strip_duration | strip_dp_hash | sort], [0], [dnl -+flow-dump from the main thread: + flow-dump from the main thread: +-recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(dst=10.0.0.2,frag=no), packets:0, bytes:0, used:0.0s, actions:hash(l4(0)),recirc(0x1) +-recirc_id(0x1),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:0.0s, actions:ct(commit,nat(dst=20.0.0.2)),recirc(0x2) +-recirc_id(0x2),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:0.0s, actions:2,3 +recirc_id(0),in_port(p1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:br0,p2 -+]) -+ + ]) + +-ufid=$(ovs-appctl dpctl/dump-flows -m filter='recirc_id(0)' | parse_ufid) +-AT_CHECK([ovs-appctl ofproto/detrace $ufid | ofctl_strip], [0], [dnl +-cookie=0x12345678, n_packets=2, n_bytes=236, priority=100,ip,in_port=1,nw_dst=10.0.0.2,actions=resubmit(,1) +-table_id=1, n_packets=2, n_bytes=236, priority=200,ip,actions=group:1 +-]) +dnl Make sure the ukey exists. +AT_CHECK([ovs-appctl upcall/show | grep '(keys' | awk '{print $3}' | \ + grep -q '1)'], [0]) -+ + +-ufid=$(ovs-appctl dpctl/dump-flows -m filter='recirc_id(0x1)' | parse_ufid) +-AT_CHECK([ovs-appctl ofproto/detrace $ufid | ofctl_strip], [0], [dnl +-group_id=1,type=select,selection_method=dp_hash,bucket=bucket_id:0,weight:100,actions=ct(commit,table=2,nat(dst=20.0.0.2)) +-]) +dnl Delete all datapath flows, and make sure they are gone. +AT_CHECK([ovs-appctl dpctl/del-flows]) +AT_CHECK([ovs-appctl dpctl/dump-flows --names ], [0], []) -+ + +-ufid=$(ovs-appctl dpctl/dump-flows -m filter='recirc_id(0x2)' | parse_ufid) +-AT_CHECK([ovs-appctl ofproto/detrace $ufid | ofctl_strip], [0], [dnl +-table_id=2, n_packets=2, n_bytes=236, ip,actions=group:2 +-table_id=3, n_packets=2, n_bytes=236, ip,actions=output:2 +-table_id=4, n_packets=2, n_bytes=236, ip,actions=output:3 +-group_id=2,type=all,bucket=bucket_id:0,actions=resubmit(,3),bucket=bucket_id:1,actions=resubmit(,4) +-]) +dnl Move forward in time and make sure we have at least 4 * 500ms. +AT_CHECK([ovs-appctl time/warp 3000 300], [0], [ignore]) -+ + +-AT_CHECK([ovs-appctl revalidator/resume]) +dnl Make sure no more ukeys exists. +AT_CHECK([ovs-appctl upcall/show | grep '(keys' | awk '{print $3}' | \ + grep -qv '0)'], [1]) -+ + +-OVS_VSWITCHD_STOP +dnl Verify coverage counter was hit. +AT_CHECK([ovs-appctl coverage/read-counter revalidate_missing_dp_flow], [0], + [dnl @@ -2355,7 +2544,7 @@ index 42fb66de68..18bd359bfe 100644 +]) + +OVS_VSWITCHD_STOP(["/failed to flow_del (No such file or directory)/d"]) -+AT_CLEANUP + AT_CLEANUP diff --git a/tests/ovs-macros.at b/tests/ovs-macros.at index 06c9785554..738cda2e46 100644 --- a/tests/ovs-macros.at @@ -2972,7 +3161,7 @@ index 3d84a53182..03ec01270f 100644 OVS_TRAFFIC_VSWITCHD_STOP(["/.*ethtool command ETHTOOL_G.*/d"]) diff --git a/tests/system-traffic.at b/tests/system-traffic.at -index 202ff04922..f914512a49 100644 +index 202ff04922..a327702bbd 100644 --- a/tests/system-traffic.at +++ b/tests/system-traffic.at @@ -38,7 +38,7 @@ NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -W 2 10.1.1.2 | FORMAT_PING], [0], @@ -3092,7 +3281,106 @@ index 202ff04922..f914512a49 100644 NETNS_DAEMONIZE([at_ns0], [tcpdump -n -x -i p0 dst host fc00:100::1 -l > p0.pcap 2>/dev/null], [tcpdump.pid]) sleep 1 -@@ -3410,10 +3407,10 @@ OVS_START_L7([at_ns1], [http]) +@@ -2436,6 +2433,98 @@ recirc_id(),in_port(2),eth_type(0x86dd),ipv6(proto=58,frag=no),icmpv6(ty + OVS_TRAFFIC_VSWITCHD_STOP + AT_CLEANUP + ++AT_SETUP([datapath - Dump OF rules corresponding to UFID]) ++OVS_TRAFFIC_VSWITCHD_START() ++ ++ADD_NAMESPACES(at_ns0, at_ns1) ++ ++ADD_VETH(p1, at_ns0, br0, "10.0.0.1/24") ++ADD_VETH(p2, at_ns1, br0, "10.0.0.2/24") ++ ++AT_CHECK([ovs-vsctl -- set interface ovs-p1 ofport_request=1 \ ++ -- set interface ovs-p2 ofport_request=2]) ++ ++dnl Add some OpenFlow rules and groups. ++AT_DATA([groups.txt], [dnl ++group_id=1,type=select,selection_method=dp_hash,bucket=bucket_id:0,weight:100,actions=ct(commit,table=2) ++]) ++AT_DATA([flows.txt], [dnl ++table=0,arp,actions=NORMAL ++table=0,priority=100,cookie=0x12345678,in_port=ovs-p1,ip,nw_dst=10.0.0.2,actions=resubmit(,1) ++table=0,priority=100,cookie=0xabcedf,in_port=ovs-p2,ip,nw_dst=10.0.0.1,actions=ct(table=3) ++table=1,priority=200,ip,actions=group:1 ++table=2,ip,actions=ovs-p2 ++table=3,ip,actions=ovs-p1 ++]) ++AT_CHECK([ovs-ofctl add-groups br0 groups.txt]) ++AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) ++ ++NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.1 -W 2 10.0.0.2 | FORMAT_PING], [0], [dnl ++3 packets transmitted, 3 received, 0% packet loss, time 0ms ++]) ++ ++AT_CHECK([ovs-appctl revalidator/wait]) ++# Add an unrelated OF change to populate the xcache during the next reval run. ++AT_CHECK([ovs-ofctl add-flow br0 table=4,ip,action=drop]) ++AT_CHECK([ovs-appctl revalidator/wait]) ++ ++AT_CHECK([ovs-appctl revalidator/pause]) ++ ++AT_CHECK([ovs-appctl dpctl/dump-flows], [0], [stdout]) ++ ++core=$(head -1 stdout | grep "flow-dump from pmd" | grep -o "[[-]]\?[[0-9]]\+$") ++if test -z $core; then ++ pmd_id="" ++else ++ pmd_id="pmd=$core" ++fi ++ ++AT_CHECK([ovs-appctl dpctl/dump-flows --names | grep "ipv4" | strip_used | strip_stats | \ ++ strip_duration | strip_dp_hash | strip_recirc | sed 's/:never/:0.0s/' | \ ++ strip_ptype | strip_eth | sort], [0], [dnl ++recirc_id(),in_port(ovs-p1),eth_type(0x0800),ipv4(dst=10.0.0.2,frag=no), packets:0, bytes:0, used:0.0s, actions:hash(l4(0)),recirc() ++recirc_id(),in_port(ovs-p1),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:0.0s, actions:ct(commit),recirc() ++recirc_id(),in_port(ovs-p1),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:0.0s, actions:ovs-p2 ++recirc_id(),in_port(ovs-p2),eth_type(0x0800),ipv4(dst=10.0.0.1,frag=no), packets:0, bytes:0, used:0.0s, actions:ct,recirc() ++recirc_id(),in_port(ovs-p2),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:0.0s, actions:ovs-p1 ++]) ++ ++ufid=$(ovs-appctl dpctl/dump-flows -m filter='recirc_id(0),in_port(ovs-p1),ipv4' | parse_ufid) ++AT_CHECK([ovs-appctl ofproto/detrace $ufid $pmd_id | ofctl_strip | \ ++ sed -E 's/n_bytes=2(66|80),/n_bytes=294,/'], [0], [dnl ++cookie=0x12345678, n_packets=3, n_bytes=294, priority=100,ip,in_port=1,nw_dst=10.0.0.2,actions=resubmit(,1) ++table_id=1, n_packets=3, n_bytes=294, priority=200,ip,actions=group:1 ++]) ++ ++ufid=$(ovs-appctl dpctl/dump-flows -m filter='in_port(ovs-p1),ipv4' | grep "ct(commit)" | parse_ufid) ++AT_CHECK([ovs-appctl ofproto/detrace $ufid $pmd_id | ofctl_strip | \ ++ sed -E 's/n_bytes=2(66|80),/n_bytes=294,/'], [0], [dnl ++group_id=1,type=select,selection_method=dp_hash,bucket=bucket_id:0,weight:100,actions=ct(commit,table=2) ++]) ++ ++ufid=$(ovs-appctl dpctl/dump-flows -m filter='in_port(ovs-p1),ipv4' | grep "actions:ovs-p2" | parse_ufid) ++AT_CHECK([ovs-appctl ofproto/detrace $ufid $pmd_id | ofctl_strip | \ ++ sed -E 's/n_bytes=2(66|80),/n_bytes=294,/'], [0], [dnl ++table_id=2, n_packets=3, n_bytes=294, ip,actions=output:2 ++]) ++ ++ufid=$(ovs-appctl dpctl/dump-flows -m filter='recirc_id(0),in_port(ovs-p2),ipv4' | grep "ct," | parse_ufid) ++AT_CHECK([ovs-appctl ofproto/detrace $ufid $pmd_id | ofctl_strip | \ ++ sed -E 's/n_bytes=2(66|80),/n_bytes=294,/'], [0], [dnl ++cookie=0xabcedf, n_packets=3, n_bytes=294, priority=100,ip,in_port=2,nw_dst=10.0.0.1,actions=ct(table=3) ++]) ++ ++ufid=$(ovs-appctl dpctl/dump-flows -m filter='in_port(ovs-p2),ipv4' | grep "actions:ovs-p1" | parse_ufid) ++AT_CHECK([ovs-appctl ofproto/detrace $ufid $pmd_id | ofctl_strip | \ ++ sed -E 's/n_bytes=2(66|80),/n_bytes=294,/'], [0], [dnl ++table_id=3, n_packets=3, n_bytes=294, ip,actions=output:1 ++]) ++ ++AT_CHECK([ovs-appctl revalidator/resume]) ++ ++OVS_TRAFFIC_VSWITCHD_STOP ++AT_CLEANUP ++ + AT_BANNER([MPLS]) + + AT_SETUP([mpls - encap header dp-support]) +@@ -3410,10 +3499,10 @@ OVS_START_L7([at_ns1], [http]) OVS_START_L7([at_ns3], [http]) dnl HTTP requests from p0->p1 should work fine. @@ -3105,7 +3393,7 @@ index 202ff04922..f914512a49 100644 OVS_TRAFFIC_VSWITCHD_STOP AT_CLEANUP -@@ -3453,10 +3450,10 @@ dnl traffic can't be identified, because the initial request wasn't committed. +@@ -3453,10 +3542,10 @@ dnl traffic can't be identified, because the initial request wasn't committed. dnl For the first pair of ports, this means that the connection fails. OVS_START_L7([at_ns1], [http]) OVS_START_L7([at_ns3], [http]) @@ -3118,7 +3406,7 @@ index 202ff04922..f914512a49 100644 OVS_TRAFFIC_VSWITCHD_STOP AT_CLEANUP -@@ -3492,7 +3489,7 @@ OVS_START_L7([at_ns1], [http]) +@@ -3492,7 +3581,7 @@ OVS_START_L7([at_ns1], [http]) OVS_START_L7([at_ns3], [http]) dnl HTTP requests from p0->p1 should work fine. @@ -3127,7 +3415,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),zone=1,protoinfo=(state=) -@@ -3500,7 +3497,7 @@ tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src= +@@ -3500,7 +3589,7 @@ tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src= dnl HTTP requests from p2->p3 should fail due to network failure. dnl Try 3 times, in 1 second intervals. @@ -3136,7 +3424,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.4)], [0], [dnl tcp,orig=(src=10.1.1.3,dst=10.1.1.4,sport=,dport=),reply=(src=10.1.1.4,dst=10.1.1.3,sport=,dport=),zone=2,protoinfo=(state=) -@@ -3539,7 +3536,7 @@ OVS_START_L7([at_ns1], [http]) +@@ -3539,7 +3628,7 @@ OVS_START_L7([at_ns1], [http]) OVS_START_L7([at_ns3], [http]) dnl HTTP requests from p0->p1 should work fine. @@ -3145,7 +3433,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),zone=4097,protoinfo=(state=) -@@ -3547,7 +3544,7 @@ tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src= +@@ -3547,7 +3636,7 @@ tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src= dnl HTTP requests from p2->p3 should fail due to network failure. dnl Try 3 times, in 1 second intervals. @@ -3154,7 +3442,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.4)], [0], [dnl tcp,orig=(src=10.1.1.3,dst=10.1.1.4,sport=,dport=),reply=(src=10.1.1.4,dst=10.1.1.3,sport=,dport=),zone=4098,protoinfo=(state=) -@@ -3581,7 +3578,7 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) +@@ -3581,7 +3670,7 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) OVS_START_L7([at_ns1], [http]) dnl HTTP requests from p0->p1 should work fine. @@ -3163,7 +3451,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl tcp,dnl -@@ -3607,7 +3604,7 @@ AT_CHECK([ovs-ofctl mod-flows br0 dnl +@@ -3607,7 +3696,7 @@ AT_CHECK([ovs-ofctl mod-flows br0 dnl dnl Wait for a flow flush as some datapaths (read TC) might take time to clear. AT_CHECK([ovs-appctl revalidator/wait], [0]) @@ -3172,7 +3460,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-flows --names filter=in_port=ovs-p0 dnl | grep "+trk" | grep -q "ct_zone(0xf)" ], [0], []) -@@ -3641,7 +3638,7 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) +@@ -3641,7 +3730,7 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) OVS_START_L7([at_ns1], [http]) dnl HTTP requests from p0->p1 should work fine. @@ -3181,7 +3469,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl tcp,dnl -@@ -3659,7 +3656,7 @@ AT_CHECK([ovs-ofctl mod-flows br0 'priority=100,ct_state=-trk,tcp,in_port="ovs-p +@@ -3659,7 +3748,7 @@ AT_CHECK([ovs-ofctl mod-flows br0 'priority=100,ct_state=-trk,tcp,in_port="ovs-p dnl Wait for a flow flush as some datapaths (read TC) might take time to clear. AT_CHECK([ovs-appctl revalidator/wait], [0]) @@ -3190,7 +3478,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-flows --names filter=in_port=ovs-p0 dnl | grep "+trk" | sed 's/0xffff000f\/0xffff/0xf\/0xffff/' dnl -@@ -3707,7 +3704,7 @@ AT_CHECK([ovs-ofctl --bundle add-flows br1 flows-br1.txt]) +@@ -3707,7 +3796,7 @@ AT_CHECK([ovs-ofctl --bundle add-flows br1 flows-br1.txt]) dnl HTTP requests from p0->p1 should work fine. OVS_START_L7([at_ns1], [http]) @@ -3199,7 +3487,7 @@ index 202ff04922..f914512a49 100644 OVS_TRAFFIC_VSWITCHD_STOP AT_CLEANUP -@@ -3736,10 +3733,10 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) +@@ -3736,10 +3825,10 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) OVS_START_L7([at_ns1], [http]) dnl HTTP requests from p0->p1 should work fine. @@ -3212,7 +3500,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),zone=1,protoinfo=(state=) -@@ -3778,10 +3775,10 @@ AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) +@@ -3778,10 +3867,10 @@ AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) OVS_START_L7([at_ns1], [http]) dnl HTTP requests from p0->p1 should work fine. @@ -3225,7 +3513,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),zone=1,protoinfo=(state=) -@@ -3823,14 +3820,14 @@ OVS_START_L7([at_ns1], [http]) +@@ -3823,14 +3912,14 @@ OVS_START_L7([at_ns1], [http]) OVS_START_L7([at_ns3], [http]) dnl HTTP requests from p0->p1 should work fine. @@ -3242,7 +3530,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.4)], [0], [dnl tcp,orig=(src=10.1.1.3,dst=10.1.1.4,sport=,dport=),reply=(src=10.1.1.4,dst=10.1.1.3,sport=,dport=),mark=2,protoinfo=(state=) ]) -@@ -3865,7 +3862,7 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) +@@ -3865,7 +3954,7 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) OVS_START_L7([at_ns1], [http]) dnl HTTP requests from p0->p1 should work fine. @@ -3251,7 +3539,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),mark=3,protoinfo=(state=) -@@ -3904,14 +3901,14 @@ OVS_START_L7([at_ns1], [http]) +@@ -3904,14 +3993,14 @@ OVS_START_L7([at_ns1], [http]) OVS_START_L7([at_ns3], [http]) dnl HTTP requests from p0->p1 should work fine. @@ -3268,7 +3556,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.4)], [0], [dnl tcp,orig=(src=10.1.1.3,dst=10.1.1.4,sport=,dport=),reply=(src=10.1.1.4,dst=10.1.1.3,sport=,dport=),mark=2,protoinfo=(state=) ]) -@@ -3950,11 +3947,11 @@ OVS_START_L7([at_ns1], [http]) +@@ -3950,11 +4039,11 @@ OVS_START_L7([at_ns1], [http]) OVS_START_L7([at_ns3], [http]) dnl HTTP requests from p0->p1 should work fine. @@ -3282,7 +3570,7 @@ index 202ff04922..f914512a49 100644 OVS_TRAFFIC_VSWITCHD_STOP AT_CLEANUP -@@ -3986,7 +3983,7 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) +@@ -3986,7 +4075,7 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) OVS_START_L7([at_ns1], [http]) dnl HTTP requests from p0->p1 should work fine. @@ -3291,7 +3579,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),labels=0x200000001,protoinfo=(state=) -@@ -4024,7 +4021,7 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) +@@ -4024,7 +4113,7 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) OVS_START_L7([at_ns1], [http]) dnl HTTP requests from p0->p1 should work fine. @@ -3300,7 +3588,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),zone=1,mark=3,labels=0x200000001,protoinfo=(state=) -@@ -4060,7 +4057,7 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows1.txt]) +@@ -4060,7 +4149,7 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows1.txt]) dnl TCP traffic from ns0 to ns1 should fail. OVS_START_L7([at_ns1], [http]) @@ -3309,7 +3597,7 @@ index 202ff04922..f914512a49 100644 dnl Send UDP packet on port 1 twice. AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 "in_port=1 packet=50540000000a50540000000908004500001c000000000011a4cd0a0101010a0101020001000200080000 actions=resubmit(,0)"]) -@@ -5360,14 +5357,14 @@ OVS_START_L7([at_ns0], [http]) +@@ -5360,14 +5449,14 @@ OVS_START_L7([at_ns0], [http]) OVS_START_L7([at_ns1], [http]) dnl HTTP requests from ns0->ns1 should work fine. @@ -3326,7 +3614,7 @@ index 202ff04922..f914512a49 100644 OVS_TRAFFIC_VSWITCHD_STOP AT_CLEANUP -@@ -5401,7 +5398,7 @@ OVS_START_L7([at_ns0], [http6]) +@@ -5401,7 +5490,7 @@ OVS_START_L7([at_ns0], [http6]) OVS_START_L7([at_ns1], [http6]) dnl HTTP requests from ns0->ns1 should work fine. @@ -3335,7 +3623,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fc00::2)], [0], [dnl tcp,orig=(src=fc00::1,dst=fc00::2,sport=,dport=),reply=(src=fc00::2,dst=fc00::1,sport=,dport=),protoinfo=(state=) -@@ -5409,7 +5406,7 @@ tcp,orig=(src=fc00::1,dst=fc00::2,sport=,dport=),reply=(src=fc +@@ -5409,7 +5498,7 @@ tcp,orig=(src=fc00::1,dst=fc00::2,sport=,dport=),reply=(src=fc dnl HTTP requests from ns1->ns0 should fail due to network failure. dnl Try 3 times, in 1 second intervals. @@ -3344,7 +3632,7 @@ index 202ff04922..f914512a49 100644 OVS_TRAFFIC_VSWITCHD_STOP AT_CLEANUP -@@ -5447,19 +5444,21 @@ OVS_START_L7([at_ns1], [http]) +@@ -5447,19 +5536,21 @@ OVS_START_L7([at_ns1], [http]) OVS_START_L7([at_ns3], [http]) dnl HTTP requests from p0->p1 should work fine. @@ -3368,7 +3656,7 @@ index 202ff04922..f914512a49 100644 ADD_NAMESPACES(at_ns0) AT_CHECK([ip addr add dev br0 "10.1.1.1/24"]) -@@ -5489,10 +5488,10 @@ AT_CHECK([ping -q -c 3 -i 0.3 -W 2 10.1.1.2 | FORMAT_PING], [0], [dnl +@@ -5489,10 +5580,10 @@ AT_CHECK([ping -q -c 3 -i 0.3 -W 2 10.1.1.2 | FORMAT_PING], [0], [dnl OVS_START_L7([at_ns0], [http]) dnl HTTP requests from root namespace to p0 should work fine. @@ -3382,7 +3670,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2) | grep "zone"], [0], [dnl icmp,orig=(src=10.1.1.1,dst=10.1.1.2,id=,type=8,code=0),reply=(src=10.1.1.2,dst=10.1.1.1,id=,type=0,code=0),zone=1 -@@ -5505,10 +5504,12 @@ OVS_TRAFFIC_VSWITCHD_STOP +@@ -5505,10 +5596,12 @@ OVS_TRAFFIC_VSWITCHD_STOP AT_CLEANUP AT_SETUP([conntrack - multi-stage pipeline, local]) @@ -3395,7 +3683,7 @@ index 202ff04922..f914512a49 100644 ADD_NAMESPACES(at_ns0) AT_CHECK([ip addr add dev br0 "10.1.1.1/24"]) -@@ -5560,10 +5561,10 @@ AT_CHECK([ping -q -c 3 -i 0.3 -W 2 10.1.1.2 | FORMAT_PING], [0], [dnl +@@ -5560,10 +5653,10 @@ AT_CHECK([ping -q -c 3 -i 0.3 -W 2 10.1.1.2 | FORMAT_PING], [0], [dnl OVS_START_L7([at_ns0], [http]) dnl HTTP requests from root namespace to p0 should work fine. @@ -3408,7 +3696,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2) | grep "zone"], [0], [dnl icmp,orig=(src=10.1.1.1,dst=10.1.1.2,id=,type=8,code=0),reply=(src=10.1.1.2,dst=10.1.1.1,id=,type=0,code=0),zone=1 -@@ -5812,7 +5813,7 @@ NETNS_DAEMONIZE([at_ns1], [[$PYTHON3 $srcdir/test-l7.py ftp]], [ftp0.pid]) +@@ -5812,7 +5905,7 @@ NETNS_DAEMONIZE([at_ns1], [[$PYTHON3 $srcdir/test-l7.py ftp]], [ftp0.pid]) OVS_WAIT_UNTIL([ip netns exec at_ns1 netstat -l | grep ftp]) dnl FTP requests from p0->p1 should work fine. @@ -3417,7 +3705,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([find -name index.html], [0], [dnl ./index.html -@@ -5879,12 +5880,12 @@ OVS_START_L7([at_ns1], [ftp]) +@@ -5879,12 +5972,12 @@ OVS_START_L7([at_ns1], [ftp]) dnl FTP requests from p1->p0 should fail due to network failure. dnl Try 3 times, in 1 second intervals. @@ -3432,7 +3720,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),protoinfo=(state=),helper=ftp ]) -@@ -5895,12 +5896,12 @@ AT_CHECK([ovs-appctl dpctl/flush-conntrack]) +@@ -5895,12 +5988,12 @@ AT_CHECK([ovs-appctl dpctl/flush-conntrack]) dnl FTP requests from p1->p0 should fail due to network failure. dnl Try 3 times, in 1 second intervals. @@ -3447,7 +3735,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),protoinfo=(state=),helper=ftp tcp,orig=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),reply=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),protoinfo=(state=) -@@ -5909,7 +5910,7 @@ tcp,orig=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),reply=(src= +@@ -5909,7 +6002,7 @@ tcp,orig=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),reply=(src= AT_CHECK([ovs-appctl dpctl/flush-conntrack]) dnl Passive FTP requests from p0->p1 should work fine. @@ -3456,7 +3744,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),protoinfo=(state=),helper=ftp ]) -@@ -5919,7 +5920,7 @@ AT_CHECK([ovs-ofctl --bundle replace-flows br0 flows3.txt]) +@@ -5919,7 +6012,7 @@ AT_CHECK([ovs-ofctl --bundle replace-flows br0 flows3.txt]) AT_CHECK([ovs-appctl dpctl/flush-conntrack]) dnl FTP control requests from p0->p1 should work fine, but helper will not be assigned. @@ -3465,7 +3753,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),protoinfo=(state=) ]) -@@ -5985,12 +5986,12 @@ OVS_START_L7([at_ns1], [ftp], [11111]) +@@ -5985,12 +6078,12 @@ OVS_START_L7([at_ns1], [ftp], [11111]) dnl FTP requests from p1->p0 should fail due to network failure. dnl Try 3 times, in 1 second intervals. @@ -3480,7 +3768,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),protoinfo=(state=),helper=ftp ]) -@@ -6001,12 +6002,12 @@ AT_CHECK([ovs-appctl dpctl/flush-conntrack]) +@@ -6001,12 +6094,12 @@ AT_CHECK([ovs-appctl dpctl/flush-conntrack]) dnl FTP requests from p1->p0 should fail due to network failure. dnl Try 3 times, in 1 second intervals. @@ -3495,7 +3783,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),protoinfo=(state=),helper=ftp tcp,orig=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),reply=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),protoinfo=(state=) -@@ -6015,7 +6016,7 @@ tcp,orig=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),reply=(src= +@@ -6015,7 +6108,7 @@ tcp,orig=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),reply=(src= AT_CHECK([ovs-appctl dpctl/flush-conntrack]) dnl Passive FTP requests from p0->p1 should work fine. @@ -3504,7 +3792,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),protoinfo=(state=),helper=ftp ]) -@@ -6025,7 +6026,7 @@ AT_CHECK([ovs-ofctl --bundle replace-flows br0 flows3.txt]) +@@ -6025,7 +6118,7 @@ AT_CHECK([ovs-ofctl --bundle replace-flows br0 flows3.txt]) AT_CHECK([ovs-appctl dpctl/flush-conntrack]) dnl FTP control requests from p0->p1 should work fine, but helper will not be assigned. @@ -3513,7 +3801,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),protoinfo=(state=) ]) -@@ -6060,7 +6061,7 @@ AT_CHECK([ovs-ofctl --bundle replace-flows br0 flows.txt]) +@@ -6060,7 +6153,7 @@ AT_CHECK([ovs-ofctl --bundle replace-flows br0 flows.txt]) OVS_START_L7([at_ns1], [ftp]) dnl FTP requests from p0->p1 should work fine. @@ -3522,7 +3810,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),protoinfo=(state=),helper=ftp -@@ -6121,7 +6122,7 @@ OVS_WAIT_UNTIL([ip netns exec at_ns0 ping6 -c 1 fc00::2 >/dev/null]) +@@ -6121,7 +6214,7 @@ OVS_WAIT_UNTIL([ip netns exec at_ns0 ping6 -c 1 fc00::2 >/dev/null]) OVS_START_L7([at_ns1], [ftp]) dnl FTP requests from p0->p1 should work fine. @@ -3531,7 +3819,7 @@ index 202ff04922..f914512a49 100644 dnl Discards CLOSE_WAIT and CLOSING AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fc00::2)], [0], [dnl -@@ -6180,7 +6181,7 @@ OVS_WAIT_UNTIL([ip netns exec at_ns0 ping6 -c 1 fc00::2 >/dev/null]) +@@ -6180,7 +6273,7 @@ OVS_WAIT_UNTIL([ip netns exec at_ns0 ping6 -c 1 fc00::2 >/dev/null]) OVS_START_L7([at_ns1], [ftp]) dnl FTP passive requests from p0->p1 should work fine. @@ -3540,7 +3828,7 @@ index 202ff04922..f914512a49 100644 dnl Discards CLOSE_WAIT and CLOSING AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fc00::2)], [0], [dnl -@@ -6230,12 +6231,12 @@ OVS_START_L7([at_ns1], [ftp]) +@@ -6230,12 +6323,12 @@ OVS_START_L7([at_ns1], [ftp]) dnl FTP requests from p1->p0 should fail due to network failure. dnl Try 3 times, in 1 second intervals. @@ -3555,7 +3843,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),zone=1,protoinfo=(state=),helper=ftp tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),zone=2,protoinfo=(state=),helper=ftp -@@ -6246,7 +6247,7 @@ tcp,orig=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),reply=(src= +@@ -6246,7 +6339,7 @@ tcp,orig=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),reply=(src= AT_CHECK([ovs-appctl dpctl/flush-conntrack]) dnl Passive FTP requests from p0->p1 should work fine. @@ -3564,7 +3852,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),zone=1,protoinfo=(state=) tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),zone=1,protoinfo=(state=),helper=ftp -@@ -6370,7 +6371,7 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) +@@ -6370,7 +6463,7 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) dnl HTTP requests from p0->p1 should work fine. OVS_START_L7([at_ns1], [http]) @@ -3573,7 +3861,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2) | sed -e 's/dst=10.1.1.2[[45]][[0-9]]/dst=10.1.1.2XX/' | uniq], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.2XX,sport=,dport=),zone=1,protoinfo=(state=) -@@ -6460,7 +6461,7 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) +@@ -6460,7 +6553,7 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) dnl HTTP requests from p0->p1 should work fine. OVS_START_L7([at_ns1], [http]) @@ -3582,7 +3870,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2) | sed -e 's/dst=10.1.1.2[[45]][[0-9]]/dst=10.1.1.2XX/' | uniq], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.2XX,sport=,dport=),zone=1,protoinfo=(state=) -@@ -6567,7 +6568,7 @@ AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2) | uniq], [0], [d +@@ -6567,7 +6660,7 @@ AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2) | uniq], [0], [d tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.240,sport=,dport=),zone=1,protoinfo=(state=) ]) @@ -3591,7 +3879,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2) | uniq], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.240,sport=,dport=),zone=1,protoinfo=(state=) -@@ -6622,7 +6623,7 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) +@@ -6622,7 +6715,7 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) dnl HTTP requests from p0->p1 should work fine. OVS_START_L7([at_ns1], [http]) @@ -3600,7 +3888,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2) | sed -e 's/dst=10.1.1.2[[45]][[0-9]]/dst=10.1.1.2XX/' | uniq], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.2XX,sport=,dport=),zone=1,protoinfo=(state=) -@@ -6716,14 +6717,14 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) +@@ -6716,14 +6809,14 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) dnl Should work with the virtual IP address through NAT OVS_START_L7([at_ns1], [http]) @@ -3617,7 +3905,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),zone=1,protoinfo=(state=) -@@ -6754,7 +6755,7 @@ table=2,in_port=1,ip,ct_mark=0xac,ct_label=0xac,actions=2 +@@ -6754,7 +6847,7 @@ table=2,in_port=1,ip,ct_mark=0xac,ct_label=0xac,actions=2 ]) AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) @@ -3626,7 +3914,7 @@ index 202ff04922..f914512a49 100644 dnl - make sure only dst nat has been performed AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.240)], [0], [dnl -@@ -6812,14 +6813,14 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) +@@ -6812,14 +6905,14 @@ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) dnl Should work with the virtual IP address through NAT OVS_START_L7([at_ns1], [http]) @@ -3643,7 +3931,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src=10.1.1.2,dst=10.1.1.1,sport=,dport=),zone=1,protoinfo=(state=) -@@ -7347,7 +7348,7 @@ OVS_WAIT_UNTIL([ip netns exec at_ns0 ping -c 1 10.1.1.2 >/dev/null]) +@@ -7347,7 +7440,7 @@ OVS_WAIT_UNTIL([ip netns exec at_ns0 ping -c 1 10.1.1.2 >/dev/null]) OVS_START_L7([at_ns1], [ftp]) dnl FTP requests from p0->p1 should work fine. @@ -3652,7 +3940,7 @@ index 202ff04922..f914512a49 100644 dnl Discards CLOSE_WAIT and CLOSING AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl -@@ -7407,7 +7408,7 @@ OVS_WAIT_UNTIL([ip netns exec at_ns0 ping -c 1 10.1.1.240 >/dev/null]) +@@ -7407,7 +7500,7 @@ OVS_WAIT_UNTIL([ip netns exec at_ns0 ping -c 1 10.1.1.240 >/dev/null]) OVS_START_L7([at_ns1], [ftp]) dnl FTP requests from p0->p1 should work fine. @@ -3661,7 +3949,7 @@ index 202ff04922..f914512a49 100644 dnl Discards CLOSE_WAIT and CLOSING AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl -@@ -7467,7 +7468,7 @@ OVS_WAIT_UNTIL([ip netns exec at_ns0 ping -c 1 10.1.100.1 >/dev/null]) +@@ -7467,7 +7560,7 @@ OVS_WAIT_UNTIL([ip netns exec at_ns0 ping -c 1 10.1.100.1 >/dev/null]) OVS_START_L7([at_ns1], [ftp]) dnl FTP requests from p0->p1 should work fine. @@ -3670,7 +3958,7 @@ index 202ff04922..f914512a49 100644 dnl Discards CLOSE_WAIT and CLOSING AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.200)], [0], [dnl -@@ -7527,7 +7528,7 @@ OVS_WAIT_UNTIL([ip netns exec at_ns0 ping -c 1 10.1.1.240 >/dev/null]) +@@ -7527,7 +7620,7 @@ OVS_WAIT_UNTIL([ip netns exec at_ns0 ping -c 1 10.1.1.240 >/dev/null]) OVS_START_L7([at_ns1], [ftp]) dnl FTP requests from p0->p1 should work fine. @@ -3679,7 +3967,7 @@ index 202ff04922..f914512a49 100644 dnl Discards CLOSE_WAIT and CLOSING AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl -@@ -7587,7 +7588,7 @@ OVS_WAIT_UNTIL([ip netns exec at_ns0 ping -c 1 10.1.1.2 >/dev/null]) +@@ -7587,7 +7680,7 @@ OVS_WAIT_UNTIL([ip netns exec at_ns0 ping -c 1 10.1.1.2 >/dev/null]) OVS_START_L7([at_ns1], [ftp]) dnl FTP requests from p0->p1 should work fine. @@ -3688,7 +3976,7 @@ index 202ff04922..f914512a49 100644 dnl Discards CLOSE_WAIT and CLOSING AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.120.240)], [0], [dnl -@@ -7632,12 +7633,12 @@ OVS_WAIT_UNTIL([ip netns exec at_ns0 ping6 -c 1 fc00::2]) +@@ -7632,12 +7725,12 @@ OVS_WAIT_UNTIL([ip netns exec at_ns0 ping6 -c 1 fc00::2]) dnl HTTP requests from ns0->ns1 should work fine. OVS_START_L7([at_ns1], [http6]) @@ -3703,7 +3991,7 @@ index 202ff04922..f914512a49 100644 OVS_TRAFFIC_VSWITCHD_STOP AT_CLEANUP -@@ -7676,7 +7677,7 @@ NS_CHECK_EXEC([at_ns0], [ping6 -q -c 3 -i 0.3 -W 2 fc00::240 | FORMAT_PING], [0] +@@ -7676,7 +7769,7 @@ NS_CHECK_EXEC([at_ns0], [ping6 -q -c 3 -i 0.3 -W 2 fc00::240 | FORMAT_PING], [0] dnl Should work with the virtual IP address through NAT OVS_START_L7([at_ns1], [http6]) @@ -3712,7 +4000,7 @@ index 202ff04922..f914512a49 100644 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fc00::1)], [0], [dnl icmpv6,orig=(src=fc00::1,dst=fc00::240,id=,type=128,code=0),reply=(src=fc00::2,dst=fc00::1,id=,type=129,code=0),zone=1 -@@ -7826,7 +7827,7 @@ OVS_WAIT_UNTIL([ip netns exec at_ns0 ping6 -c 1 fc00::2 >/dev/null]) +@@ -7826,7 +7919,7 @@ OVS_WAIT_UNTIL([ip netns exec at_ns0 ping6 -c 1 fc00::2 >/dev/null]) OVS_START_L7([at_ns1], [ftp]) dnl FTP requests from p0->p1 should work fine. @@ -3721,7 +4009,7 @@ index 202ff04922..f914512a49 100644 dnl Discards CLOSE_WAIT and CLOSING AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fc00::2)], [0], [dnl -@@ -7887,7 +7888,7 @@ OVS_WAIT_UNTIL([ip netns exec at_ns0 ping6 -c 1 fc00::2 >/dev/null]) +@@ -7887,7 +7980,7 @@ OVS_WAIT_UNTIL([ip netns exec at_ns0 ping6 -c 1 fc00::2 >/dev/null]) OVS_START_L7([at_ns1], [ftp]) dnl FTP requests from p0->p1 should work fine. @@ -3730,7 +4018,7 @@ index 202ff04922..f914512a49 100644 dnl Discards CLOSE_WAIT and CLOSING AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fc00::2)], [0], [dnl -@@ -7947,7 +7948,7 @@ NETNS_DAEMONIZE([at_ns1], [[$PYTHON3 $srcdir/test-l7.py ftp]], [ftp0.pid]) +@@ -7947,7 +8040,7 @@ NETNS_DAEMONIZE([at_ns1], [[$PYTHON3 $srcdir/test-l7.py ftp]], [ftp0.pid]) OVS_WAIT_UNTIL([ip netns exec at_ns1 netstat -l | grep ftp]) dnl FTP requests from p0->p1 should work fine. @@ -3739,7 +4027,7 @@ index 202ff04922..f914512a49 100644 dnl Discards CLOSE_WAIT and CLOSING AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fc00::2)], [0], [dnl -@@ -8090,7 +8091,7 @@ on_exit 'ovs-appctl dpif/dump-flows br0' +@@ -8090,7 +8183,7 @@ on_exit 'ovs-appctl dpif/dump-flows br0' dnl Should work with the virtual IP address through NAT for i in $(seq 1 50); do echo Request $i @@ -3748,7 +4036,7 @@ index 202ff04922..f914512a49 100644 done dnl Each server should have at least one connection. -@@ -8386,6 +8387,7 @@ OVS_TRAFFIC_VSWITCHD_STOP +@@ -8386,6 +8479,7 @@ OVS_TRAFFIC_VSWITCHD_STOP AT_CLEANUP AT_SETUP([conntrack - can match and clear ct_state from outside OVS]) @@ -3756,7 +4044,7 @@ index 202ff04922..f914512a49 100644 CHECK_CONNTRACK_LOCAL_STACK() OVS_CHECK_GENEVE() -@@ -8396,6 +8398,7 @@ AT_CHECK([ovs-ofctl add-flow br0 "actions=normal"]) +@@ -8396,6 +8490,7 @@ AT_CHECK([ovs-ofctl add-flow br0 "actions=normal"]) AT_CHECK([ovs-ofctl add-flow br-underlay "priority=100,ct_state=+trk,actions=ct_clear,resubmit(,0)"]) AT_CHECK([ovs-ofctl add-flow br-underlay "priority=10,actions=normal"]) diff --git a/SPECS/openvswitch3.4.spec b/SPECS/openvswitch3.4.spec index ce69365..ed6b602 100644 --- a/SPECS/openvswitch3.4.spec +++ b/SPECS/openvswitch3.4.spec @@ -57,7 +57,7 @@ Summary: Open vSwitch Group: System Environment/Daemons daemon/database/utilities URL: http://www.openvswitch.org/ Version: 3.4.0 -Release: 24%{?dist} +Release: 26%{?dist} # Nearly all of openvswitch is ASL 2.0. The bugtool is LGPLv2+, and the # lib/sflow*.[ch] files are SISSL @@ -770,6 +770,19 @@ exit 0 %endif %changelog +* Fri Dec 13 2024 Open vSwitch CI - 3.4.0-26 +- Merging upstream branch-3.4 [RH git: 4f020a4eb1] + Commit list: + 84a98a8ba4 ofproto: Fix default pmd_id for ofproto/detrace. + 65efbaa56a github: Skip clang-analyze when reference generation fails. + + +* Thu Dec 12 2024 Open vSwitch CI - 3.4.0-25 +- Merging upstream branch-3.4 [RH git: 513b808a85] + Commit list: + 069f5a7763 netdev-dpdk: Restore outer UDP checksum for Intel nics. + + * Wed Dec 11 2024 Open vSwitch CI - 3.4.0-24 - Merging upstream branch-3.4 [RH git: 99590fdaef] Commit list: