This is great!  Thanks for taking the time to write it up.  I just have a few 
comments:

> + *    - A "flow", that is, a summary of the headers in a Ethernet packet.  
> The

s/a/an/

This sort of sounds like only the Ethernet header fields make up the flow.  
Maybe "L2/L3/L4 headers" or something like that?

> + *      (In case you are familiar with OpenFlow, datapath flows are analogous
> + *      to OpenFlow flow matches.  The most important difference is that
> + *      OpenFlow allows fields to be wildcarded, whereas a datapath's flow
> + *      table is a hash table so every flow must be exact-match.)


I might add "and prioritized" after "wildcarded", since this often seems to 
trip people up in understanding the datapath flow table.

> + *      The actions list may be empty.  This indicates that nothing should be
> + *      done to matching packet, e.g. they should be dropped.

s/packet/packets/

Is this an "e.g." or an "i.e."?  Isn't the packet always going to be dropped?

> + * An upcall contains an entire packet.  There is no attempt to, e.g., copy
> + * only as much of the packet as normally needed to make a forwarding 
> decision.
> + * Such an optimization is doable, but experimental prototypes showed it to 
> be
> + * of little benefit because an upcall typically contains the first packet 
> of a
> + * flow, which is usually short (e.g. a TCP SYN).


I'm not sure we want to only use this justification, since we also use the 
packet for things like packet sampling and deeper inspection for in-band.

> + * The datapath should ensure that that a high rate of upcalls from one


There are two "that"s.

> + * The client has some control over "action" upcalls: it can specify a 32-bit
> + * "Netlink PID" as part of the action.  This terminology comes from the 
> Linux
> + * datapath implementation, which uses a protocol called Netlink in which a 
> PID
> + * designates a particular socket and the upcall data is delivered to the
> + * socket's received queue.  Generically, though, a Netlink PID identifies a
> + * queue for upcalls.  The basic requirements on the datapath are:

Is it a "received queue" or a "receive queue"?  I always thought it was the 
latter (i.e., no "d").

> + *
> + *    - The datapath must provide a Netlink PID associated with each port.  
> The
> + *      client can retrieve the PID with dpif_port_get_pid().
> + *
> + *    - The datapath must provide an additional Netlink PID, not associated
> + *      with any port.  dpif_port_get_pid() also provides this PID.

I think it would be nice to explain why this other PID is needed (and possibly 
explain that the value is UINT32_MAX).

> + *    - Upcalls that specify the additional Netlink PID are queued 
> separately.

Calling this the "additional Netlink PID" seems insufficiently specific.  What 
about calling it something like the "system Netlink PID" here and where it was 
introduced earlier? 

> + * For each upcall received, the client examines the enclosed packet and
> + * figures out what should be done with it.  For example, if the client
> + * implements a MAC-learning switch, then it searches the forwarding database
> + * for the packet's destination MAC and VLAN and determines the set of ports 
> to
> + * which it should be sent.  In any case, the client composes a set of 
> datapath
> + * actions to properly dispatch the packet and then directs the datapath to
> + * execute those actions on the packet (e.g. with dpif_execute()).

Is it an "e.g." or an "i.e."?

--Justin


_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to