Wed, Sep 03, 2014 at 05:20:25PM CEST, john.fastab...@gmail.com wrote:
>On 09/03/2014 02:24 AM, Jiri Pirko wrote:
>>After this, flow related structures can be used in other code.
>>
>>Signed-off-by: Jiri Pirko <j...@resnulli.us>
>>---
>
>Hi Jiri,
>
>As I indicated before I'm looking into integrating this with some
>hardware here. Progress is a bit slow but starting to look at it.The
>i40e/ixgbe driver being one open source example with very limited
>support for tables, flow matches, etc. And then a closed source driver
>with much more flexibility. What I don't have is a middle of the road
>switch to work with something better then a host nic but not as
>flexible as a TOR.
>
>Couple questions my assumption here is I can extend the flow_key
>as needed to support additional match criteria my hardware has.
>I scanned the ./net/openvswitch source and I didn't catch any
>place that would break but might need to take a closer look.
>Similarly the actions set will need to be extended. For example
>if I want to use this with i40e a OVS_ACTION_ATTR_QUEUE could
>be used to steer packets to the queue. With this in mind we
>will want a follow up patch to rename OVS_ACTION_ATTR_* to
>FLOW_ACTION_ATTR_*
>
>Also I have some filters that can match on offset/length/mask
>tuples. As far as I can tell this is going to have to be yet
>another interface? Or would it be worth the effort to define
>the flow key more generically. My initial guess is I'll just
>write a separate interface. I think this is what Jamal referred
>to as another "classifier".

I'm thinking about using some more generic match key. It would
incorporate ovs key and possible other classifiers (as your
off/len/mask) as well. Drivers will have free will to implement whatever
the hw supports.

Will do it for the next version of the patchset (most probably after I
return from holliday, Sep 15).


>
>Thanks,
>John
>
>[...]
>
>>+
>>+struct sw_flow_key_ipv4_tunnel {
>>+     __be64 tun_id;
>>+     __be32 ipv4_src;
>>+     __be32 ipv4_dst;
>>+     __be16 tun_flags;
>>+     u8   ipv4_tos;
>>+     u8   ipv4_ttl;
>>+};
>>+
>>+struct sw_flow_key {
>>+     struct sw_flow_key_ipv4_tunnel tun_key;  /* Encapsulating tunnel key. */
>>+     struct {
>>+             u32     priority;       /* Packet QoS priority. */
>>+             u32     skb_mark;       /* SKB mark. */
>>+             u16     in_port;        /* Input switch port (or DP_MAX_PORTS). 
>>*/
>>+     } __packed phy; /* Safe when right after 'tun_key'. */
>>+     struct {
>>+             u8     src[ETH_ALEN];   /* Ethernet source address. */
>>+             u8     dst[ETH_ALEN];   /* Ethernet destination address. */
>>+             __be16 tci;             /* 0 if no VLAN, VLAN_TAG_PRESENT set 
>>otherwise. */
>>+             __be16 type;            /* Ethernet frame type. */
>>+     } eth;
>>+     struct {
>>+             u8     proto;           /* IP protocol or lower 8 bits of ARP 
>>opcode. */
>>+             u8     tos;             /* IP ToS. */
>>+             u8     ttl;             /* IP TTL/hop limit. */
>>+             u8     frag;            /* One of OVS_FRAG_TYPE_*. */
>>+     } ip;
>>+     struct {
>>+             __be16 src;             /* TCP/UDP/SCTP source port. */
>>+             __be16 dst;             /* TCP/UDP/SCTP destination port. */
>>+             __be16 flags;           /* TCP flags. */
>>+     } tp;
>>+     union {
>>+             struct {
>>+                     struct {
>>+                             __be32 src;     /* IP source address. */
>>+                             __be32 dst;     /* IP destination address. */
>>+                     } addr;
>>+                     struct {
>>+                             u8 sha[ETH_ALEN];       /* ARP source hardware 
>>address. */
>>+                             u8 tha[ETH_ALEN];       /* ARP target hardware 
>>address. */
>>+                     } arp;
>>+             } ipv4;
>>+             struct {
>>+                     struct {
>>+                             struct in6_addr src;    /* IPv6 source address. 
>>*/
>>+                             struct in6_addr dst;    /* IPv6 destination 
>>address. */
>>+                     } addr;
>>+                     __be32 label;                   /* IPv6 flow label. */
>>+                     struct {
>>+                             struct in6_addr target; /* ND target address. */
>>+                             u8 sll[ETH_ALEN];       /* ND source link layer 
>>address. */
>>+                             u8 tll[ETH_ALEN];       /* ND target link layer 
>>address. */
>>+                     } nd;
>>+             } ipv6;
>>+     };
>>+} __aligned(BITS_PER_LONG/8); /* Ensure that we can do comparisons as longs. 
>>*/
>>+
>>+struct sw_flow_key_range {
>>+     unsigned short int start;
>>+     unsigned short int end;
>>+};
>>+
>>+struct sw_flow_mask {
>>+     struct sw_flow_key_range range;
>>+     struct sw_flow_key key;
>>+};
>>+
>>+struct sw_flow_action {
>>+};
>>+
>>+struct sw_flow_actions {
>>+     unsigned count;
>>+     struct sw_flow_action actions[0];
>>+};
>>+
>>+struct sw_flow {
>>+     struct sw_flow_key key;
>>+     struct sw_flow_key unmasked_key;
>>+     struct sw_flow_mask *mask;
>>+     struct sw_flow_actions *actions;
>>+};
>>+
>
>
>-- 
>John Fastabend         Intel Corporation
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to