[ovs-dev] [PATCH v2] Always update ethertype on mpls_pop

Simon Horman horms at verge.net.au
Thu May 2 23:31:58 UTC 2013


On Thu, May 02, 2013 at 12:56:37PM -0700, Ben Pfaff wrote:
> I made the following comment on v1, did you do anything about it?
> 
> > Also, the action parser in ofp-actions.def rejects any pop_mpls action
> > with an MPLS ethertype attached, in two places.  We should fix that.

Sorry for not being clearer.

As per my note below I have a patch that removes restrictions on
the use of MPLS push and pop. This includes removing the
code that rejects pop_mpls actions with an MPLS ethertype attached.

I now have that change working and I will post it shortly.

> 
> Thanks,
> 
> Ben.
> 
> On Thu, May 02, 2013 at 01:26:38PM +0900, Simon Horman wrote:
> > The ethertype should always be updated on mpls_pop
> > as there may be a transition between MPLS unicast (0x8847) and
> > MPLS multicast (0x8848).
> > 
> > Ben Pfaff tells me that this is consistent with the
> > behaviour described in EXT-194 of the JIRA bug tracker.
> > 
> > Signed-off-by: Simon Horman <horms+renesas at verge.net.au>
> > 
> > ---
> > 
> > v2
> > * Add note about EXT-194 to changelog
> > * Update manpage. Note that I plan to post a patch to
> >   make use of recirculation to remove restrictions on
> >   the use of MPLS pop and push.
> > ---
> >  lib/packets.c            | 3 +--
> >  utilities/ovs-ofctl.8.in | 7 ++++---
> >  2 files changed, 5 insertions(+), 5 deletions(-)
> > 
> > diff --git a/lib/packets.c b/lib/packets.c
> > index 77aa7d3..f2e0f81 100644
> > --- a/lib/packets.c
> > +++ b/lib/packets.c
> > @@ -373,9 +373,8 @@ pop_mpls(struct ofpbuf *packet, ovs_be16 ethtype)
> >          size_t len;
> >          mh = packet->l2_5;
> >          len = (char*)packet->l2_5 - (char*)packet->l2;
> > -        /* If bottom of the stack set ethertype. */
> > +        set_ethertype(packet, ethtype);
> >          if (mh->mpls_lse & htonl(MPLS_BOS_MASK)) {
> > -            set_ethertype(packet, ethtype);
> >              packet->l2_5 = NULL;
> >          } else {
> >              packet->l2_5 = (char*)packet->l2_5 + MPLS_HLEN;
> > diff --git a/utilities/ovs-ofctl.8.in b/utilities/ovs-ofctl.8.in
> > index f46b9dc..d316987 100644
> > --- a/utilities/ovs-ofctl.8.in
> > +++ b/utilities/ovs-ofctl.8.in
> > @@ -933,9 +933,10 @@ followed by another \fBpush_mpls\fR will result in the first
> >  \fBpush_mpls\fR being discarded.
> >  .
> >  .IP \fBpop_mpls\fR:\fIethertype\fR
> > -Strips the outermost MPLS label stack entry.  If the MPLS label
> > -stripped was the only one, changes the ethertype of a packet to
> > -\fIethertype\fR, which should not ordinarily be an MPLS Ethertype.
> > +Strips the outermost MPLS label stack entry.
> > +Currently the implementation restricts \fIethertype\fR to a non-MPLS Ethertype
> > +and thus \fBpop_mpls\fR should only be applied to packets with
> > +an MPLS label stack depth of one.
> >  .
> >  .IP
> >  There are some limitations in the implementation.  \fBpop_mpls\fR
> > -- 
> > 1.8.2.1
> > 
> > _______________________________________________
> > dev mailing list
> > dev at openvswitch.org
> > http://openvswitch.org/mailman/listinfo/dev
> 



More information about the dev mailing list