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