This series completes the implementation of OpenFlow 1.4 bundles for flow mods. Port mods are not yet supported.
OpenFlow 1.4 specifies support for 'bundles' which allow arbitrary collections of flow table modifications to be executed as a single transaction. Supporting this in OVS requres major refactoring of our 'ofproto' code implemenenting flow mods. Patches 1-3 are minor fixes. Patches 4-16 add the basic implementation of non-atomic bundles. This adds a behavioral change in the ofproto-provider interface, where rule_insert() may be called for a rule that is a duplicate of a rule that has already been inserted. In this case the old rule will be deleted shortly after the insertion. Patches 17-19 add the implementation of the atomic bundles, and also make ALL flow table modifications atomic to the threads performing classifier lookups. As different lookups threads may start executing at different tables versions, we must (briefly) keep both old and new versions of flow table rules visible (to different) lookup threads at the same time. This requires more substantial changes to the ofproto-provider interface. It is yet to be determined if we ned to add some logic to handle cases where specific ofproto-provider implementations (e.g., switching hardware) can not support atomic transactions. Jarno Rajahalme (19): ofproto: Eliminate use of unset error code. ofp-parse: Remove unused F_OUT_PORT field flag. ofp-util: Fix xid in ofputil_encode_bundle_add(). classifier: Add support for invisible flows. classifier: Support duplicate rules. bundles: Validate bundled messages. bundles: Manage bundles in connmgr. ofproto: Factor out ofproto_rule_insert__(). ofproto: Factor out ofproto_rule_create(). ofproto: Use enum ofperr for 'error'. ofproto: Refactor modify_flows__(). ofproto: Split add_flow(). ofproto: Split modify_flows(). ofproto: Split delete_flow*(). ofproto: Add support for reverting flow mods, and bundle commit. ovs-ofctl: Add 'bundle' command and unit testing. classifier: Support table versioning ofproto: Infra for table versioning. Use classifier versioning. NEWS | 15 +- include/openvswitch/vconn.h | 6 +- lib/classifier-private.h | 31 +- lib/classifier.c | 327 ++++++++---- lib/classifier.h | 13 +- lib/ofp-parse.c | 102 +++- lib/ofp-parse.h | 12 +- lib/ofp-print.c | 4 +- lib/ofp-util.c | 44 +- lib/ofp-util.h | 9 +- lib/ovs-router.c | 2 +- lib/tnl-ports.c | 9 +- lib/vconn.c | 27 +- ofproto/bundles.c | 176 ++---- ofproto/bundles.h | 72 ++- ofproto/connmgr.c | 51 +- ofproto/connmgr.h | 6 +- ofproto/ofproto-dpif-xlate.c | 17 +- ofproto/ofproto-dpif.c | 128 +++-- ofproto/ofproto-dpif.h | 5 +- ofproto/ofproto-provider.h | 65 +-- ofproto/ofproto.c | 1207 ++++++++++++++++++++++++++++++------------ tests/ofproto.at | 176 ++++-- tests/test-classifier.c | 13 +- utilities/ovs-ofctl.8.in | 32 ++ utilities/ovs-ofctl.c | 222 +++++++- 26 files changed, 2031 insertions(+), 740 deletions(-) -- 1.7.10.4 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev