On Tue, Jun 26, 2012 at 05:02:22PM -0700, ravi kerur wrote:
> diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
> index 7b86f80..319033c 100644
> --- a/ofproto/ofproto-dpif.c
> +++ b/ofproto/ofproto-dpif.c
...
> @@ -5125,6 +5132,76 @@ compose_dec_ttl(struct action_xlate_ctx *ctx)
> }
>
> static void
> +commit_dec_mpls_ttl_action(struct action_xlate_ctx *ctx)
> +{
> + uint8_t ttl = mpls_lse_to_ttl(ctx->flow.mpls_lse);
> + if (ttl > 1) {
> + if (ctx->flow.mpls_lse != htonl(0)) {
> + flow_set_mpls_lse_ttl(&ctx->flow.mpls_lse, --ttl);
> + }
> + if (ctx->base_flow.mpls_lse != htonl(0)) {
> + flow_set_mpls_lse_ttl(&ctx->base_flow.mpls_lse, --ttl);
> + }
> + nl_msg_put_u8(ctx->odp_actions, OVS_ACTION_ATTR_DEC_MPLS_TTL, ttl);
> + } else {
> + execute_controller_action(ctx, UINT16_MAX, OFPR_INVALID_TTL, 0);
> + }
> +}
> +
This may decrease ttl by 2.
diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
index a2a05aa..58e53d7 100644
--- a/ofproto/ofproto-dpif.c
+++ b/ofproto/ofproto-dpif.c
@@ -5158,11 +5158,12 @@ commit_dec_mpls_ttl_action(struct action_xlate_ctx *ctx)
assert(ctx->mpls.n_lses > 0);
if (ttl > 1) {
+ ttl--;
if (ctx->flow.mpls_lse != htonl(0)) {
- flow_set_mpls_lse_ttl(&ctx->flow.mpls_lse, --ttl);
+ flow_set_mpls_lse_ttl(&ctx->flow.mpls_lse, ttl);
}
if (ctx->base_flow.mpls_lse != htonl(0)) {
- flow_set_mpls_lse_ttl(&ctx->base_flow.mpls_lse, --ttl);
+ flow_set_mpls_lse_ttl(&ctx->base_flow.mpls_lse, ttl);
}
mpls_lses_set(&ctx->mpls, ctx->flow.mpls_lse);
nl_msg_put_u8(ctx->odp_actions, OVS_ACTION_ATTR_DEC_MPLS_TTL, ttl);
--
yamahata
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev