Wed, Sep 03, 2014 at 05:46:23PM CEST, john.fastab...@gmail.com wrote: >On 09/03/2014 02:24 AM, Jiri Pirko wrote: >>The goal of this is to provide a possibility to suport various switch >>chips. Drivers should implement relevant ndos to do so. Now there is a >>couple of ndos defines: >>- for getting physical switch id is in place. >>- for work with flows. >> >>Note that user can use random port netdevice to access the switch. >> >>Signed-off-by: Jiri Pirko <j...@resnulli.us> >>--- > > >[...] > >> struct netpoll_info; >>@@ -997,6 +999,24 @@ typedef u16 (*select_queue_fallback_t)(struct net_device >>*dev, >> * Callback to use for xmit over the accelerated station. This >> * is used in place of ndo_start_xmit on accelerated net >> * devices. >>+ * >>+ * int (*ndo_swdev_get_id)(struct net_device *dev, >>+ * struct netdev_phys_item_id *psid); >>+ * Called to get an ID of the switch chip this port is part of. >>+ * If driver implements this, it indicates that it represents a port >>+ * of a switch chip. >>+ * >>+ * 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. >>+ * >>+ * int (*ndo_swdev_flow_remove)(struct net_device *dev, >>+ * const struct sw_flow *flow); >>+ * Called to remove a flow from switch device. If driver does >>+ * not implement this, it is assumed that the hw does not have >>+ * a capability to work with flows. >> */ >> struct net_device_ops { >> int (*ndo_init)(struct net_device *dev); >>@@ -1146,6 +1166,14 @@ struct net_device_ops { >> struct net_device *dev, >> void *priv); >> int (*ndo_get_lock_subclass)(struct net_device >> *dev); >>+#ifdef CONFIG_NET_SWITCHDEV >>+ int (*ndo_swdev_get_id)(struct net_device *dev, >>+ struct netdev_phys_item_id >>*psid); >>+ int (*ndo_swdev_flow_insert)(struct net_device *dev, >>+ const struct sw_flow >>*flow); >>+ int (*ndo_swdev_flow_remove)(struct net_device *dev, >>+ const struct sw_flow >>*flow); > >Not really a critique of your patch but I'll need to extend this >with a ndo_swdev_flow_dump() to get the fields. Without this if >your user space side ever restarts, gets out of sync there is no >way to get back in sync.
Sure. I do not say that the api is complete (If anything ever is...) Feel free to add dump ndo. In fact we can take care of it and implement in rocker driver. > >Also with hardware that has multiple flow tables we need to indicate >the table to insert the flow into. One concrete reason to do this >is to create atomic updates of multiple ACLs. The idea is to create >a new ACL table build the table up and then link it in. This can be >added when its needed my opensource drivers don't support this yet >either but maybe adding multiple tables to rocker switch will help >flush this out. Ok. Lets leave this for future follow-ups. > >Finally we need some way to drive capabilities out of the swdev. >Even rocker switch needs this to indicate it doesn't support matching >on all the sw_flow fields. Without this its not clear to me how to >manage the device from user space. I tried writing user space daemon >for the simpler flow director interface and the try and see model >breaks quickly. Hmm. I was under impression that a simple fact that the flow insertion fails with error is enough. But thining of it more. I believe that a set of features makes sense. I will think about it and add it into the next patchset version. > >>+#endif >> }; >> >> /** >>diff --git a/include/net/sw_flow.h b/include/net/sw_flow.h >>index 21724f1..3af7758 100644 >>--- a/include/net/sw_flow.h >>+++ b/include/net/sw_flow.h >>@@ -81,7 +81,21 @@ struct sw_flow_mask { >> struct sw_flow_key key; >> }; >> >>+enum sw_flow_action_type { >>+ SW_FLOW_ACTION_TYPE_OUTPUT, >>+ SW_FLOW_ACTION_TYPE_VLAN_PUSH, >>+ SW_FLOW_ACTION_TYPE_VLAN_POP, >>+}; >>+ > >OK my previous comment about having another patch to create >generic actions seems to be resolved here. I'm not sure how >important it is but if we abstract the flow types away from >OVS is there any reason not to reuse and relabel the action >types as well? I guess we can't break userspace API but maybe >a 1:1 mapping would be better? > >> struct sw_flow_action { >>+ enum sw_flow_action_type type; >>+ union { >>+ u32 out_port_ifindex; >>+ struct { >>+ __be16 vlan_proto; >>+ u16 vlan_tci; >>+ } vlan; >>+ }; >> }; > >[...] > >I think my comments could be addressed with additional patches >if you want. I could help but it will be another week or so >before I have some time. The biggest issue IMO is the lack of >capabilities queries. Np. I will handle these (probably not before I return from vacation (Sep 15)). Thanks! _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev