RFC 3443 says that an outgoing MPLS TTL of zero is invalid, so we must send
packets that have such a TTL post-decrement to the controller rather than
allowing them to continue through the OpenFlow tables.
Here is the text from RFC 3443 that implies this behavior:

   oTTL: This is the TTL value used as the outgoing TTL value (see
   section 3.5 for exception).  It is always (iTTL - 1) unless otherwise
   stated.

   oTTL Check: Check if oTTL is greater than 0.  If the oTTL Check is
   false, then the packet is not forwarded.  Note that the oTTL check is
   performed only if any outgoing TTL (either IP or MPLS) is set to oTTL
   (see section 3.5 for exception).

That is, the output TTL is one less than the input TTL, and a packet with
an output TTL of 0 must not be forwarded.

CC: Bruce Davie <b...@nicira.com>
Signed-off-by: Ben Pfaff <b...@nicira.com>
---
I swear I sent this out earlier, but I don't see it in the archive
or in my inbox.

 ofproto/ofproto-dpif.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
index 10e4e23..38b8e55 100644
--- a/ofproto/ofproto-dpif.c
+++ b/ofproto/ofproto-dpif.c
@@ -6062,7 +6062,7 @@ execute_dec_mpls_ttl_action(struct action_xlate_ctx *ctx)
         return false;
     }
 
-    if (ttl > 0) {
+    if (ttl > 1) {
         ttl--;
         set_mpls_lse_ttl(&ctx->flow.mpls_lse, ttl);
         return false;
-- 
1.7.2.5

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

Reply via email to