[ovs-dev] [next 00/35] Refactor OVS to better support hardware.

Ben Pfaff blp at nicira.com
Tue Apr 26 16:24:26 UTC 2011


Until now, OVS's datapath model has assumed datapath supports only
exact-match flows.  This works well for a software switch, in which
the datapath can most efficiently look up flows using a hash table,
but it does not work well for hardware switches that support wildcards
in hardware using a TCAM.

This series refactors the OVS userspace to support datapaths with
wildcards.  I expect that this series reflects the future direction of the
OVS master branch, but for now it is only on a new branch named "next".
Before it can be merged into "master", it will need to be tested.  It also
needs some more documentation; the final commit adds some, but probably not
enough, and some of the comments that *are* in that commit are inaccurate.

I'm not yet sure whether this branch should be rebased against master
or merged with it.  Advice on that is welcome.

Anyone have comments?

Thanks,

Ben.

Ben Pfaff (35):
  ovs-controller: Honor --wildcard option.
  bridge: Move logic for flushing flows and standalone mode into
    connmgr.
  vlan-bitmap: New data structure.
  mac-learning: Change mac_learning_set_flood_vlans() to not take
    ownership.
  mac-learning: Avoid unnecessary call to free().
  bridge: Avoid extra iteration through all "struct iface"s.
  bridge: Inline iterate_and_prune_ifaces() and remove it.
  bridge: Use bridge name, instead of dpif name, in log messages.
  ofproto: Make ofproto_send_packet() static.
  ofproto: Group struct cfm forward declaration with the rest of them.
  ofproto: Maintain ofp_phy_port for each ofport in network byte order.
  Convert remaining network-byte-order "uint<N>_t"s into "ovs_be<N>"s.
  bridge: Change 'iface_by_name' from shash to hmap.
  bridge: Eliminate direct dependencies on dpif.
  bridge: Change all_bridges from list to hmap (indexed by name).
  bridge: Get rid of bridge_get_all_ifaces(), bridge_fetch_dp_ifaces().
  bridge: Factor code out of bridge_reconfigure().
  dpif: New function dpif_normalize_type().
  bridge: Reorder configuration.
  ofproto: Move private definitions to separate header.
  ofproto: Rename ofproto_iface_*() functions to ofproto_port_*().
  ofproto: Add 'name' field to struct ofproto and use hmap instead of
    shash.
  bond: New function bond_slave_set_netdev().
  hmapx: New data structure.
  dpif: Better log unusual errors in dpif_port_query_by_name().
  ofproto: Initialize ports immediately upon ofproto creation.
  ofproto: Add a pointer to the owning ofproto to struct ofport.
  ofproto: Update ports immediately upon ofproto_port_add() too.
  bridge: Move packet processing functionality into ofproto.
  dpif: Improve abstraction by making 'run' and 'wait' functions
    per-dpif.
  dpif: Make dp_parse_name() normalize its returned type.
  ofproto: Improve abstraction by adding function ofproto_parse_name().
  ofproto: Improve abstraction by using OpenFlow port numbers in
    interface.
  ofproto: Complete abstraction by adding enumeration and deletion
    functions.
  ofproto: Break apart into generic and hardware-specific parts.

 PORTING                    |  352 +++--
 lib/automake.mk            |    4 +
 lib/bitmap.h               |    8 +-
 lib/bond.c                 |   14 +
 lib/bond.h                 |    1 +
 lib/byte-order.h           |   41 +-
 lib/classifier.c           |    7 +-
 lib/dhcp.h                 |   14 +-
 lib/dpif-linux.c           |    4 +-
 lib/dpif-netdev.c          |   56 +-
 lib/dpif-provider.h        |   15 +-
 lib/dpif.c                 |   88 +-
 lib/dpif.h                 |    7 +-
 lib/flow.c                 |    6 +-
 lib/flow.h                 |    2 +-
 lib/hmapx.c                |  197 +++
 lib/hmapx.h                |   71 +
 lib/mac-learning.c         |   28 +-
 lib/mac-learning.h         |    2 +-
 lib/netdev-linux.c         |    4 +-
 lib/netdev-provider.h      |    3 +-
 lib/netdev.c               |    2 +-
 lib/netdev.h               |    3 +-
 lib/nx-match.c             |    8 +-
 lib/odp-util.c             |    5 +-
 lib/ofp-parse.c            |    3 -
 lib/ofp-print.c            |    2 +-
 lib/ofp-util.c             |   24 +-
 lib/ofp-util.h             |    4 +-
 lib/rconn.c                |    8 +-
 lib/rconn.h                |    9 +-
 lib/socket-util.c          |    6 +-
 lib/socket-util.h          |    3 +-
 lib/vconn.h                |    4 +-
 lib/vlan-bitmap.c          |   60 +
 lib/vlan-bitmap.h          |   47 +
 ofproto/automake.mk        |    5 +-
 ofproto/connmgr.c          |   38 +-
 ofproto/fail-open.c        |    1 +
 ofproto/in-band.c          |    1 +
 ofproto/names.c            |   35 +
 ofproto/netflow.c          |   40 +-
 ofproto/ofproto-dpif.c     | 3878 ++++++++++++++++++++++++++++++++++++++++++++
 ofproto/ofproto.c          | 3316 +++++++++----------------------------
 ofproto/ofproto.h          |  155 ++-
 ofproto/pktbuf.c           |    8 +-
 ofproto/private.h          |  514 ++++++
 tests/ofproto-macros.at    |    2 +-
 tests/ofproto.at           |    2 +-
 tests/ovs-ofctl.at         |   18 +-
 tests/test-classifier.c    |    2 +-
 utilities/automake.mk      |    5 +-
 utilities/ovs-controller.c |    1 +
 utilities/ovs-ofctl.c      |   37 +-
 utilities/ovs-openflowd.c  |   22 +-
 vswitchd/bridge.c          | 2909 ++++++++++-----------------------
 vswitchd/ovs-vswitchd.c    |    3 -
 57 files changed, 7075 insertions(+), 5029 deletions(-)
 create mode 100644 lib/hmapx.c
 create mode 100644 lib/hmapx.h
 create mode 100644 lib/vlan-bitmap.c
 create mode 100644 lib/vlan-bitmap.h
 create mode 100644 ofproto/names.c
 create mode 100644 ofproto/ofproto-dpif.c
 create mode 100644 ofproto/private.h

-- 
1.7.4.4




More information about the dev mailing list