Always update ethertype on mpls_pop
authorSimon Horman <horms@verge.net.au>
Wed, 5 Jun 2013 05:28:52 +0000 (14:28 +0900)
committerBen Pfaff <blp@nicira.com>
Wed, 5 Jun 2013 21:46:42 +0000 (14:46 -0700)
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@verge.net.au>
Signed-off-by: Ben Pfaff <blp@nicira.com>
lib/packets.c
utilities/ovs-ofctl.8.in

index 7212d00..7fe6513 100644 (file)
@@ -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;
index 061982b..e66c605 100644 (file)
@@ -944,9 +944,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