I recall someone mentioning on this list that the only planned use for skb_mark 
is for ipsec tunneling. At least currently this seems to be the case, as the 
only place where the skb_mark is set to a potentially non-zero value in 
userspace is in tnl_port_send(). The kernel datapath may also provide a 
non-zero skb_mark via odp_flow_key_to_flow().

Also, we say in ofputil_usable_protocols():

    /* skb_mark and skb_priority can't be sent in a flow_mod */
    if (wc->masks.skb_mark || wc->masks.skb_priority) {
        return OFPUTIL_P_NONE;
    }

which is consistent with the tunneling-only use.

Also, I believe that "skb_mark" is specific to Linux kernel datapath, and other 
datapath types should somehow emulate it to implement compatible IPSEC 
tunneling, knowing that it can only take values of 0 and 1 and that the value 1 
together with a tunnel action signals the intention to use an IPSEC tunnel in 
the next output action.

If this is the case, wouldn't it be better to replace the skb_mark in the 
userspace struct flow with an IPSEC flag in the struct flow_tnl? This would 
also shrink the struct flow, as there is compiler provided padding available at 
the end of struct flow_tnl.

On the same note, I believe the skb_priority in struct flow should be renamed 
as "qos_priority" ("priority" alone might be confused with the concept of OF 
flow priority).  Again, the "skb_" prefix is specific to the linux kernel, and 
it is conceivable that other datapaths may easily implement the same 
functionality by other means.

I'd be happy to send a patch accomplishing the above, if it is the right thing 
to do. However, as I am not familiar with other datapaths, I may be completely 
wrong in my assumptions regarding "skb" being specific to the Linux kernel 
datapath. But i recall BSD using "mbufs" instead...

  Jarno

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

Reply via email to