On 12/10/2014 02:45 AM, Jarno Rajahalme wrote:
> 
> On Dec 9, 2014, at 11:06 AM, Lori Jakab <loja...@cisco.com> wrote:
> 
>> On 11/21/2014 02:20 AM, Jesse Gross wrote:
>>> On Thu, Nov 20, 2014 at 4:06 PM, Jarno Rajahalme <jrajaha...@nicira.com> 
>>> wrote:
>>>> On Nov 20, 2014, at 12:18 PM, Jesse Gross <je...@nicira.com> wrote:
>>>>
>>>> On Thu, Nov 20, 2014 at 10:35 AM, Jarno Rajahalme <jrajaha...@nicira.com>
>>>> wrote:
>>>>
>>>> The netlink key for flow put is serialized from struct flow, so even in the
>>>> case of L3 the ethertype would be serialized.
>>>>
>>>> Even the kernel datapath is encoding the ethertype in key_extract(), even
>>>> when it is not in the packet:
>>>>
>>>> + /* Link layer. */
>>>> + if (key->phy.is_layer3) {
>>>> + key->eth.tci = 0;
>>>> + key->eth.type = skb->protocol;
>>>> + } else {
>>>>
>>>> So I guess you are not saying that the ethertype should not be serialized,
>>>> due to it not being in the L3 packet?
>>>>
>>>>
>>>> The EtherType is stored in the flow key for efficiency but it is
>>>> actually not part of the serialized netlink representation currently.
>>>>
>>>>
>>>> OK, I see patch 2/5 skipping past the line where dl_type is serialized in
>>>> odp-util.c.
>>>>
>>>> This revision of the series introduces a patch to change the
>>>> serialization from userspace for the purposes of packet execution but
>>>> it is not done from the kernel or at all in previous revisions. I
>>>> think it is important that userspace, kernel, and the data contained
>>>> in the packet line up as closely as possible.
>>>>
>>>>
>>>> So by encoding the whole key the datapath can detect the presence of
>>>> OVS_KEY_ATTR_IPV4 or OVS_KEY_ATTR_IPV6 and use those to set the
>>>> skb->protocol?
>>>
>>> Yes, that's right.
>>
>> Has there been any progress on this?
> 
> I discussed this offline with Jesse and we came up with a way forward. For 
> what I understand this might seem like backtracking from some earlier 
> discussions, sorry for that.
> 
> As packets may be partially executed in userspace, it is possible that the 
> original flow key does not fully represent the packet being sent to the 
> kernel for execution. This makes it somewhat tricky to use the packet key 
> attributes for deducing the packet type. A new metadata field that can be 
> modified together with the packet as it is being executed would be better.
> 
> We should add a new metadata key field OVS_KEY_ATTR_PACKET_ETHERTYPE, that 
> contains the ethertype of the associated packet attribute. While this would 
> be strictly needed only for L3 packets, it would be cleaner to include it 
> with all packets in packet misses. Then it could be used in flow setup and 
> packet execution as well.
> 
> Other packet type namespaces (like IP protocol) could be later supported 
> defining new netlink attributes.
> 
> A corresponding new field packet_ethertype needs to be added in struct 
> pkt_metadata. This needs to be kept upto date in userspace code pushing and 
> popping headers, so that the correct value gets passed to kernel execution.

Sounds good, thanks for the clarification and pointers.  I'll update my
patches accordingly.

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

Reply via email to