From 2a46c786007e94d0712c64fcc891bfbd0b809690 Mon Sep 17 00:00:00 2001 From: Open vSwitch CI Date: Apr 28 2023 22:47:09 +0000 Subject: Import openvswitch2.17-2.17.0-96 from Fast DataPath --- diff --git a/SOURCES/openvswitch-2.17.0.patch b/SOURCES/openvswitch-2.17.0.patch index 38185bf..bcd2de4 100644 --- a/SOURCES/openvswitch-2.17.0.patch +++ b/SOURCES/openvswitch-2.17.0.patch @@ -54314,7 +54314,7 @@ index 94dc6a9b74..303b99daf4 100644 .queue = rss_data->queue, .key_len = 0, diff --git a/lib/netdev-offload-tc.c b/lib/netdev-offload-tc.c -index 9845e8d3fe..6d918aebd6 100644 +index 9845e8d3fe..6fa27d1dda 100644 --- a/lib/netdev-offload-tc.c +++ b/lib/netdev-offload-tc.c @@ -44,6 +44,7 @@ @@ -54452,16 +54452,20 @@ index 9845e8d3fe..6d918aebd6 100644 /* Find ufid entry in ufid_to_tc hashmap using tcf_id id. * The result is saved in ufid. * -@@ -405,7 +470,7 @@ delete_chains_from_netdev(struct netdev *netdev, struct tcf_id *id) +@@ -405,7 +470,11 @@ delete_chains_from_netdev(struct netdev *netdev, struct tcf_id *id) */ HMAP_FOR_EACH_POP (chain_node, node, &map) { id->chain = chain_node->chain; - tc_del_filter(id); -+ tc_del_flower_filter(id); ++ /* Delete empty chain doesn't seem to work with ++ * tc_del_flower_filter() so use tc_del_filter() ++ * without specifying TCA_KIND. ++ */ ++ tc_del_filter(id, NULL); free(chain_node); } } -@@ -417,16 +482,16 @@ delete_chains_from_netdev(struct netdev *netdev, struct tcf_id *id) +@@ -417,16 +486,16 @@ delete_chains_from_netdev(struct netdev *netdev, struct tcf_id *id) static int netdev_tc_flow_flush(struct netdev *netdev) { @@ -54481,7 +54485,7 @@ index 9845e8d3fe..6d918aebd6 100644 if (!err) { del_ufid_tc_mapping_unlocked(&data->ufid); } -@@ -481,10 +546,10 @@ netdev_tc_flow_dump_destroy(struct netdev_flow_dump *dump) +@@ -481,10 +550,10 @@ netdev_tc_flow_dump_destroy(struct netdev_flow_dump *dump) static void parse_flower_rewrite_to_netlink_action(struct ofpbuf *buf, @@ -54495,7 +54499,7 @@ index 9845e8d3fe..6d918aebd6 100644 for (int type = 0; type < ARRAY_SIZE(set_flower_map); type++) { char *put = NULL; -@@ -550,30 +615,42 @@ flower_tun_opt_to_match(struct match *match, struct tc_flower *flower) +@@ -550,30 +619,42 @@ flower_tun_opt_to_match(struct match *match, struct tc_flower *flower) struct geneve_opt *opt, *opt_mask; int len, cnt = 0; @@ -54545,7 +54549,7 @@ index 9845e8d3fe..6d918aebd6 100644 } static void -@@ -585,8 +662,10 @@ parse_tc_flower_to_stats(struct tc_flower *flower, +@@ -585,8 +666,10 @@ parse_tc_flower_to_stats(struct tc_flower *flower, } memset(stats, 0, sizeof *stats); @@ -54558,7 +54562,7 @@ index 9845e8d3fe..6d918aebd6 100644 stats->used = flower->lastused; } -@@ -616,7 +695,8 @@ parse_tc_flower_terse_to_match(struct tc_flower *flower, +@@ -616,7 +699,8 @@ parse_tc_flower_terse_to_match(struct tc_flower *flower, } static int @@ -54568,7 +54572,7 @@ index 9845e8d3fe..6d918aebd6 100644 struct match *match, struct nlattr **actions, struct dpif_flow_stats *stats, -@@ -803,18 +883,24 @@ parse_tc_flower_to_match(struct tc_flower *flower, +@@ -803,18 +887,24 @@ parse_tc_flower_to_match(struct tc_flower *flower, &flower->key.tunnel.ipv6.ipv6_src, &flower->mask.tunnel.ipv6.ipv6_src); } @@ -54598,7 +54602,7 @@ index 9845e8d3fe..6d918aebd6 100644 flower_tun_opt_to_match(match, flower); } } -@@ -877,7 +963,7 @@ parse_tc_flower_to_match(struct tc_flower *flower, +@@ -877,7 +967,7 @@ parse_tc_flower_to_match(struct tc_flower *flower, } break; case TC_ACT_PEDIT: { @@ -54607,7 +54611,7 @@ index 9845e8d3fe..6d918aebd6 100644 } break; case TC_ACT_ENCAP: { -@@ -947,7 +1033,11 @@ parse_tc_flower_to_match(struct tc_flower *flower, +@@ -947,7 +1037,11 @@ parse_tc_flower_to_match(struct tc_flower *flower, ct_offset = nl_msg_start_nested(buf, OVS_ACTION_ATTR_CT); if (action->ct.commit) { @@ -54620,7 +54624,7 @@ index 9845e8d3fe..6d918aebd6 100644 } if (action->ct.zone) { -@@ -965,13 +1055,13 @@ parse_tc_flower_to_match(struct tc_flower *flower, +@@ -965,13 +1059,13 @@ parse_tc_flower_to_match(struct tc_flower *flower, struct { ovs_u128 key; ovs_u128 mask; @@ -54640,7 +54644,7 @@ index 9845e8d3fe..6d918aebd6 100644 } if (action->ct.nat_type) { -@@ -1048,23 +1138,28 @@ netdev_tc_flow_dump_next(struct netdev_flow_dump *dump, +@@ -1048,23 +1142,28 @@ netdev_tc_flow_dump_next(struct netdev_flow_dump *dump, get_tc_qdisc_hook(netdev)); while (nl_dump_next(dump->nl_dump, &nl_flow, rbuffer)) { @@ -54673,7 +54677,7 @@ index 9845e8d3fe..6d918aebd6 100644 match->wc.masks.in_port.odp_port = u32_to_odp(UINT32_MAX); match->flow.in_port.odp_port = dump->port; match_set_recirc_id(match, id.chain); -@@ -1164,7 +1259,12 @@ parse_put_flow_ct_action(struct tc_flower *flower, +@@ -1164,7 +1263,12 @@ parse_put_flow_ct_action(struct tc_flower *flower, NL_ATTR_FOR_EACH_UNSAFE (ct_attr, ct_left, ct, ct_len) { switch (nl_attr_type(ct_attr)) { case OVS_CT_ATTR_COMMIT: { @@ -54687,7 +54691,7 @@ index 9845e8d3fe..6d918aebd6 100644 } break; case OVS_CT_ATTR_ZONE: { -@@ -1194,15 +1294,20 @@ parse_put_flow_ct_action(struct tc_flower *flower, +@@ -1194,15 +1298,20 @@ parse_put_flow_ct_action(struct tc_flower *flower, break; case OVS_CT_ATTR_LABELS: { const struct { @@ -54712,7 +54716,7 @@ index 9845e8d3fe..6d918aebd6 100644 } } -@@ -1222,8 +1327,8 @@ parse_put_flow_set_masked_action(struct tc_flower *flower, +@@ -1222,8 +1331,8 @@ parse_put_flow_set_masked_action(struct tc_flower *flower, uint64_t set_stub[1024 / 8]; struct ofpbuf set_buf = OFPBUF_STUB_INITIALIZER(set_stub); char *set_data, *set_mask; @@ -54723,7 +54727,7 @@ index 9845e8d3fe..6d918aebd6 100644 const struct nlattr *attr; int i, j, type; size_t size; -@@ -1265,14 +1370,6 @@ parse_put_flow_set_masked_action(struct tc_flower *flower, +@@ -1265,14 +1374,6 @@ parse_put_flow_set_masked_action(struct tc_flower *flower, } } @@ -54738,7 +54742,7 @@ index 9845e8d3fe..6d918aebd6 100644 if (hasmask && !is_all_zeros(set_mask, size)) { VLOG_DBG_RL(&rl, "unsupported sub attribute of set action type %d", type); -@@ -1281,6 +1378,8 @@ parse_put_flow_set_masked_action(struct tc_flower *flower, +@@ -1281,6 +1382,8 @@ parse_put_flow_set_masked_action(struct tc_flower *flower, } ofpbuf_uninit(&set_buf); @@ -54747,7 +54751,7 @@ index 9845e8d3fe..6d918aebd6 100644 return 0; } -@@ -1288,6 +1387,7 @@ static int +@@ -1288,6 +1391,7 @@ static int parse_put_flow_set_action(struct tc_flower *flower, struct tc_action *action, const struct nlattr *set, size_t set_len) { @@ -54755,7 +54759,7 @@ index 9845e8d3fe..6d918aebd6 100644 const struct nlattr *tunnel; const struct nlattr *tun_attr; size_t tun_left, tunnel_len; -@@ -1306,6 +1406,7 @@ parse_put_flow_set_action(struct tc_flower *flower, struct tc_action *action, +@@ -1306,6 +1410,7 @@ parse_put_flow_set_action(struct tc_flower *flower, struct tc_action *action, action->type = TC_ACT_ENCAP; action->encap.id_present = false; @@ -54763,7 +54767,7 @@ index 9845e8d3fe..6d918aebd6 100644 flower->action_count++; NL_ATTR_FOR_EACH_UNSAFE(tun_attr, tun_left, tunnel, tunnel_len) { switch (nl_attr_type(tun_attr)) { -@@ -1330,6 +1431,18 @@ parse_put_flow_set_action(struct tc_flower *flower, struct tc_action *action, +@@ -1330,6 +1435,18 @@ parse_put_flow_set_action(struct tc_flower *flower, struct tc_action *action, action->encap.ttl = nl_attr_get_u8(tun_attr); } break; @@ -54782,7 +54786,7 @@ index 9845e8d3fe..6d918aebd6 100644 case OVS_TUNNEL_KEY_ATTR_IPV6_SRC: { action->encap.ipv6.ipv6_src = nl_attr_get_in6_addr(tun_attr); -@@ -1354,12 +1467,31 @@ parse_put_flow_set_action(struct tc_flower *flower, struct tc_action *action, +@@ -1354,12 +1471,31 @@ parse_put_flow_set_action(struct tc_flower *flower, struct tc_action *action, action->encap.data.present.len = nl_attr_get_size(tun_attr); } break; @@ -54814,7 +54818,7 @@ index 9845e8d3fe..6d918aebd6 100644 static int test_key_and_mask(struct match *match) { -@@ -1442,8 +1574,23 @@ test_key_and_mask(struct match *match) +@@ -1442,8 +1578,23 @@ test_key_and_mask(struct match *match) return EOPNOTSUPP; } @@ -54839,7 +54843,7 @@ index 9845e8d3fe..6d918aebd6 100644 return EOPNOTSUPP; } -@@ -1452,18 +1599,51 @@ test_key_and_mask(struct match *match) +@@ -1452,18 +1603,51 @@ test_key_and_mask(struct match *match) static void flower_match_to_tun_opt(struct tc_flower *flower, const struct flow_tnl *tnl, @@ -54894,7 +54898,7 @@ index 9845e8d3fe..6d918aebd6 100644 len = flower->key.tunnel.metadata.present.len; while (len) { opt = &flower->key.tunnel.metadata.opts.gnv[cnt]; -@@ -1474,8 +1654,6 @@ flower_match_to_tun_opt(struct tc_flower *flower, const struct flow_tnl *tnl, +@@ -1474,8 +1658,6 @@ flower_match_to_tun_opt(struct tc_flower *flower, const struct flow_tnl *tnl, cnt += sizeof(struct geneve_opt) / 4 + opt->length; len -= sizeof(struct geneve_opt) + opt->length * 4; } @@ -54903,7 +54907,7 @@ index 9845e8d3fe..6d918aebd6 100644 } static void -@@ -1541,6 +1719,12 @@ parse_match_ct_state_to_flower(struct tc_flower *flower, struct match *match) +@@ -1541,6 +1723,12 @@ parse_match_ct_state_to_flower(struct tc_flower *flower, struct match *match) flower->key.ct_state &= ~(TCA_FLOWER_KEY_CT_FLAGS_NEW); flower->mask.ct_state &= ~(TCA_FLOWER_KEY_CT_FLAGS_NEW); } @@ -54916,7 +54920,7 @@ index 9845e8d3fe..6d918aebd6 100644 } if (mask->ct_zone) { -@@ -1574,7 +1758,8 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match, +@@ -1574,7 +1762,8 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match, const struct flow *key = &match->flow; struct flow *mask = &match->wc.masks; const struct flow_tnl *tnl = &match->flow.tunnel; @@ -54926,7 +54930,7 @@ index 9845e8d3fe..6d918aebd6 100644 struct tc_action *action; bool recirc_act = false; uint32_t block_id = 0; -@@ -1615,17 +1800,49 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match, +@@ -1615,17 +1804,49 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match, flower.key.tunnel.ttl = tnl->ip_ttl; flower.key.tunnel.tp_src = tnl->tp_src; flower.key.tunnel.tp_dst = tnl->tp_dst; @@ -54978,7 +54982,7 @@ index 9845e8d3fe..6d918aebd6 100644 flower.key.eth_type = key->dl_type; flower.mask.eth_type = mask->dl_type; -@@ -1638,7 +1855,7 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match, +@@ -1638,7 +1859,7 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match, if (mask->vlans[0].tpid && eth_type_vlan(key->vlans[0].tpid)) { flower.key.encap_eth_type[0] = flower.key.eth_type; @@ -54987,7 +54991,7 @@ index 9845e8d3fe..6d918aebd6 100644 flower.key.eth_type = key->vlans[0].tpid; flower.mask.eth_type = mask->vlans[0].tpid; } -@@ -1734,7 +1951,7 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match, +@@ -1734,7 +1955,7 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match, memset(&mask->arp_tha, 0, sizeof mask->arp_tha); } @@ -54996,7 +55000,7 @@ index 9845e8d3fe..6d918aebd6 100644 flower.key.ip_proto = key->nw_proto; flower.mask.ip_proto = mask->nw_proto; mask->nw_proto = 0; -@@ -1841,7 +2058,25 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match, +@@ -1841,7 +2062,25 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match, VLOG_DBG_RL(&rl, "Can't find netdev for output port %d", port); return ENODEV; } @@ -55022,7 +55026,7 @@ index 9845e8d3fe..6d918aebd6 100644 action->out.ingress = is_internal_port(netdev_get_type(outdev)); action->type = TC_ACT_OUTPUT; flower.action_count++; -@@ -1879,10 +2114,6 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match, +@@ -1879,10 +2118,6 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match, if (err) { return err; } @@ -55033,7 +55037,7 @@ index 9845e8d3fe..6d918aebd6 100644 } else if (nl_attr_type(nla) == OVS_ACTION_ATTR_SET_MASKED) { const struct nlattr *set = nl_attr_get(nla); const size_t set_len = nl_attr_get_size(nla); -@@ -1929,10 +2160,12 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match, +@@ -1929,10 +2164,12 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match, return EOPNOTSUPP; } @@ -55047,7 +55051,7 @@ index 9845e8d3fe..6d918aebd6 100644 } prio = get_prio_for_tc_flower(&flower); -@@ -1950,8 +2183,9 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match, +@@ -1950,8 +2187,9 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match, if (!err) { if (stats) { memset(stats, 0, sizeof *stats); @@ -55058,7 +55062,7 @@ index 9845e8d3fe..6d918aebd6 100644 } return err; -@@ -1989,8 +2223,16 @@ netdev_tc_flow_get(struct netdev *netdev, +@@ -1989,8 +2227,16 @@ netdev_tc_flow_get(struct netdev *netdev, } in_port = netdev_ifindex_to_odp_port(id.ifindex); @@ -55076,7 +55080,7 @@ index 9845e8d3fe..6d918aebd6 100644 match->wc.masks.in_port.odp_port = u32_to_odp(UINT32_MAX); match->flow.in_port.odp_port = in_port; match_set_recirc_id(match, id.chain); -@@ -2003,7 +2245,6 @@ netdev_tc_flow_del(struct netdev *netdev OVS_UNUSED, +@@ -2003,7 +2249,6 @@ netdev_tc_flow_del(struct netdev *netdev OVS_UNUSED, const ovs_u128 *ufid, struct dpif_flow_stats *stats) { @@ -55084,7 +55088,7 @@ index 9845e8d3fe..6d918aebd6 100644 struct tcf_id id; int error; -@@ -2012,18 +2253,7 @@ netdev_tc_flow_del(struct netdev *netdev OVS_UNUSED, +@@ -2012,18 +2257,7 @@ netdev_tc_flow_del(struct netdev *netdev OVS_UNUSED, return error; } @@ -55104,7 +55108,7 @@ index 9845e8d3fe..6d918aebd6 100644 } static int -@@ -2077,13 +2307,13 @@ probe_multi_mask_per_prio(int ifindex) +@@ -2077,13 +2311,13 @@ probe_multi_mask_per_prio(int ifindex) id2 = tc_make_tcf_id(ifindex, block_id, prio, TC_INGRESS); error = tc_replace_flower(&id2, &flower); @@ -55120,7 +55124,7 @@ index 9845e8d3fe..6d918aebd6 100644 multi_mask_per_prio = true; VLOG_INFO("probe tc: multiple masks on single tc prio is supported."); -@@ -2135,7 +2365,7 @@ probe_ct_state_support(int ifindex) +@@ -2135,7 +2369,7 @@ probe_ct_state_support(int ifindex) goto out_del; } @@ -55129,7 +55133,7 @@ index 9845e8d3fe..6d918aebd6 100644 ct_state_support = OVS_CS_F_NEW | OVS_CS_F_ESTABLISHED | OVS_CS_F_TRACKED | -@@ -2149,7 +2379,7 @@ probe_ct_state_support(int ifindex) +@@ -2149,7 +2383,7 @@ probe_ct_state_support(int ifindex) goto out_del; } @@ -55138,7 +55142,7 @@ index 9845e8d3fe..6d918aebd6 100644 /* Test for ct_state INVALID support */ memset(&flower, 0, sizeof flower); -@@ -2160,7 +2390,7 @@ probe_ct_state_support(int ifindex) +@@ -2160,7 +2394,7 @@ probe_ct_state_support(int ifindex) goto out; } @@ -55147,7 +55151,7 @@ index 9845e8d3fe..6d918aebd6 100644 ct_state_support |= OVS_CS_F_INVALID; /* Test for ct_state REPLY support */ -@@ -2176,7 +2406,7 @@ probe_ct_state_support(int ifindex) +@@ -2176,7 +2410,7 @@ probe_ct_state_support(int ifindex) ct_state_support |= OVS_CS_F_REPLY_DIR; out_del: @@ -55156,7 +55160,7 @@ index 9845e8d3fe..6d918aebd6 100644 out: tc_add_del_qdisc(ifindex, false, 0, TC_INGRESS); VLOG_INFO("probe tc: supported ovs ct_state bits: 0x%x", ct_state_support); -@@ -2251,7 +2481,7 @@ netdev_tc_init_flow_api(struct netdev *netdev) +@@ -2251,7 +2485,7 @@ netdev_tc_init_flow_api(struct netdev *netdev) /* fallback here if delete chains fail */ if (!get_chain_supported) { @@ -55165,6 +55169,18 @@ index 9845e8d3fe..6d918aebd6 100644 } /* make sure there is no ingress/egress qdisc */ +@@ -2270,8 +2504,9 @@ netdev_tc_init_flow_api(struct netdev *netdev) + error = tc_add_del_qdisc(ifindex, true, block_id, hook); + + if (error && error != EEXIST) { +- VLOG_INFO("failed adding ingress qdisc required for offloading: %s", +- ovs_strerror(error)); ++ VLOG_INFO("failed adding ingress qdisc required for offloading " ++ "on %s: %s", ++ netdev_get_name(netdev), ovs_strerror(error)); + return error; + } + diff --git a/lib/netdev-offload.c b/lib/netdev-offload.c index fb108c0d50..eea8fadc0e 100644 --- a/lib/netdev-offload.c @@ -57185,7 +57201,7 @@ index fcaddf10ad..71039e24f1 100644 /* Attempts to guess the content type of a stream whose first few bytes were diff --git a/lib/tc.c b/lib/tc.c -index adb2d3182a..7298ce6901 100644 +index adb2d3182a..7242ea5e2f 100644 --- a/lib/tc.c +++ b/lib/tc.c @@ -84,6 +84,11 @@ struct flower_key_to_pedit { @@ -57612,7 +57628,7 @@ index adb2d3182a..7298ce6901 100644 } #define TCA_ACT_MIN_PRIO 1 -@@ -1964,14 +2070,21 @@ tc_dump_tc_chain_start(struct tcf_id *id, struct nl_dump *dump) +@@ -1964,14 +2070,23 @@ tc_dump_tc_chain_start(struct tcf_id *id, struct nl_dump *dump) } int @@ -57622,7 +57638,9 @@ index adb2d3182a..7298ce6901 100644 struct ofpbuf request; request_from_tcf_id(id, 0, RTM_DELTFILTER, NLM_F_ACK, &request); -+ nl_msg_put_string(&request, TCA_KIND, kind); ++ if (kind) { ++ nl_msg_put_string(&request, TCA_KIND, kind); ++ } return tc_transact(&request, NULL); } @@ -57635,7 +57653,7 @@ index adb2d3182a..7298ce6901 100644 int tc_get_flower(struct tcf_id *id, struct tc_flower *flower) { -@@ -1980,6 +2093,7 @@ tc_get_flower(struct tcf_id *id, struct tc_flower *flower) +@@ -1980,6 +2095,7 @@ tc_get_flower(struct tcf_id *id, struct tc_flower *flower) int error; request_from_tcf_id(id, 0, RTM_GETTFILTER, NLM_F_ECHO, &request); @@ -57643,7 +57661,7 @@ index adb2d3182a..7298ce6901 100644 error = tc_transact(&request, &reply); if (error) { return error; -@@ -2399,14 +2513,14 @@ nl_msg_put_act_flags(struct ofpbuf *request) { +@@ -2399,14 +2515,14 @@ nl_msg_put_act_flags(struct ofpbuf *request) { * first_word_mask/last_word_mask - the mask to use for the first/last read * (as we read entire words). */ static void @@ -57661,7 +57679,7 @@ index adb2d3182a..7298ce6901 100644 max_offset = m->offset + m->size; start_offset = ROUND_DOWN(m->offset, 4); -@@ -2473,7 +2587,8 @@ csum_update_flag(struct tc_flower *flower, +@@ -2473,7 +2589,8 @@ csum_update_flag(struct tc_flower *flower, static int nl_msg_put_flower_rewrite_pedits(struct ofpbuf *request, @@ -57671,7 +57689,7 @@ index adb2d3182a..7298ce6901 100644 { struct { struct tc_pedit sel; -@@ -2497,12 +2612,12 @@ nl_msg_put_flower_rewrite_pedits(struct ofpbuf *request, +@@ -2497,12 +2614,12 @@ nl_msg_put_flower_rewrite_pedits(struct ofpbuf *request, continue; } @@ -57687,7 +57705,7 @@ index adb2d3182a..7298ce6901 100644 if (j == 0) { mask_word &= first_word_mask; -@@ -2556,6 +2671,29 @@ nl_msg_put_flower_acts_release(struct ofpbuf *request, uint16_t act_index) +@@ -2556,6 +2673,29 @@ nl_msg_put_flower_acts_release(struct ofpbuf *request, uint16_t act_index) nl_msg_end_nested(request, act_offset); } @@ -57717,7 +57735,7 @@ index adb2d3182a..7298ce6901 100644 static int nl_msg_put_flower_acts(struct ofpbuf *request, struct tc_flower *flower) { -@@ -2572,20 +2710,22 @@ nl_msg_put_flower_acts(struct ofpbuf *request, struct tc_flower *flower) +@@ -2572,20 +2712,22 @@ nl_msg_put_flower_acts(struct ofpbuf *request, struct tc_flower *flower) action = flower->actions; for (i = 0; i < flower->action_count; i++, action++) { @@ -57746,7 +57764,7 @@ index adb2d3182a..7298ce6901 100644 } } break; -@@ -2792,13 +2932,16 @@ nl_msg_put_flower_tunnel(struct ofpbuf *request, struct tc_flower *flower) +@@ -2792,13 +2934,16 @@ nl_msg_put_flower_tunnel(struct ofpbuf *request, struct tc_flower *flower) struct in6_addr *ipv6_dst_mask = &flower->mask.tunnel.ipv6.ipv6_dst; struct in6_addr *ipv6_src = &flower->key.tunnel.ipv6.ipv6_src; struct in6_addr *ipv6_dst = &flower->key.tunnel.ipv6.ipv6_dst; @@ -57764,7 +57782,7 @@ index adb2d3182a..7298ce6901 100644 if (ipv4_dst_mask || ipv4_src_mask) { nl_msg_put_be32(request, TCA_FLOWER_KEY_ENC_IPV4_DST_MASK, -@@ -2824,8 +2967,15 @@ nl_msg_put_flower_tunnel(struct ofpbuf *request, struct tc_flower *flower) +@@ -2824,8 +2969,15 @@ nl_msg_put_flower_tunnel(struct ofpbuf *request, struct tc_flower *flower) nl_msg_put_u8(request, TCA_FLOWER_KEY_ENC_IP_TTL, ttl); nl_msg_put_u8(request, TCA_FLOWER_KEY_ENC_IP_TTL_MASK, ttl_mask); } @@ -57781,7 +57799,7 @@ index adb2d3182a..7298ce6901 100644 } if (id_mask) { nl_msg_put_be32(request, TCA_FLOWER_KEY_ENC_KEY_ID, id); -@@ -2914,13 +3064,13 @@ nl_msg_put_flower_options(struct ofpbuf *request, struct tc_flower *flower) +@@ -2914,13 +3066,13 @@ nl_msg_put_flower_options(struct ofpbuf *request, struct tc_flower *flower) FLOWER_PUT_MASKED_VALUE(icmp_code, TCA_FLOWER_KEY_ICMPV6_CODE); FLOWER_PUT_MASKED_VALUE(icmp_type, TCA_FLOWER_KEY_ICMPV6_TYPE); } @@ -57800,7 +57818,7 @@ index adb2d3182a..7298ce6901 100644 if (host_eth_type == ETH_P_IP) { FLOWER_PUT_MASKED_VALUE(ipv4.ipv4_src, TCA_FLOWER_KEY_IPV4_SRC); FLOWER_PUT_MASKED_VALUE(ipv4.ipv4_dst, TCA_FLOWER_KEY_IPV4_DST); -@@ -2993,12 +3143,79 @@ nl_msg_put_flower_options(struct ofpbuf *request, struct tc_flower *flower) +@@ -2993,12 +3145,79 @@ nl_msg_put_flower_options(struct ofpbuf *request, struct tc_flower *flower) return 0; } @@ -57881,7 +57899,7 @@ index adb2d3182a..7298ce6901 100644 return false; } -@@ -3011,8 +3228,8 @@ cmp_tc_flower_match_action(const struct tc_flower *a, +@@ -3011,8 +3230,8 @@ cmp_tc_flower_match_action(const struct tc_flower *a, uint8_t key_b = ((uint8_t *)&b->key)[i] & mask; if (key_a != key_b) { @@ -57892,7 +57910,7 @@ index adb2d3182a..7298ce6901 100644 return false; } } -@@ -3022,14 +3239,15 @@ cmp_tc_flower_match_action(const struct tc_flower *a, +@@ -3022,14 +3241,15 @@ cmp_tc_flower_match_action(const struct tc_flower *a, const struct tc_action *action_b = b->actions; if (a->action_count != b->action_count) { diff --git a/SPECS/openvswitch2.17.spec b/SPECS/openvswitch2.17.spec index 9744695..315fbfc 100644 --- a/SPECS/openvswitch2.17.spec +++ b/SPECS/openvswitch2.17.spec @@ -63,7 +63,7 @@ Summary: Open vSwitch Group: System Environment/Daemons daemon/database/utilities URL: http://www.openvswitch.org/ Version: 2.17.0 -Release: 95%{?dist} +Release: 96%{?dist} # Nearly all of openvswitch is ASL 2.0. The bugtool is LGPLv2+, and the # lib/sflow*.[ch] files are SISSL @@ -749,6 +749,12 @@ exit 0 %endif %changelog +* Fri Apr 28 2023 Open vSwitch CI - 2.17.0-96 +- Merging upstream branch-2.17 [RH git: 9de5592f0a] + Commit list: + 8eb24943cf tc: Fix cleaning chains. + + * Thu Apr 27 2023 Open vSwitch CI - 2.17.0-95 - Merging upstream branch-2.17 [RH git: 4363c42c50] Commit list: