From d737ac1aec6155f4e245cd75011906d0fa25a6f5 Mon Sep 17 00:00:00 2001 From: Open vSwitch CI Date: Oct 30 2024 23:02:45 +0000 Subject: Import openvswitch3.4-3.4.0-13 from Fast DataPath --- diff --git a/SOURCES/openvswitch-3.4.0.patch b/SOURCES/openvswitch-3.4.0.patch index d83778c..9c018e8 100644 --- a/SOURCES/openvswitch-3.4.0.patch +++ b/SOURCES/openvswitch-3.4.0.patch @@ -1,3 +1,16 @@ +diff --git a/.ci/dpdk-build.sh b/.ci/dpdk-build.sh +index e1b8e3ccbb..991b272ea1 100755 +--- a/.ci/dpdk-build.sh ++++ b/.ci/dpdk-build.sh +@@ -40,7 +40,7 @@ function build_dpdk() + # any DPDK driver. + # check-dpdk unit tests requires testpmd and some net/ driver. + DPDK_OPTS="$DPDK_OPTS -Denable_apps=test-pmd" +- enable_drivers="net/null,net/af_xdp,net/tap,net/virtio,net/pcap" ++ enable_drivers="net/null,net/af_xdp,net/tap,net/virtio" + DPDK_OPTS="$DPDK_OPTS -Denable_drivers=$enable_drivers" + # OVS depends on the vhost library (and its dependencies). + # net/tap depends on the gso library. diff --git a/.ci/linux-prepare.sh b/.ci/linux-prepare.sh index 2a191b57fb..5f8a1db6af 100755 --- a/.ci/linux-prepare.sh @@ -12,11 +25,15 @@ index 2a191b57fb..5f8a1db6af 100755 # Install python test dependencies pip3 install -r python/test_requirements.txt diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml -index 9d3a13ca1c..022c4cd31d 100644 +index 9d3a13ca1c..8d2a083749 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml -@@ -11,7 +11,7 @@ jobs: - dependencies: gcc libbpf-dev libnuma-dev libpcap-dev ninja-build pkgconf +@@ -8,10 +8,10 @@ env: + jobs: + build-dpdk: + env: +- dependencies: gcc libbpf-dev libnuma-dev libpcap-dev ninja-build pkgconf ++ dependencies: gcc libbpf-dev libnuma-dev ninja-build pkgconf CC: gcc DPDK_GIT: https://dpdk.org/git/dpdk-stable - DPDK_VER: 23.11.1 @@ -24,6 +41,42 @@ index 9d3a13ca1c..022c4cd31d 100644 name: dpdk gcc outputs: dpdk_key: ${{ steps.gen_dpdk_key.outputs.key }} +@@ -79,8 +79,7 @@ jobs: + env: + dependencies: | + automake libtool gcc bc libjemalloc2 libjemalloc-dev libssl-dev \ +- llvm-dev libnuma-dev libpcap-dev selinux-policy-dev libbpf-dev \ +- lftp libreswan ++ llvm-dev libnuma-dev selinux-policy-dev libbpf-dev lftp libreswan + CC: ${{ matrix.compiler }} + DPDK: ${{ matrix.dpdk }} + DPDK_SHARED: ${{ matrix.dpdk_shared }} +@@ -241,14 +240,6 @@ jobs: + if: matrix.m32 != '' + run: sudo apt install -y gcc-multilib + +- - name: Reduce ASLR entropy +- if: matrix.sanitizers != '' +- # Asan in llvm 14 provided in ubuntu-22.04 is incompatible with +- # high-entropy ASLR configured in much newer kernels that GitHub +- # runners are using leading to random crashes: +- # https://github.com/actions/runner-images/issues/9491 +- run: sudo sysctl -w vm.mmap_rnd_bits=28 +- + - name: prepare + run: ./.ci/linux-prepare.sh + +@@ -279,8 +270,8 @@ jobs: + needs: build-dpdk + env: + dependencies: | +- automake bc clang-tools libbpf-dev libnuma-dev libpcap-dev \ +- libunbound-dev libunwind-dev libssl-dev libtool llvm-dev ++ automake bc clang-tools libbpf-dev libnuma-dev libunbound-dev \ ++ libunwind-dev libssl-dev libtool llvm-dev + CC: clang + DPDK: dpdk + CLANG_ANALYZE: true diff --git a/Documentation/faq/releases.rst b/Documentation/faq/releases.rst index 7c32d7acfc..d345b63d5b 100644 --- a/Documentation/faq/releases.rst @@ -313,6 +366,18 @@ index b9f9b404bf..c5396cc09c 100644 openvswitch (3.4.0-1) unstable; urgency=low * New upstream version +diff --git a/include/openvswitch/meta-flow.h b/include/openvswitch/meta-flow.h +index aff917bcf6..875f122c5f 100644 +--- a/include/openvswitch/meta-flow.h ++++ b/include/openvswitch/meta-flow.h +@@ -2308,6 +2308,7 @@ void mf_set_flow_value_masked(const struct mf_field *, + const union mf_value *mask, + struct flow *); + bool mf_is_tun_metadata(const struct mf_field *); ++bool mf_is_any_metadata(const struct mf_field *); + bool mf_is_frozen_metadata(const struct mf_field *); + bool mf_is_pipeline_field(const struct mf_field *); + bool mf_is_set(const struct mf_field *, const struct flow *); diff --git a/lib/mcast-snooping.c b/lib/mcast-snooping.c index dc5164b41c..bf25e6f20a 100644 --- a/lib/mcast-snooping.c @@ -328,6 +393,136 @@ index dc5164b41c..bf25e6f20a 100644 mcast_snooping_flush_group(ms, grp); } +diff --git a/lib/meta-flow.c b/lib/meta-flow.c +index 499be04b60..2595fd634b 100644 +--- a/lib/meta-flow.c ++++ b/lib/meta-flow.c +@@ -1790,6 +1790,115 @@ mf_is_tun_metadata(const struct mf_field *mf) + mf->id < MFF_TUN_METADATA0 + TUN_METADATA_NUM_OPTS; + } + ++bool ++mf_is_any_metadata(const struct mf_field *mf) ++{ ++ switch (mf->id) { ++ case MFF_DP_HASH: ++ case MFF_RECIRC_ID: ++ case MFF_PACKET_TYPE: ++ case MFF_CONJ_ID: ++ case MFF_TUN_ERSPAN_DIR: ++ CASE_MFF_TUN_METADATA: ++ case MFF_METADATA: ++ case MFF_IN_PORT: ++ case MFF_IN_PORT_OXM: ++ case MFF_ACTSET_OUTPUT: ++ case MFF_SKB_PRIORITY: ++ case MFF_PKT_MARK: ++ case MFF_CT_STATE: ++ case MFF_CT_ZONE: ++ case MFF_CT_MARK: ++ case MFF_CT_LABEL: ++ case MFF_CT_NW_PROTO: ++ case MFF_CT_NW_SRC: ++ case MFF_CT_NW_DST: ++ case MFF_CT_IPV6_SRC: ++ case MFF_CT_IPV6_DST: ++ case MFF_CT_TP_SRC: ++ case MFF_CT_TP_DST: ++ CASE_MFF_REGS: ++ CASE_MFF_XREGS: ++ CASE_MFF_XXREGS: ++ return true; ++ ++ case MFF_TUN_ID: ++ case MFF_TUN_SRC: ++ case MFF_TUN_DST: ++ case MFF_TUN_IPV6_SRC: ++ case MFF_TUN_IPV6_DST: ++ case MFF_TUN_FLAGS: ++ case MFF_TUN_TTL: ++ case MFF_TUN_TOS: ++ case MFF_TUN_GBP_ID: ++ case MFF_TUN_GBP_FLAGS: ++ case MFF_TUN_ERSPAN_IDX: ++ case MFF_TUN_ERSPAN_VER: ++ case MFF_TUN_ERSPAN_HWID: ++ case MFF_TUN_GTPU_FLAGS: ++ case MFF_TUN_GTPU_MSGTYPE: ++ case MFF_ETH_SRC: ++ case MFF_ETH_DST: ++ case MFF_ETH_TYPE: ++ case MFF_VLAN_TCI: ++ case MFF_DL_VLAN: ++ case MFF_VLAN_VID: ++ case MFF_DL_VLAN_PCP: ++ case MFF_VLAN_PCP: ++ case MFF_MPLS_LABEL: ++ case MFF_MPLS_TC: ++ case MFF_MPLS_BOS: ++ case MFF_MPLS_TTL: ++ case MFF_IPV4_SRC: ++ case MFF_IPV4_DST: ++ case MFF_IPV6_SRC: ++ case MFF_IPV6_DST: ++ case MFF_IPV6_LABEL: ++ case MFF_IP_PROTO: ++ case MFF_IP_DSCP: ++ case MFF_IP_DSCP_SHIFTED: ++ case MFF_IP_ECN: ++ case MFF_IP_TTL: ++ case MFF_IP_FRAG: ++ case MFF_ARP_OP: ++ case MFF_ARP_SPA: ++ case MFF_ARP_TPA: ++ case MFF_ARP_SHA: ++ case MFF_ARP_THA: ++ case MFF_TCP_SRC: ++ case MFF_TCP_DST: ++ case MFF_TCP_FLAGS: ++ case MFF_UDP_SRC: ++ case MFF_UDP_DST: ++ case MFF_SCTP_SRC: ++ case MFF_SCTP_DST: ++ case MFF_ICMPV4_TYPE: ++ case MFF_ICMPV4_CODE: ++ case MFF_ICMPV6_TYPE: ++ case MFF_ICMPV6_CODE: ++ case MFF_ND_TARGET: ++ case MFF_ND_SLL: ++ case MFF_ND_TLL: ++ case MFF_ND_RESERVED: ++ case MFF_ND_OPTIONS_TYPE: ++ case MFF_NSH_FLAGS: ++ case MFF_NSH_MDTYPE: ++ case MFF_NSH_NP: ++ case MFF_NSH_SPI: ++ case MFF_NSH_SI: ++ case MFF_NSH_C1: ++ case MFF_NSH_C2: ++ case MFF_NSH_C3: ++ case MFF_NSH_C4: ++ case MFF_NSH_TTL: ++ return false; ++ ++ case MFF_N_IDS: ++ default: ++ OVS_NOT_REACHED(); ++ } ++} ++ + bool + mf_is_frozen_metadata(const struct mf_field *mf) + { +@@ -2545,7 +2654,8 @@ mf_set(const struct mf_field *mf, + break; + + case MFF_IP_FRAG: +- match_set_nw_frag_masked(match, value->u8, mask->u8); ++ match_set_nw_frag_masked(match, value->u8, ++ mask->u8 & FLOW_NW_FRAG_MASK); + break; + + case MFF_ARP_SPA: diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index 7cced0f226..d3cd66f18a 100644 --- a/lib/netdev-dpdk.c @@ -408,10 +603,18 @@ index e9603432d2..4b1c262eaa 100644 } } diff --git a/ofproto/bond.c b/ofproto/bond.c -index c31869a4c7..0858de3746 100644 +index c31869a4c7..45a36fabb9 100644 --- a/ofproto/bond.c +++ b/ofproto/bond.c -@@ -246,7 +246,7 @@ bond_create(const struct bond_settings *s, struct ofproto_dpif *ofproto) +@@ -193,6 +193,7 @@ static void bond_update_post_recirc_rules__(struct bond *, bool force) + static bool bond_is_falling_back_to_ab(const struct bond *); + static void bond_add_lb_output_buckets(const struct bond *); + static void bond_del_lb_output_buckets(const struct bond *); ++static bool bond_is_balanced(const struct bond *bond) OVS_REQ_RDLOCK(rwlock); + + + /* Attempts to parse 's' as the name of a bond balancing mode. If successful, +@@ -246,7 +247,7 @@ bond_create(const struct bond_settings *s, struct ofproto_dpif *ofproto) ovs_refcount_init(&bond->ref_cnt); hmap_init(&bond->pr_rule_ops); @@ -420,6 +623,41 @@ index c31869a4c7..0858de3746 100644 bond->active_member_changed = false; bond->primary = NULL; +@@ -549,6 +550,7 @@ bond_find_member_by_mac(const struct bond *bond, const struct eth_addr mac) + + static void + bond_active_member_changed(struct bond *bond) ++ OVS_REQ_WRLOCK(rwlock) + { + if (bond->active_member) { + struct eth_addr mac; +@@ -558,6 +560,9 @@ bond_active_member_changed(struct bond *bond) + bond->active_member_mac = eth_addr_zero; + } + bond->active_member_changed = true; ++ if (!bond_is_balanced(bond)) { ++ bond->bond_revalidate = true; ++ } + seq_change(connectivity_seq_get()); + } + +@@ -1121,7 +1126,7 @@ bond_get_recirc_id_and_hash_basis(struct bond *bond, uint32_t *recirc_id, + /* Rebalancing. */ + + static bool +-bond_is_balanced(const struct bond *bond) OVS_REQ_RDLOCK(rwlock) ++bond_is_balanced(const struct bond *bond) + { + return bond->rebalance_interval + && (bond->balance == BM_SLB || bond->balance == BM_TCP) +@@ -1725,7 +1730,6 @@ bond_unixctl_set_active_member(struct unixctl_conn *conn, + } + + if (bond->active_member != member) { +- bond->bond_revalidate = true; + bond->active_member = member; + 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..e7d4c2b2c3 100644 --- a/ofproto/ofproto-dpif-upcall.c @@ -470,6 +708,19 @@ index 4d39bc5a71..e7d4c2b2c3 100644 if (result != UKEY_KEEP) { /* Clears 'recircs' if filled by revalidate_ukey(). */ reval_op_init(&ops[n_ops++], result, udpif, ukey, &recircs, +diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c +index 7506ab5371..4cc7001a5b 100644 +--- a/ofproto/ofproto-dpif-xlate.c ++++ b/ofproto/ofproto-dpif-xlate.c +@@ -7278,7 +7278,7 @@ reset_mirror_ctx(struct xlate_ctx *ctx, const struct flow *flow, + + set_field = ofpact_get_SET_FIELD(a); + mf = set_field->field; +- if (mf_are_prereqs_ok(mf, flow, NULL) && !mf_is_tun_metadata(mf)) { ++ if (mf_are_prereqs_ok(mf, flow, NULL) && !mf_is_any_metadata(mf)) { + ctx->mirrors = 0; + } + return; diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index d3c353b9d6..9c210877e4 100644 --- a/ofproto/ofproto-dpif.c @@ -514,10 +765,60 @@ index beb0ab0d66..fe2c5bb61a 100644 allow openvswitch_t self:netlink_rdma_socket { setopt bind create }; @end_dpdk@ diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at -index 42fb66de68..1c99dc3bb9 100644 +index 42fb66de68..18bd359bfe 100644 --- a/tests/ofproto-dpif.at +++ b/tests/ofproto-dpif.at -@@ -757,6 +757,73 @@ Datapath actions: drop +@@ -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: + OVS_VSWITCHD_STOP + AT_CLEANUP + ++AT_SETUP([ofproto-dpif - active-backup bonding set primary]) ++ ++OVS_VSWITCHD_START( ++ [add-bond br0 bond0 p1 p2 bond_mode=active-backup \ ++ other_config:bond-primary=p1 -- \ ++ set bridge br0 other-config:hwaddr=aa:66:aa:66:aa:00 -- \ ++ set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \ ++ set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \ ++ add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \ ++ add-br br1 -- \ ++ set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \ ++ set bridge br1 datapath-type=dummy -- \ ++ add-bond br1 bond1 p3 p4 bond_mode=active-backup \ ++ other_config:bond-primary=p3 -- \ ++ set interface p3 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=3 -- \ ++ set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=4 -- \ ++ add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy]) ++ ++WAIT_FOR_DUMMY_PORTS([p3], [p4]) ++ ++AT_CHECK([ovs-ofctl add-flow br0 action=normal]) ++AT_CHECK([ovs-ofctl add-flow br1 action=normal]) ++ ++dnl Create datapath flow with bidirectional traffic. ++AT_CHECK([ovs-appctl netdev-dummy/receive p8 'in_port(8),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) ++AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) ++AT_CHECK([ovs-appctl netdev-dummy/receive p8 'in_port(8),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) ++AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) ++ ++dnl Set p2 and p4 as primary. ++AT_CHECK([ovs-vsctl set port bond0 other_config:bond-primary=p2 -- \ ++ set port bond1 other_config:bond-primary=p4]) ++ ++OVS_WAIT_UNTIL([ovs-appctl bond/show | grep -q 'active-backup primary: p4']) ++ ++AT_CHECK([ovs-appctl revalidator/wait]) ++ ++AT_CHECK([ovs-appctl dpctl/dump-flows --names | grep -q "actions:p[[13]]"], [1]) ++AT_CHECK([ovs-appctl dpctl/dump-flows --names | grep -q "actions:p[[24]]"], [0]) ++ ++OVS_VSWITCHD_STOP ++AT_CLEANUP ++ + AT_SETUP([ofproto-dpif - balance-slb bonding]) + # Create br0 with members bond0(p1, p2, p3) and p7, + # and br1 with members p4, p5, p6 and p8. +@@ -757,6 +800,73 @@ Datapath actions: drop OVS_VSWITCHD_STOP() AT_CLEANUP @@ -591,7 +892,7 @@ index 42fb66de68..1c99dc3bb9 100644 AT_SETUP([ofproto-dpif - bond - allow duplicated frames]) dnl Receiving of duplicated multicast frames should be allowed with 'all_members_active'. OVS_VSWITCHD_START([dnl -@@ -1171,6 +1238,60 @@ bucket3 >= 500 +@@ -1171,6 +1281,60 @@ bucket3 >= 500 OVS_VSWITCHD_STOP AT_CLEANUP @@ -652,7 +953,41 @@ index 42fb66de68..1c99dc3bb9 100644 AT_SETUP([ofproto-dpif - select group with explicit dp_hash selection method]) OVS_VSWITCHD_START -@@ -12661,3 +12782,48 @@ AT_CHECK([ovs-appctl revalidator/resume]) +@@ -5447,6 +5611,33 @@ AT_CHECK_UNQUOTED([tail -1 stdout], [0], + OVS_VSWITCHD_STOP + AT_CLEANUP + ++AT_SETUP([ofproto-dpif - mirroring, metadata modification]) ++AT_KEYWORDS([mirror mirrors mirroring]) ++OVS_VSWITCHD_START ++add_of_ports br0 1 2 3 ++AT_CHECK([ovs-vsctl set Bridge br0 mirrors=@m -- \ ++ --id=@p3 get Port p3 -- \ ++ --id=@m create Mirror name=mymirror select_all=true output_port=@p3], ++ [0], [ignore]) ++ ++AT_DATA([flows.txt], [dnl ++in_port=1 actions=load:0x00->NXM_OF_IN_PORT[[]],output:2 ++]) ++AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) ++ ++dnl Metadata modified, duplicate packet shouldn't be delivered to mirror. ++m4_define([ICMP_FLOW], [m4_join([,], ++ [in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800)], ++ [ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)], ++ [icmp(type=8,code=0)])]) ++AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "ICMP_FLOW"], [0], [stdout]) ++AT_CHECK_UNQUOTED([tail -1 stdout], [0], ++ [Datapath actions: 3,2 ++]) ++ ++OVS_VSWITCHD_STOP ++AT_CLEANUP ++ + 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 AT_CLEANUP @@ -701,6 +1036,62 @@ index 42fb66de68..1c99dc3bb9 100644 + +OVS_VSWITCHD_STOP(["/failed to flow_del (No such file or directory)/d"]) +AT_CLEANUP +diff --git a/tests/ovs-ofctl.at b/tests/ovs-ofctl.at +index e2f4429ae5..2363b72aa8 100644 +--- a/tests/ovs-ofctl.at ++++ b/tests/ovs-ofctl.at +@@ -3100,6 +3100,51 @@ AT_CHECK([ovs-ofctl -O OpenFlow14 dump-flows br0 | ofctl_strip | sed '/OFPST_FLO + OVS_VSWITCHD_STOP + AT_CLEANUP + ++AT_SETUP([ovs-ofctl replace-flows with fragments]) ++OVS_VSWITCHD_START ++ ++AT_DATA([frag_flows.txt], [dnl ++ ip,nw_frag=first actions=drop ++ ip,nw_frag=later actions=drop ++ ip,nw_frag=no actions=NORMAL ++ ip,nw_frag=not_later actions=NORMAL ++ ip,nw_frag=yes actions=LOCAL ++]) ++AT_DATA([replace_flows.txt], [dnl ++ ip,nw_frag=first actions=NORMAL ++ ip,nw_frag=later actions=LOCAL ++ ip,nw_frag=no actions=drop ++ ip,nw_frag=not_later actions=drop ++ ip,nw_frag=yes actions=drop ++]) ++ ++AT_CHECK([ovs-ofctl -O OpenFlow13 add-flows br0 frag_flows.txt]) ++on_exit 'ovs-ofctl -O OpenFlow13 dump-flows br0' ++ ++dnl Check that flow replacement works. ++AT_CHECK([ovs-ofctl -vvconn:console:dbg -O OpenFlow13 \ ++ replace-flows br0 replace_flows.txt 2>&1 | grep FLOW_MOD \ ++ | sed 's/.*\(OFPT_FLOW_MOD.*\)/\1/' | strip_xids | sort], [0], [dnl ++OFPT_FLOW_MOD (OF1.3): ADD ip,nw_frag=first actions=NORMAL ++OFPT_FLOW_MOD (OF1.3): ADD ip,nw_frag=later actions=LOCAL ++OFPT_FLOW_MOD (OF1.3): ADD ip,nw_frag=no actions=drop ++OFPT_FLOW_MOD (OF1.3): ADD ip,nw_frag=not_later actions=drop ++OFPT_FLOW_MOD (OF1.3): ADD ip,nw_frag=yes actions=drop ++]) ++ ++dnl Check that replacement to the same set doesn't cause flow modifications. ++AT_CHECK([ovs-ofctl -vvconn:console:dbg -O OpenFlow13 \ ++ replace-flows br0 replace_flows.txt 2>&1 | grep FLOW_MOD \ ++ | sed 's/.*\(OFPT_FLOW_MOD.*\)/\1/' | strip_xids | sort], [0], []) ++ ++dnl Compare the flow dump against the expected set. ++cat replace_flows.txt > expout ++AT_CHECK([ovs-ofctl -O OpenFlow13 dump-flows br0 \ ++ | ofctl_strip | sed '/OFPST_FLOW/d' | sort], [0], [expout]) ++ ++OVS_VSWITCHD_STOP ++AT_CLEANUP ++ + AT_SETUP([ovs-ofctl replace-flows with --bundle]) + OVS_VSWITCHD_START + diff --git a/tests/ovsdb-idl.at b/tests/ovsdb-idl.at index 9070ea051a..74ccaccdd2 100644 --- a/tests/ovsdb-idl.at diff --git a/SPECS/openvswitch3.4.spec b/SPECS/openvswitch3.4.spec index 355443d..9015bb3 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: 12%{?dist} +Release: 13%{?dist} # Nearly all of openvswitch is ASL 2.0. The bugtool is LGPLv2+, and the # lib/sflow*.[ch] files are SISSL @@ -770,6 +770,16 @@ exit 0 %endif %changelog +* Wed Oct 30 2024 Open vSwitch CI - 3.4.0-13 +- Merging upstream branch-3.4 [RH git: 41fa65f465] + Commit list: + 77dc74395e meta-flow: Fix nw_frag mask while parsing from string. + 7e6a298c0e ci: Remove dependency on libpcap. + b2d2ca05c0 github: Remove ASLR entropy workaround. + b00d1115c5 bond: Always revalidate unbalanced bonds when active member changes. (FDP-845) + d9f1469317 ofproto-dpif-upcall: Fix redundant mirror on metadata modification. (FDP-699) + + * Thu Oct 24 2024 Open vSwitch CI - 3.4.0-12 - Merging dpdk subtree [RH git: 270d3c6ce7] Commit list: