> Hi Lorenzo, I only have a couple of minor grammatical suggestions for the
> docs. See below.

ack, I will fix them in v2.

Regards,
Lorenzo

> 
> On 7/13/22 08:44, Lorenzo Bianconi wrote:
> > check_ecmp_nh_mac/check_ecmp_nh actions check if the packet under
> > consideration matches the any flow in table
> > OFTABLE_ECMP_NH_MAC/OFTABLE_ECMP_NH. If it is so, then the 1-bit
> > destination register is set to 1.
> > chk_ecmp_nh and chk_ecmp_nh_mac will be used to improve ECMP symmetric
> > routing reliability.
> > 
> > Signed-off-by: Lorenzo Bianconi <[email protected]>
> > ---
> >   include/ovn/actions.h |  2 ++
> >   lib/actions.c         | 54 +++++++++++++++++++++++++++++++++++++++++++
> >   ovn-sb.xml            | 20 ++++++++++++++++
> >   utilities/ovn-trace.c |  4 ++++
> >   4 files changed, 80 insertions(+)
> > 
> > diff --git a/include/ovn/actions.h b/include/ovn/actions.h
> > index cef930e1a..4a3b9195a 100644
> > --- a/include/ovn/actions.h
> > +++ b/include/ovn/actions.h
> > @@ -119,6 +119,8 @@ struct ovn_extend_table;
> >       OVNACT(CHECK_IN_PORT_SEC,  ovnact_result)         \
> >       OVNACT(CHECK_OUT_PORT_SEC, ovnact_result)         \
> >       OVNACT(COMMIT_ECMP_NH,    ovnact_commit_ecmp_nh)  \
> > +    OVNACT(CHK_ECMP_NH_MAC,   ovnact_result)          \
> > +    OVNACT(CHK_ECMP_NH,       ovnact_result)          \
> >   /* enum ovnact_type, with a member OVNACT_<ENUM> for each action. */
> >   enum OVS_PACKED_ENUM ovnact_type {
> > diff --git a/lib/actions.c b/lib/actions.c
> > index 132c63228..e941f3cb4 100644
> > --- a/lib/actions.c
> > +++ b/lib/actions.c
> > @@ -4452,6 +4452,52 @@ encode_COMMIT_ECMP_NH(const struct 
> > ovnact_commit_ecmp_nh *ecmp_nh,
> >        commit_ecmp_learn_action(ofpacts, false, ecmp_nh->ipv6);
> >   }
> > +static void
> > +parse_chk_ecmp_nh_mac(struct action_context *ctx, const struct expr_field 
> > *dst,
> > +                      struct ovnact_result *res)
> > +{
> > +    parse_ovnact_result(ctx, "chk_ecmp_nh_mac", NULL, dst, res);
> > +}
> > +
> > +static void
> > +format_CHK_ECMP_NH_MAC(const struct ovnact_result *res, struct ds *s)
> > +{
> > +    expr_field_format(&res->dst, s);
> > +    ds_put_cstr(s, " = chk_ecmp_nh_mac();");
> > +}
> > +
> > +static void
> > +encode_CHK_ECMP_NH_MAC(const struct ovnact_result *res,
> > +                       const struct ovnact_encode_params *ep OVS_UNUSED,
> > +                       struct ofpbuf *ofpacts)
> > +{
> > +    encode_result_action__(res, OFTABLE_ECMP_NH_MAC,
> > +                           MLF_LOOKUP_COMMIT_ECMP_NH_BIT, ofpacts);
> > +}
> > +
> > +static void
> > +parse_chk_ecmp_nh(struct action_context *ctx, const struct expr_field *dst,
> > +                  struct ovnact_result *res)
> > +{
> > +    parse_ovnact_result(ctx, "chk_ecmp_nh", NULL, dst, res);
> > +}
> > +
> > +static void
> > +format_CHK_ECMP_NH(const struct ovnact_result *res, struct ds *s)
> > +{
> > +    expr_field_format(&res->dst, s);
> > +    ds_put_cstr(s, " = chk_ecmp_nh();");
> > +}
> > +
> > +static void
> > +encode_CHK_ECMP_NH(const struct ovnact_result *res,
> > +                   const struct ovnact_encode_params *ep OVS_UNUSED,
> > +                   struct ofpbuf *ofpacts)
> > +{
> > +    encode_result_action__(res, OFTABLE_ECMP_NH,
> > +                           MLF_LOOKUP_COMMIT_ECMP_NH_BIT, ofpacts);
> > +}
> > +
> >   /* Parses an assignment or exchange or put_dhcp_opts action. */
> >   static void
> >   parse_set_action(struct action_context *ctx)
> > @@ -4528,6 +4574,14 @@ parse_set_action(struct action_context *ctx)
> >                      && lexer_lookahead(ctx->lexer) == LEX_T_LPAREN) {
> >               parse_check_out_port_sec(
> >                   ctx, &lhs, ovnact_put_CHECK_OUT_PORT_SEC(ctx->ovnacts));
> > +        } else if (!strcmp(ctx->lexer->token.s, "chk_ecmp_nh_mac")
> > +                   && lexer_lookahead(ctx->lexer) == LEX_T_LPAREN) {
> > +            parse_chk_ecmp_nh_mac(ctx, &lhs,
> > +                    ovnact_put_CHK_ECMP_NH_MAC(ctx->ovnacts));
> > +        } else if (!strcmp(ctx->lexer->token.s, "chk_ecmp_nh")
> > +                   && lexer_lookahead(ctx->lexer) == LEX_T_LPAREN) {
> > +            parse_chk_ecmp_nh(ctx, &lhs,
> > +                    ovnact_put_CHK_ECMP_NH(ctx->ovnacts));
> >           } else {
> >               parse_assignment_action(ctx, false, &lhs);
> >           }
> > diff --git a/ovn-sb.xml b/ovn-sb.xml
> > index ef5586020..dfed06e95 100644
> > --- a/ovn-sb.xml
> > +++ b/ovn-sb.xml
> > @@ -2607,6 +2607,26 @@ tcp.flags = RST;
> >               if it is routed via an ECMP route
> >             </p>
> >           </dd>
> > +
> > +        <dt><code><var>R</var> = check_ecmp_nh_mac();</code></dt>
> > +        <dd>
> > +          <p>
> > +            This action checks if the packet under consideration matches
> > +            the any flow in table <code>OFTABLE_ECMP_NH_MAC</code>.
> 
> s/the //
> 
> > +            If it is so, then the 1-bit destination register <var>R</var>
> > +            is set to 1.
> > +          </p>
> > +        </dd>
> > +
> > +        <dt><code><var>R</var> = check_ecmp_nh();</code></dt>
> > +        <dd>
> > +          <p>
> > +            This action checks if the packet under consideration matches
> > +            the any flow in table <code>OFTABLE_ECMP_NH</code>.
> 
> s/the //
> 
> > +            If it is so, then the 1-bit destination register <var>R</var>
> > +            is set to 1.
> > +          </p>
> > +        </dd>
> >         </dl>
> >       </column>
> > diff --git a/utilities/ovn-trace.c b/utilities/ovn-trace.c
> > index fd84a1a5e..14daff672 100644
> > --- a/utilities/ovn-trace.c
> > +++ b/utilities/ovn-trace.c
> > @@ -3226,6 +3226,10 @@ trace_actions(const struct ovnact *ovnacts, size_t 
> > ovnacts_len,
> >               break;
> >           case OVNACT_COMMIT_ECMP_NH:
> >               break;
> > +        case OVNACT_CHK_ECMP_NH_MAC:
> > +            break;
> > +        case OVNACT_CHK_ECMP_NH:
> > +            break;
> >           }
> >       }
> >       ofpbuf_uninit(&stack);
> > 
> 
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to