On Fri, Jan 10, 2014 at 4:10 PM, Ben Pfaff <b...@nicira.com> wrote:
> On Fri, Jan 10, 2014 at 03:50:09PM -0800, Jesse Gross wrote:
>> On Thu, Jan 9, 2014 at 9:17 AM, Ben Pfaff <b...@nicira.com> wrote:
>> > On Thu, Jan 02, 2014 at 11:51:15AM -0500, Jesse Gross wrote:
>> >> On Sun, Dec 29, 2013 at 2:50 AM, Ben Pfaff <b...@nicira.com> wrote:
>> >> * I'm not sure that flow_count_mpls_labels() is megaflow-safe since it
>> >> reads fields without updating the wildcards. I think the only real way
>> >> to handle this is with automatic tracking.
>> >
>> > By "automatic tracking" do you mean something other than just updating
>> > the wildcard mask in flow_count_mpls_labels()?  Presumably the core of
>> > that is pretty easy.  I haven't thought it through carefully, but I've
>> > done a prototype and appended it to this message.  (I'm also keeping
>> > the branch at
>> >         https://github.com/blp/ovs-reviews.git mpls
>> > up to date with my changes as I go.  I'm happy to repost the overall
>> > patch, by request.)
>>
>> I was thinking more of a set of macros that automatically unwildcards
>> fields when they are read in a flow plus using something like sparse
>> to warn if flows fields are accessed directly. It otherwise seems too
>> easy to forget a field and have difficult to track down bugs. It might
>> even result in better masks in some case by tracking exactly what we
>> use since we always unwildcard some fields for simplicity.
>
> Something like that might be worthwhile, but I think that it is
> orthogonal to MPLS, because we could implement it with or without
> MPLS.  (Unless you are suggesting that MPLS is somehow a "tipping
> point" that makes manual wildcard management infeasible?)

I agree that it's orthogonal and there's nothing particularly MPLS
specific about it but it does seem important in general.

>> >> Other things, assuming that the goal is to eventually hook this up to
>> >> the kernel patches:
>> >>
>> >> * How do we handle cases where userspace supports parsing more labels
>> >> than the kernel (which is actually true at the moment)? I think that
>> >> it would just fail at flow installation time right now.
>> >
>> > For matching (parsing) or for actions (pushing/popping)?  For matching,
>> > I guess that we could handle this using the existing "fitness"
>> > mechanism.  For actions, userspace could detect that the MPLS depth
>> > exceeds what the kernel supports (I think we could probe for that pretty
>> > easily) and fall back to the recently introduced "needs_help" mechanism
>> > (see struct dpif_execute and dpif_execute_with_help()).
>>
>> I was thinking about matching here. If the kernel supplies more labels
>> than userspace can handle then that is easy to detect. However, how to
>> do we know if the kernel parsed fewer labels than userspace would have
>> for a given packet? I guess we could check to see if the last label
>> has the BoS bit set but then we'd have to make sure it still handles
>> malformed or truncated packets as well.
>
> My plan was to check for the BoS bit.
>
> I suspect we have a lot of existing bugs in related areas.  We need to
> add some tests here.
>
> Do you have a specific scenario in mind, or is this just something to
> think through in implementation?

No, nothing really specific other than the goal of trying to be
somewhat flexible and agnostic even in the case of malformed packets.

>> >> * Somewhat related to the above, the kernel's action validator doesn't
>> >> trust userspace to provide a valid EtherType for pop actions, so it
>> >> doesn't allow multiple consecutive pops in cases where there are more
>> >> tags than it knows about (which is 1).
>> >
>> > I guess this could be handled the same as the previous issue: detect and
>> > avoid.
>>
>> I agree that actions are fairly easy to probe. We should probably
>> support the same number of labels in the kernel as we do in userspace,
>> at least at the beginning. That will avoid the problem completely in
>> the vast majority of cases.
>
> Yes.
>
> I spoke to Bruce Davie about this a few days ago.  He said that
> hardware that he is familiar with supports up to 5 labels internally,
> for reasons that were well thought out at the time, so I'm inclined to
> have an initial userspace limit of 5 labels (instead of the 3 in my
> initial patch).
>
> On the kernel side, it looks like we have 76 bytes in struct
> sw_flow_key following 'eth', which is enough room for 19 labels.  That
> is not much of a limitation!

Yeah, there's definitely plenty of space for MPLS labels so I'm not
worried about it from the kernel perspective.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to