diff --git a/SOURCES/openvswitch-2.15.0.patch b/SOURCES/openvswitch-2.15.0.patch index 5822024..05eb43a 100644 --- a/SOURCES/openvswitch-2.15.0.patch +++ b/SOURCES/openvswitch-2.15.0.patch @@ -100312,7 +100312,7 @@ index 9d8096668e..5806ea4b55 100644 return; } diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c -index 6be23dbeed..1a75969e42 100644 +index 6be23dbeed..eaec78c523 100644 --- a/lib/netdev-linux.c +++ b/lib/netdev-linux.c @@ -625,6 +625,7 @@ netdev_linux_notify_sock(void) @@ -100429,7 +100429,43 @@ index 6be23dbeed..1a75969e42 100644 unsigned int bps = ((uint64_t) kbits_rate * 1000) / 8; struct tc_police police; struct tc_ratespec rate; -@@ -6220,7 +6239,14 @@ get_stats_via_netlink(const struct netdev *netdev_, struct netdev_stats *stats) +@@ -2893,12 +2912,18 @@ netdev_linux_set_qos(struct netdev *netdev_, + /* Delete existing qdisc. */ + error = tc_del_qdisc(netdev_); + if (error) { ++ VLOG_WARN_RL(&rl, "%s: Failed to delete existing qdisc: %s", ++ netdev_get_name(netdev_), ovs_strerror(error)); + goto exit; + } + ovs_assert(netdev->tc == NULL); + + /* Install new qdisc. */ + error = new_ops->tc_install(netdev_, details); ++ if (error) { ++ VLOG_WARN_RL(&rl, "%s: Failed to install new qdisc: %s", ++ netdev_get_name(netdev_), ovs_strerror(error)); ++ } + ovs_assert((error == 0) == (netdev->tc != NULL)); + } + +@@ -5891,13 +5916,12 @@ tc_del_qdisc(struct netdev *netdev_) + if (!tcmsg) { + return ENODEV; + } +- tcmsg->tcm_handle = tc_make_handle(1, 0); + tcmsg->tcm_parent = TC_H_ROOT; + + error = tc_transact(&request, NULL); +- if (error == EINVAL) { +- /* EINVAL probably means that the default qdisc was in use, in which +- * case we've accomplished our purpose. */ ++ if (error == EINVAL || error == ENOENT) { ++ /* EINVAL or ENOENT probably means that the default qdisc was in use, ++ * in which case we've accomplished our purpose. */ + error = 0; + } + if (!error && netdev->tc) { +@@ -6220,7 +6244,14 @@ get_stats_via_netlink(const struct netdev *netdev_, struct netdev_stats *stats) if (ofpbuf_try_pull(reply, NLMSG_HDRLEN + sizeof(struct ifinfomsg))) { const struct nlattr *a = nl_attr_find(reply, 0, IFLA_STATS64); if (a && nl_attr_get_size(a) >= sizeof(struct rtnl_link_stats64)) { @@ -103188,7 +103224,7 @@ index 244ea0fbab..1f560a1f93 100644 AC_DEFUN([OVS_CHECK_WIN64], [AC_CACHE_CHECK( diff --git a/ofproto/bond.c b/ofproto/bond.c -index 35b9caac01..e07d12e58a 100644 +index 35b9caac01..560380504a 100644 --- a/ofproto/bond.c +++ b/ofproto/bond.c @@ -185,10 +185,14 @@ static struct bond_member *choose_output_member(const struct bond *, @@ -103232,6 +103268,15 @@ index 35b9caac01..e07d12e58a 100644 revalidate = bond->bond_revalidate; bond->bond_revalidate = false; ovs_rwlock_unlock(&rwlock); +@@ -871,7 +887,7 @@ bond_check_admissibility(struct bond *bond, const void *member_, + if (!member->enabled && member->may_enable) { + VLOG_DBG_RL(&rl, "bond %s: member %s: " + "main thread has not yet enabled member", +- bond->name, bond->active_member->name); ++ bond->name, member->name); + } + goto out; + case LACP_CONFIGURED: @@ -1033,7 +1049,7 @@ bond_may_recirc(const struct bond *bond) } @@ -109399,7 +109444,7 @@ index 1714273e35..270956d13f 100644 dnl Delete ip address. AT_CHECK([ip addr del 10.0.0.17/24 dev p1-route], [0], [stdout]) diff --git a/tests/system-traffic.at b/tests/system-traffic.at -index fb5b9a36d2..dff89aa089 100644 +index fb5b9a36d2..73bb11e44f 100644 --- a/tests/system-traffic.at +++ b/tests/system-traffic.at @@ -192,6 +192,46 @@ NS_CHECK_EXEC([at_ns0], [ping6 -s 3200 -q -c 3 -i 0.3 -w 2 fc00:1::2 | FORMAT_PI @@ -109690,7 +109735,50 @@ index fb5b9a36d2..dff89aa089 100644 OVS_CHECK_MIN_KERNEL(3, 10) OVS_TRAFFIC_VSWITCHD_START() -@@ -1927,6 +2085,111 @@ tcp,orig=(src=10.1.1.3,dst=10.1.1.4,sport=,dport=),reply=(src= +@@ -1400,6 +1558,42 @@ AT_CHECK([ovs-ofctl dump-flows br0 | grep "in_port=4" | ofctl_strip], [0], [dnl + OVS_TRAFFIC_VSWITCHD_STOP + AT_CLEANUP + ++AT_BANNER([QoS]) ++ ++AT_SETUP([QoS - basic configuration]) ++AT_SKIP_IF([test $HAVE_TC = no]) ++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") ++ ++dnl Adding a custom qdisc to ovs-p1, ovs-p0 will have the default qdisc. ++AT_CHECK([tc qdisc add dev ovs-p1 root noqueue]) ++AT_CHECK([tc qdisc show dev ovs-p1 | grep -q noqueue]) ++ ++dnl Configure the same QoS for both ports. ++AT_CHECK([ovs-vsctl set port ovs-p0 qos=@qos -- set port ovs-p1 qos=@qos dnl ++ -- --id=@qos create qos dnl ++ type=linux-htb other-config:max-rate=3000000 queues:0=@queue dnl ++ -- --id=@queue create queue dnl ++ other_config:min-rate=2000000 other_config:max-rate=3000000 dnl ++ other_config:burst=3000000], ++ [ignore], [ignore]) ++ ++dnl Wait for qdiscs to be applied. ++OVS_WAIT_UNTIL([tc qdisc show dev ovs-p0 | grep -q htb]) ++OVS_WAIT_UNTIL([tc qdisc show dev ovs-p1 | grep -q htb]) ++ ++dnl Check the configuration. ++m4_define([HTB_CONF], [rate 2Mbit ceil 3Mbit burst 375000b cburst 375000b]) ++AT_CHECK([tc class show dev ovs-p0 | grep -q 'class htb .* HTB_CONF']) ++AT_CHECK([tc class show dev ovs-p1 | grep -q 'class htb .* HTB_CONF']) ++ ++OVS_TRAFFIC_VSWITCHD_STOP ++AT_CLEANUP ++ + AT_BANNER([conntrack]) + + AT_SETUP([conntrack - controller]) +@@ -1927,6 +2121,111 @@ tcp,orig=(src=10.1.1.3,dst=10.1.1.4,sport=,dport=),reply=(src= OVS_TRAFFIC_VSWITCHD_STOP AT_CLEANUP @@ -109802,7 +109890,7 @@ index fb5b9a36d2..dff89aa089 100644 AT_SETUP([conntrack - multiple bridges]) CHECK_CONNTRACK() OVS_TRAFFIC_VSWITCHD_START( -@@ -2330,6 +2593,15 @@ NXST_FLOW reply: +@@ -2330,6 +2629,15 @@ NXST_FLOW reply: table=1, priority=100,ct_state=+est+trk,in_port=1 actions=output:2 ]) @@ -109818,7 +109906,7 @@ index fb5b9a36d2..dff89aa089 100644 OVS_TRAFFIC_VSWITCHD_STOP AT_CLEANUP -@@ -2695,6 +2967,11 @@ AT_CHECK([ovs-ofctl bundle br0 bundle.txt]) +@@ -2695,6 +3003,11 @@ AT_CHECK([ovs-ofctl bundle br0 bundle.txt]) AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl ]) @@ -109830,7 +109918,7 @@ index fb5b9a36d2..dff89aa089 100644 OVS_TRAFFIC_VSWITCHD_STOP AT_CLEANUP -@@ -3251,6 +3528,46 @@ NS_CHECK_EXEC([at_ns0], [ping6 -s 3200 -q -c 3 -i 0.3 -w 2 fc00::2 | FORMAT_PING +@@ -3251,6 +3564,46 @@ NS_CHECK_EXEC([at_ns0], [ping6 -s 3200 -q -c 3 -i 0.3 -w 2 fc00::2 | FORMAT_PING OVS_TRAFFIC_VSWITCHD_STOP AT_CLEANUP @@ -109877,7 +109965,7 @@ index fb5b9a36d2..dff89aa089 100644 AT_SETUP([conntrack - resubmit to ct multiple times]) CHECK_CONNTRACK() -@@ -3410,15 +3727,15 @@ action=normal +@@ -3410,15 +3763,15 @@ action=normal AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt]) @@ -109896,7 +109984,7 @@ index fb5b9a36d2..dff89aa089 100644 "1616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161610a, actions=ct(table=1)"]) AT_CHECK([ovs-appctl dpctl/dump-flows | head -2 | tail -1 | grep -q -e ["]udp[(]src=5001["]]) -@@ -4433,6 +4750,52 @@ tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src= +@@ -4433,6 +4786,52 @@ tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src= OVS_TRAFFIC_VSWITCHD_STOP AT_CLEANUP @@ -109949,7 +110037,7 @@ index fb5b9a36d2..dff89aa089 100644 AT_SETUP([conntrack - simple DNAT]) CHECK_CONNTRACK() CHECK_CONNTRACK_NAT() -@@ -4488,6 +4851,41 @@ tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src= +@@ -4488,6 +4887,41 @@ tcp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=,dport=),reply=(src= OVS_TRAFFIC_VSWITCHD_STOP AT_CLEANUP @@ -109991,7 +110079,7 @@ index fb5b9a36d2..dff89aa089 100644 AT_SETUP([conntrack - more complex DNAT]) CHECK_CONNTRACK() CHECK_CONNTRACK_NAT() -@@ -5682,7 +6080,7 @@ on_exit 'ovs-appctl revalidator/purge' +@@ -5682,7 +6116,7 @@ on_exit 'ovs-appctl revalidator/purge' on_exit 'ovs-appctl dpif/dump-flows br0' dnl Should work with the virtual IP address through NAT @@ -110000,7 +110088,7 @@ index fb5b9a36d2..dff89aa089 100644 echo Request $i NS_CHECK_EXEC([at_ns1], [wget 10.1.1.64 -t 5 -T 1 --retry-connrefused -v -o wget$i.log]) done -@@ -5971,6 +6369,132 @@ AT_CHECK([ovs-ofctl dump-flows br0 | grep table=2, | OFPROTO_CLEAR_DURATION_IDLE +@@ -5971,6 +6405,132 @@ AT_CHECK([ovs-ofctl dump-flows br0 | grep table=2, | OFPROTO_CLEAR_DURATION_IDLE OVS_TRAFFIC_VSWITCHD_STOP AT_CLEANUP @@ -114352,9 +114440,18 @@ index f007f9c0bc..407bfc60eb 100644 if (should_service_stop()) { exiting = true; diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml -index a2ad84edef..d8ea287d5d 100644 +index a2ad84edef..3c1fda487c 100644 --- a/vswitchd/vswitch.xml +++ b/vswitchd/vswitch.xml +@@ -2271,7 +2271,7 @@ + lowest port-id is elected as the root. + + +- + The port path cost. The Port's contribution, when it is + the Root Port, to the Root Path Cost for the Bridge. By default the @@ -4660,7 +4660,8 @@ ovs-vsctl add-port br0 p0 -- set Interface p0 type=patch options:peer=p1 \ packets per second the CIR would be set to to to 46000000. This value can be broken into '1,000,000 x 46'. Where 1,000,000 is the policing diff --git a/SPECS/openvswitch2.15.spec b/SPECS/openvswitch2.15.spec index bb0ae9b..f637373 100644 --- a/SPECS/openvswitch2.15.spec +++ b/SPECS/openvswitch2.15.spec @@ -57,7 +57,7 @@ Summary: Open vSwitch Group: System Environment/Daemons daemon/database/utilities URL: http://www.openvswitch.org/ Version: 2.15.0 -Release: 126%{?dist} +Release: 127%{?dist} # Nearly all of openvswitch is ASL 2.0. The bugtool is LGPLv2+, and the # lib/sflow*.[ch] files are SISSL @@ -702,6 +702,14 @@ exit 0 %endif %changelog +* Wed Nov 02 2022 Open vSwitch CI - 2.15.0-127 +- Merging upstream branch-2.15 [RH git: 96456c53d4] + Commit list: + bc49ebfbbd netdev-linux: Fix inability to apply QoS on ports with custom qdiscs. (#2138339) + f1ae6e59bf vswitch.xml: Fix the name of rstp-path-cost option. + b5539fe008 bond: Fix crash while logging not yet enabled member. + + * Wed Oct 26 2022 Open vSwitch CI - 2.15.0-126 - Merging upstream branch-2.15 [RH git: 5ee74656ff] Commit list: