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