From 18c2af7ea3cceb4b9640e76b0ab1fd1f5cc43d0d Mon Sep 17 00:00:00 2001 From: Open vSwitch CI Date: Nov 24 2022 21:00:48 +0000 Subject: Import openvswitch2.13-2.13.0-209 from Fast DataPath --- diff --git a/SOURCES/openvswitch-2.13.0.patch b/SOURCES/openvswitch-2.13.0.patch index 01d1f74..6655281 100644 --- a/SOURCES/openvswitch-2.13.0.patch +++ b/SOURCES/openvswitch-2.13.0.patch @@ -116377,6 +116377,80 @@ index a44114e8dc..d75d66b863 100644 const char *jsonrpc_session_get_id(const struct jsonrpc_session *); #endif /* jsonrpc.h */ +diff --git a/lib/learn.c b/lib/learn.c +index a40209ec0b..a62add2fda 100644 +--- a/lib/learn.c ++++ b/lib/learn.c +@@ -241,7 +241,7 @@ static char * OVS_WARN_UNUSED_RESULT + learn_parse_spec(const char *orig, char *name, char *value, + const struct ofputil_port_map *port_map, + struct ofpact_learn_spec *spec, +- struct ofpbuf *ofpacts, struct match *match) ++ struct ofpbuf *ofpacts) + { + /* Parse destination and check prerequisites. */ + struct mf_subfield dst; +@@ -275,14 +275,14 @@ learn_parse_spec(const char *orig, char *name, char *value, + } else { + char *tail; + /* Partial field value. */ +- if (parse_int_string(value, (uint8_t *)&imm, ++ if (parse_int_string(value, imm.b, + dst.field->n_bytes, &tail) + || *tail != 0) { + imm_error = xasprintf("%s: cannot parse integer value", orig); + } + + if (!imm_error && +- !bitwise_is_all_zeros(&imm, dst.field->n_bytes, ++ !bitwise_is_all_zeros(imm.b, dst.field->n_bytes, + dst.n_bits, + dst.field->n_bytes * 8 - dst.n_bits)) { + struct ds ds; +@@ -304,15 +304,13 @@ learn_parse_spec(const char *orig, char *name, char *value, + + spec->src_type = NX_LEARN_SRC_IMMEDIATE; + +- /* Update 'match' to allow for satisfying destination +- * prerequisites. */ +- mf_write_subfield_value(&dst, &imm, match); +- + /* Push value last, as this may reallocate 'spec'! */ + unsigned int imm_bytes = DIV_ROUND_UP(dst.n_bits, 8); + uint8_t *src_imm = ofpbuf_put_zeros(ofpacts, + OFPACT_ALIGN(imm_bytes)); +- memcpy(src_imm, &imm, imm_bytes); ++ ++ memcpy(src_imm, &imm.b[dst.field->n_bytes - imm_bytes], ++ imm_bytes); + + free(error); + return NULL; +@@ -391,7 +389,6 @@ learn_parse__(char *orig, char *arg, const struct ofputil_port_map *port_map, + struct ofpbuf *ofpacts) + { + struct ofpact_learn *learn; +- struct match match; + char *name, *value; + + learn = ofpact_put_LEARN(ofpacts); +@@ -400,7 +397,6 @@ learn_parse__(char *orig, char *arg, const struct ofputil_port_map *port_map, + learn->priority = OFP_DEFAULT_PRIORITY; + learn->table_id = 1; + +- match_init_catchall(&match); + while (ofputil_parse_key_value(&arg, &name, &value)) { + if (!strcmp(name, "table")) { + if (!ofputil_table_from_string(value, table_map, +@@ -448,7 +444,7 @@ learn_parse__(char *orig, char *arg, const struct ofputil_port_map *port_map, + + spec = ofpbuf_put_zeros(ofpacts, sizeof *spec); + error = learn_parse_spec(orig, name, value, port_map, +- spec, ofpacts, &match); ++ spec, ofpacts); + if (error) { + return error; + } diff --git a/lib/libopenvswitch.pc.in b/lib/libopenvswitch.pc.in index 2a3f2ca7bc..44fbb1f9fd 100644 --- a/lib/libopenvswitch.pc.in @@ -119883,7 +119957,7 @@ index b990ed9d59..0d3290dc37 100644 cursor.entry_idx = -1; diff --git a/lib/rculist.h b/lib/rculist.h -index 1072b87af2..c0d77acf94 100644 +index 1072b87af2..9bb8cbf3eb 100644 --- a/lib/rculist.h +++ b/lib/rculist.h @@ -365,35 +365,57 @@ rculist_is_singleton_protected(const struct rculist *list) @@ -119935,18 +120009,18 @@ index 1072b87af2..c0d77acf94 100644 +#define RCULIST_FOR_EACH_REVERSE_PROTECTED(ITER, MEMBER, RCULIST) \ + for (INIT_MULTIVAR(ITER, MEMBER, (RCULIST)->prev, struct rculist); \ + CONDITION_MULTIVAR(ITER, MEMBER, ITER_VAR(ITER) != (RCULIST)); \ -+ UPDATE_MULTIVAR(ITER, ITER_VAR(VAR).prev)) ++ UPDATE_MULTIVAR(ITER, ITER_VAR(ITER)->prev)) + +#define RCULIST_FOR_EACH_REVERSE_PROTECTED_CONTINUE(ITER, MEMBER, RCULIST) \ + for (INIT_MULTIVAR(ITER, MEMBER, (ITER)->MEMBER.prev, struct rculist); \ + CONDITION_MULTIVAR(ITER, MEMBER, ITER_VAR(ITER) != (RCULIST)); \ -+ UPDATE_MULTIVAR(ITER, ITER_VAR(VAR).prev)) ++ UPDATE_MULTIVAR(ITER, ITER_VAR(ITER)->prev)) + +#define RCULIST_FOR_EACH_PROTECTED(ITER, MEMBER, RCULIST) \ + for (INIT_MULTIVAR(ITER, MEMBER, rculist_next_protected(RCULIST), \ + struct rculist); \ + CONDITION_MULTIVAR(ITER, MEMBER, ITER_VAR(ITER) != (RCULIST)); \ -+ UPDATE_MULTIVAR(ITER, rculist_next_protected(ITER_VAR(ITER))) \ ++ UPDATE_MULTIVAR(ITER, rculist_next_protected(ITER_VAR(ITER)))) \ + +#define RCULIST_FOR_EACH_SAFE_SHORT_PROTECTED(ITER, MEMBER, RCULIST) \ + for (INIT_MULTIVAR_SAFE_SHORT(ITER, MEMBER, \ @@ -119954,18 +120028,18 @@ index 1072b87af2..c0d77acf94 100644 + struct rculist); \ + CONDITION_MULTIVAR_SAFE_SHORT(ITER, MEMBER, \ + ITER_VAR(ITER) != (RCULIST), \ -+ ITER_NEXT_VAR(ITER) = rculist_next_protected(ITER_VAR(VAR))); \ -+ UPDATE_MULTIVAR_SHORT(ITER)) ++ ITER_NEXT_VAR(ITER) = rculist_next_protected(ITER_VAR(ITER))); \ ++ UPDATE_MULTIVAR_SAFE_SHORT(ITER)) + +#define RCULIST_FOR_EACH_SAFE_LONG_PROTECTED(ITER, NEXT, MEMBER, RCULIST) \ + for (INIT_MULTIVAR_SAFE_LONG(ITER, NEXT, MEMBER, \ -+ rculist_next_protected(RCULIST) \ ++ rculist_next_protected(RCULIST), \ + struct rculist); \ -+ CONDITION_MULTIVAR_SAFE_LONG(VAR, NEXT, MEMBER \ ++ CONDITION_MULTIVAR_SAFE_LONG(ITER, NEXT, MEMBER, \ + ITER_VAR(ITER) != (RCULIST), \ -+ ITER_VAR(NEXT) = rculist_next_protected(ITER_VAR(VAR)), \ ++ ITER_VAR(NEXT) = rculist_next_protected(ITER_VAR(ITER)), \ + ITER_VAR(NEXT) != (RCULIST)); \ -+ UPDATE_MULTIVAR_LONG(ITER)) ++ UPDATE_MULTIVAR_SAFE_LONG(ITER, NEXT)) + +#define RCULIST_FOR_EACH_SAFE_PROTECTED(...) \ + OVERLOAD_SAFE_MACRO(RCULIST_FOR_EACH_SAFE_LONG_PROTECTED, \ @@ -125628,6 +125702,28 @@ index bee79fc50f..3ddb612b0c 100644 "singleton" : { "columns" : { "name" : { +diff --git a/tests/learn.at b/tests/learn.at +index 5f1d6df9de..d127fed348 100644 +--- a/tests/learn.at ++++ b/tests/learn.at +@@ -6,7 +6,7 @@ actions=learn() + actions=learn(send_flow_rem) + actions=learn(delete_learned) + actions=learn(send_flow_rem,delete_learned) +-actions=learn(NXM_OF_VLAN_TCI[0..11], NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[], output:NXM_OF_IN_PORT[], load:10->NXM_NX_REG0[5..10]) ++actions=learn(NXM_OF_VLAN_TCI[0..11], NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[], NXM_NX_REG3[3..19]=0x10011, output:NXM_OF_IN_PORT[], load:10->NXM_NX_REG0[5..10]) + actions=learn(table=1,idle_timeout=10, hard_timeout=20, fin_idle_timeout=5, fin_hard_timeout=10, priority=10, cookie=0xfedcba9876543210, in_port=99,eth_dst=eth_src,load:in_port->reg1[16..31]) + actions=learn(limit=4096) + actions=learn(limit=4096,result_dst=reg0[0]) +@@ -18,7 +18,7 @@ OFPT_FLOW_MOD (xid=0x1): ADD actions=learn(table=1) + OFPT_FLOW_MOD (xid=0x2): ADD actions=learn(table=1,send_flow_rem) + OFPT_FLOW_MOD (xid=0x3): ADD actions=learn(table=1,delete_learned) + OFPT_FLOW_MOD (xid=0x4): ADD actions=learn(table=1,send_flow_rem,delete_learned) +-OFPT_FLOW_MOD (xid=0x5): ADD actions=learn(table=1,NXM_OF_VLAN_TCI[0..11],NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[],output:NXM_OF_IN_PORT[],load:0xa->NXM_NX_REG0[5..10]) ++OFPT_FLOW_MOD (xid=0x5): ADD actions=learn(table=1,NXM_OF_VLAN_TCI[0..11],NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[],NXM_NX_REG3[3..19]=0x10011,output:NXM_OF_IN_PORT[],load:0xa->NXM_NX_REG0[5..10]) + OFPT_FLOW_MOD (xid=0x6): ADD actions=learn(table=1,idle_timeout=10,hard_timeout=20,fin_idle_timeout=5,fin_hard_timeout=10,priority=10,cookie=0xfedcba9876543210,in_port=99,NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[],load:NXM_OF_IN_PORT[]->NXM_NX_REG1[16..31]) + OFPT_FLOW_MOD (xid=0x7): ADD actions=learn(table=1,limit=4096) + OFPT_FLOW_MOD (xid=0x8): ADD actions=learn(table=1,limit=4096,result_dst=NXM_NX_REG0[0]) diff --git a/tests/library.at b/tests/library.at index ac4ea4abf2..e27d9e8bce 100644 --- a/tests/library.at diff --git a/SPECS/openvswitch2.13.spec b/SPECS/openvswitch2.13.spec index 6a7d919..bccac16 100644 --- a/SPECS/openvswitch2.13.spec +++ b/SPECS/openvswitch2.13.spec @@ -59,7 +59,7 @@ Summary: Open vSwitch Group: System Environment/Daemons daemon/database/utilities URL: http://www.openvswitch.org/ Version: 2.13.0 -Release: 208%{?commit0:.%{date}git%{shortcommit0}}%{?commit1:dpdk%{shortcommit1}}%{?dist} +Release: 209%{?commit0:.%{date}git%{shortcommit0}}%{?commit1:dpdk%{shortcommit1}}%{?dist} # Nearly all of openvswitch is ASL 2.0. The bugtool is LGPLv2+, and the # lib/sflow*.[ch] files are SISSL @@ -715,6 +715,13 @@ exit 0 %endif %changelog +* Thu Nov 24 2022 Open vSwitch CI - 2.13.0-209 +- Merging upstream branch-2.13 [RH git: 1f57897476] + Commit list: + d169aab341 rculist: Fix iteration macros. + 4de22044bb learn: Fix parsing immediate value for a field match. + + * Wed Nov 02 2022 Open vSwitch CI - 2.13.0-208 - Merging upstream branch-2.13 [RH git: 3825d327a7] Commit list: