[ovs-dev] [PATCH v2] lib/dpif-netdev: Integrate megaflow classifier.

Joe Stringer joestringer at nicira.com
Thu Oct 23 18:21:32 UTC 2014


Hi Jarno,

On 7 October 2014 14:43, Jarno Rajahalme <jrajahalme at nicira.com> wrote:

> flow inserts and removals are simplified:
>
> - No need for classifier internal mutex, as dpif-netdev already has a
>   'flow_mutex'.
> - Number of memory allocations/frees can be halved.
>
> Lookup code path is a bit more effcient as well, as we can rely on
> netdev_flow_key always having inline data.
>
> This will also be easier to simplify further when moving to per-thread
> megaflow classifiers in the future.
>
> Signed-off-by: Jarno Rajahalme <jrajahalme at nicira.com>
> ---
> v2: Reverted using netdev_flow_key as the flow_table key, since that will
>     become obsolete as soon as flow ID patches are merged in.
>     We still need a netdev_flow_key for the lookup in flow put, but now we
>     use the slower method of composing a packet from a flow, and extracting
>     the miniflow from this 'packet'.  This does not matter, since the flow
>     put interface is no longer used for upcalls (but probes may still use
>     it).
>
>  lib/classifier.c  |  109 ----------
>  lib/classifier.h  |    5 -
>  lib/dpif-netdev.c |  619
> ++++++++++++++++++++++++++++++++++++++++++-----------
>  lib/flow.c        |   61 ++++++
>  lib/flow.h        |    3 +-
>  5 files changed, 555 insertions(+), 242 deletions(-)
>
> <snip>
>


> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
> index a1db620..36fd238 100644
> --- a/lib/dpif-netdev.c
> +++ b/lib/dpif-netdev.c
> <snip>
>


> @@ -1628,18 +1774,22 @@ dpif_netdev_flow_put(struct dpif *dpif, const
> struct dpif_flow_put *put)
>                  if (put->stats) {
>                      memset(put->stats, 0, sizeof *put->stats);
>                  }
> -                error = dp_netdev_flow_add(dp, &match, put->actions,
> -                                           put->actions_len);
> +                dp_netdev_flow_add(dp, &match, put->actions,
> put->actions_len);
> +                error = 0;
>              } else {
>                  error = EFBIG;
>              }


Was there a particular reason for modifying this to ignore errors in
dp_netdev_flow_add()?



More information about the dev mailing list