On 08/21/14 at 06:18pm, Jiri Pirko wrote:
> diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
> index 39294b9..8b5d14c 100644
> --- a/include/linux/netdevice.h
> +++ b/include/linux/netdevice.h
> @@ -49,6 +49,8 @@
>  
>  #include <linux/netdev_features.h>
>  #include <linux/neighbour.h>
> +#include <linux/sw_flow.h>
> +
>  #include <uapi/linux/netdevice.h>
>  
>  struct netpoll_info;
> @@ -997,6 +999,24 @@ typedef u16 (*select_queue_fallback_t)(struct net_device 
> *dev,
> + * int (*ndo_swdev_flow_insert)(struct net_device *dev,
> + *                           const struct sw_flow *flow);
> + *   Called to insert a flow into switch device. If driver does
> + *   not implement this, it is assumed that the hw does not have
> + *   a capability to work with flows.

I asume you are planning to add an additional expandable struct
paramter to handle insertion parameters when the first is introduced
to avoid requiring to touch every driver every time.

> +/**
> + *   swdev_flow_insert - Insert a flow into switch
> + *   @dev: port device
> + *   @flow: flow descriptor
> + *
> + *   Insert a flow into switch this port is part of.
> + */
> +int swdev_flow_insert(struct net_device *dev, const struct sw_flow *flow)
> +{
> +     const struct net_device_ops *ops = dev->netdev_ops;
> +
> +     print_flow(flow, dev, "insert");
> +     if (!ops->ndo_swdev_flow_insert)
> +             return -EOPNOTSUPP;
> +     WARN_ON(!ops->ndo_swdev_get_id);
> +     BUG_ON(!flow->actions);
> +     return ops->ndo_swdev_flow_insert(dev, flow);
> +}
> +EXPORT_SYMBOL(swdev_flow_insert);

Splitting the flow specific API into a separate file (maybe
swdev_flow.c?) might help resolve some of the concerns around the
focus on flows. It would make it clear that it's one of multiple
models to be supported.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to