On Fri, Dec 11, 2020 at 3:46 PM Dumitru Ceara <[email protected]> wrote:
>
> Commit fc219d84b667 [0] optimized Load Balancer hairpin support from an
> OVN Southbound perspective by moving generation of flows to detect
> hairpin traffic in ovn-controller.
>
> However, this can be further optimized by relaxing the condition for
> flows that detect hairpin traffic in the "original" direction.
>
> It is safe to exclude the match on datapath.tunnel_key in the original
> direction if we make sure that we only match on traffic that was
> successfully load balanced (i.e., ct.natted = 1).  At this point it
> would be enough to check that ip.src == ip.dst in order to determine
> that traffic needs to be hairpinned.  Because OVS doesn't allow such
> checks between fields we instead check against the known load balancer
> backend IPs: ip.src == backend-ip && ip.dst == backend-ip.
>
> This change improves scalability by reducing the number of hairpin OF
> flows by ~50%.  For example, on a setup with:
> - N Load Balancer VIPs.
> - M Backends per VIP.
> - All N VIPs applied to S logical switches.
>
> Before this change the number of hairpin OF flows was:
> - N x M x S (for original direction) + N x M x S (for reply direction)
>
> With this change the number of hairpin OF flows is:
> - N x M (for original direction ) + N x M x S (for reply direction)
>
> That means that on a setup with N=100 VIPs, M=10 backends, S=100
> switches the number of hairpin OF flows will be 101K vs 200K before this
> change.
>
> [0] fc219d84b667 ("actions: Add new actions chk_lb_hairpin, 
> chk_lb_hairpin_reply and ct_snat_to_vip.")
>
> Signed-off-by: Dumitru Ceara <[email protected]>

Thanks Dumitru for addressing this scale concern and reducing the OF
flows by half.

Could we also do the same even for OFTABLE_CHK_LB_HAIRPIN_REPLY ? Did
you explore that too ?

I applied this patch to master and also to branch-20.12 as it seems an
important fix.

There was one nit which I fixed before applying

---
diff --git a/controller/lflow.c b/controller/lflow.c
index f63a6f56a5..c02585b1eb 100644
--- a/controller/lflow.c
+++ b/controller/lflow.c
@@ -1226,7 +1226,7 @@ add_lb_vip_hairpin_flows(struct ovn_controller_lb *lb,
      * to not include the datapath tunnel_key in the match when determining
      * that a packet needs to be hairpinned because the rest of the match is
      * restrictive enough:
-     * - traffic must have already been load balancedu
+     * - traffic must have already been load balanced.
      * - packets must have ip.src == ip.dst at this point.
      * - the destination protocol and port must be of a valid backend that
      *   has the same IP as ip.dst.

Thanks
Numan

> ---
>  controller/lflow.c           |  25 ++++++---
>  include/ovn/logical-fields.h |  20 ++++++++
>  lib/actions.c                |   4 +-
>  lib/logical-fields.c         |  10 +++-
>  tests/ovn.at                 | 117 
> +++++++++++++++++++++----------------------
>  5 files changed, 108 insertions(+), 68 deletions(-)
>
> diff --git a/controller/lflow.c b/controller/lflow.c
> index fc58a16..f63a6f5 100644
> --- a/controller/lflow.c
> +++ b/controller/lflow.c
> @@ -1221,16 +1221,29 @@ add_lb_vip_hairpin_flows(struct ovn_controller_lb *lb,
>          match_set_tp_src(&hairpin_reply_match, htons(lb_backend->port));
>      }
>
> +    /* In the original direction, only match on traffic that was already
> +     * load balanced, i.e., "ct.natted == 1".  Also, it's good enough
> +     * to not include the datapath tunnel_key in the match when determining
> +     * that a packet needs to be hairpinned because the rest of the match is
> +     * restrictive enough:
> +     * - traffic must have already been load balancedu
> +     * - packets must have ip.src == ip.dst at this point.
> +     * - the destination protocol and port must be of a valid backend that
> +     *   has the same IP as ip.dst.
> +     */
> +    ovs_u128 lb_ct_label = {
> +        .u64.lo = OVN_CT_NATTED,
> +    };
> +    match_set_ct_label_masked(&hairpin_match, lb_ct_label, lb_ct_label);
> +
> +    ofctrl_add_flow(flow_table, OFTABLE_CHK_LB_HAIRPIN, 100,
> +                    lb->slb->header_.uuid.parts[0], &hairpin_match,
> +                    &ofpacts, &lb->slb->header_.uuid);
> +
>      for (size_t i = 0; i < lb->slb->n_datapaths; i++) {
> -        match_set_metadata(&hairpin_match,
> -                           htonll(lb->slb->datapaths[i]->tunnel_key));
>          match_set_metadata(&hairpin_reply_match,
>                             htonll(lb->slb->datapaths[i]->tunnel_key));
>
> -        ofctrl_add_flow(flow_table, OFTABLE_CHK_LB_HAIRPIN, 100,
> -                        lb->slb->header_.uuid.parts[0], &hairpin_match,
> -                        &ofpacts, &lb->slb->header_.uuid);
> -
>          ofctrl_add_flow(flow_table, OFTABLE_CHK_LB_HAIRPIN_REPLY, 100,
>                          lb->slb->header_.uuid.parts[0],
>                          &hairpin_reply_match,
> diff --git a/include/ovn/logical-fields.h b/include/ovn/logical-fields.h
> index 0fe5bc3..aee4748 100644
> --- a/include/ovn/logical-fields.h
> +++ b/include/ovn/logical-fields.h
> @@ -17,6 +17,7 @@
>  #define OVN_LOGICAL_FIELDS_H 1
>
>  #include "openvswitch/meta-flow.h"
> +#include "openvswitch/util.h"
>
>  struct shash;
>
> @@ -140,4 +141,23 @@ ovn_field_from_id(enum ovn_field_id id)
>  const char *event_to_string(enum ovn_controller_event event);
>  int string_to_event(const char *s);
>  const struct ovn_field *ovn_field_from_name(const char *name);
> +
> +/* OVN CT label values
> + * ===================
> + * These are specific ct.label bit values OVN uses to track different types
> + * of traffic.
> + */
> +
> +#define OVN_CT_BLOCKED_BIT 0
> +#define OVN_CT_NATTED_BIT  1
> +
> +#define OVN_CT_BLOCKED 1
> +#define OVN_CT_NATTED  2
> +
> +#define OVN_CT_STR(LABEL_VALUE) OVS_STRINGIZE(LABEL_VALUE)
> +#define OVN_CT_MASKED_STR(LABEL_VALUE) \
> +    OVS_STRINGIZE(LABEL_VALUE) "/" OVS_STRINGIZE(LABEL_VALUE)
> +
> +#define OVN_CT_LABEL_STR(LABEL_VALUE) "ct_label[" OVN_CT_STR(LABEL_VALUE) "]"
> +
>  #endif /* ovn/lib/logical-fields.h */
> diff --git a/lib/actions.c b/lib/actions.c
> index 0705e4e..fbaeb34 100644
> --- a/lib/actions.c
> +++ b/lib/actions.c
> @@ -1224,7 +1224,9 @@ encode_CT_LB(const struct ovnact_ct_lb *cl,
>              ds_put_format(&ds, ":%"PRIu16, dst->port);
>          }
>          ds_put_format(&ds, "),commit,table=%d,zone=NXM_NX_REG%d[0..15],"
> -                      "exec(set_field:2/2->ct_label))",
> +                      "exec(set_field:"
> +                        OVN_CT_MASKED_STR(OVN_CT_NATTED)
> +                      "->ct_label))",
>                        recirc_table, zone_reg);
>      }
>
> diff --git a/lib/logical-fields.c b/lib/logical-fields.c
> index bf61df7..9d08b44 100644
> --- a/lib/logical-fields.c
> +++ b/lib/logical-fields.c
> @@ -129,9 +129,15 @@ ovn_init_symtab(struct shash *symtab)
>      expr_symtab_add_field_scoped(symtab, "ct_label", MFF_CT_LABEL, NULL,
>                                   false, WR_CT_COMMIT);
>      expr_symtab_add_subfield_scoped(symtab, "ct_label.blocked", NULL,
> -                                    "ct_label[0]", WR_CT_COMMIT);
> +                                    "ct_label["
> +                                        OVN_CT_STR(OVN_CT_BLOCKED_BIT)
> +                                    "]",
> +                                    WR_CT_COMMIT);
>      expr_symtab_add_subfield_scoped(symtab, "ct_label.natted", NULL,
> -                                    "ct_label[1]", WR_CT_COMMIT);
> +                                    "ct_label["
> +                                        OVN_CT_STR(OVN_CT_NATTED_BIT)
> +                                    "]",
> +                                    WR_CT_COMMIT);
>      expr_symtab_add_subfield_scoped(symtab, "ct_label.ecmp_reply_eth", NULL,
>                                      "ct_label[32..79]", WR_CT_COMMIT);
>      expr_symtab_add_subfield_scoped(symtab, "ct_label.ecmp_reply_port", NULL,
> diff --git a/tests/ovn.at b/tests/ovn.at
> index f222fd8..310eff9 100644
> --- a/tests/ovn.at
> +++ b/tests/ovn.at
> @@ -22935,7 +22935,7 @@ OVS_WAIT_UNTIL(
>  )
>
>  AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=68 | grep -v NXST | cut 
> -d ' ' -f8-], [0], [dnl
> -priority=100,tcp,metadata=0x1,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
>  ])
>
>  AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=69 | grep -v NXST | cut 
> -d ' ' -f8-], [0], [dnl
> @@ -22965,9 +22965,9 @@ OVS_WAIT_UNTIL(
>  )
>
>  AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=68 | grep -v NXST | cut 
> -d ' ' -f8- | sort], [0], [dnl
> -priority=100,tcp,metadata=0x1,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp,metadata=0x1,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp,metadata=0x1,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042
>  actions=load:0x1->NXM_NX_REG10[[7]]
>  ])
>
>  AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=69 | grep -v NXST | cut 
> -d ' ' -f8- | sort], [0], [dnl
> @@ -23002,9 +23002,9 @@ OVS_WAIT_UNTIL(
>  )
>
>  AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=68 | grep -v NXST | cut 
> -d ' ' -f8- | sort], [0], [dnl
> -priority=100,tcp,metadata=0x1,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp,metadata=0x1,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp,metadata=0x1,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042
>  actions=load:0x1->NXM_NX_REG10[[7]]
>  ])
>
>  AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=69 | grep -v NXST | cut 
> -d ' ' -f8- | sort], [0], [dnl
> @@ -23029,10 +23029,10 @@ OVS_WAIT_UNTIL(
>  )
>
>  AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=68 | grep -v NXST | cut 
> -d ' ' -f8- | sort], [0], [dnl
> -priority=100,tcp,metadata=0x1,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp,metadata=0x1,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp,metadata=0x1,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,udp,metadata=0x1,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,udp,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
>  ])
>
>  AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=69 | grep -v NXST | cut 
> -d ' ' -f8- | sort], [0], [dnl
> @@ -23048,10 +23048,10 @@ 
> priority=100,ct_state=+trk+dnat,ct_nw_dst=88.88.88.90,ip,metadata=0x1 
> actions=ct
>  ])
>
>  AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=68 | grep -v NXST | cut 
> -d ' ' -f8- | sort], [0], [dnl
> -priority=100,tcp,metadata=0x1,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp,metadata=0x1,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp,metadata=0x1,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,udp,metadata=0x1,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,udp,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
>  ])
>
>  AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=69 | grep -v NXST | cut 
> -d ' ' -f8- | sort], [0], [dnl
> @@ -23077,11 +23077,11 @@ OVS_WAIT_UNTIL(
>  )
>
>  AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=68 | grep -v NXST | cut 
> -d ' ' -f8- | sort], [0], [dnl
> -priority=100,tcp,metadata=0x1,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp,metadata=0x1,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp,metadata=0x1,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp6,metadata=0x1,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 
> actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,udp,metadata=0x1,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp6,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,udp,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
>  ])
>
>  AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=69 | grep -v NXST | cut 
> -d ' ' -f8- | sort], [0], [dnl
> @@ -23099,11 +23099,11 @@ 
> priority=100,ct_state=+trk+dnat,ct_nw_dst=88.88.88.90,ip,metadata=0x1 
> actions=ct
>  ])
>
>  AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=68 | grep -v NXST | cut 
> -d ' ' -f8- | sort], [0], [dnl
> -priority=100,tcp,metadata=0x1,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp,metadata=0x1,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp,metadata=0x1,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp6,metadata=0x1,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 
> actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,udp,metadata=0x1,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp6,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,udp,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
>  ])
>
>  AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=69 | grep -v NXST | cut 
> -d ' ' -f8- | sort], [0], [dnl
> @@ -23131,12 +23131,12 @@ OVS_WAIT_UNTIL(
>  )
>
>  AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=68 | grep -v NXST | cut 
> -d ' ' -f8- | sort], [0], [dnl
> -priority=100,tcp,metadata=0x1,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp,metadata=0x1,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp,metadata=0x1,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp6,metadata=0x1,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 
> actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,udp,metadata=0x1,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,udp6,metadata=0x1,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 
> actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp6,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,udp,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,udp6,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
>  ])
>
>  AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=69 | grep -v NXST | cut 
> -d ' ' -f8- | sort], [0], [dnl
> @@ -23155,12 +23155,12 @@ 
> priority=100,ct_state=+trk+dnat,ct_nw_dst=88.88.88.90,ip,metadata=0x1 
> actions=ct
>  ])
>
>  AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=68 | grep -v NXST | cut 
> -d ' ' -f8- | sort], [0], [dnl
> -priority=100,tcp,metadata=0x1,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp,metadata=0x1,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp,metadata=0x1,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp6,metadata=0x1,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 
> actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,udp,metadata=0x1,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,udp6,metadata=0x1,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 
> actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp6,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,udp,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,udp6,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
>  ])
>
>  AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=69 | grep -v NXST | cut 
> -d ' ' -f8- | sort], [0], [dnl
> @@ -23180,22 +23180,23 @@ 
> priority=100,ct_state=+trk+dnat,ct_nw_dst=88.88.88.90,ip,metadata=0x1 
> actions=ct
>
>  check ovn-nbctl --wait=hv ls-lb-add sw1 lb-ipv6-udp
>
> +# Number of hairpin flows shouldn't change as it doesn't depend on how many
> +# datapaths the LB is applied.
>  OVS_WAIT_UNTIL(
> -    [test $(as hv1 ovs-ofctl dump-flows br-int table=68 | grep -v NXST | wc 
> -l) -eq 7]
> +    [test $(as hv1 ovs-ofctl dump-flows br-int table=68 | grep -v NXST | wc 
> -l) -eq 6]
>  )
>
>  OVS_WAIT_UNTIL(
> -    [test $(as hv2 ovs-ofctl dump-flows br-int table=68 | grep -v NXST | wc 
> -l) -eq 7]
> +    [test $(as hv2 ovs-ofctl dump-flows br-int table=68 | grep -v NXST | wc 
> -l) -eq 6]
>  )
>
>  AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=68 | grep -v NXST | cut 
> -d ' ' -f8- | sort], [0], [dnl
> -priority=100,tcp,metadata=0x1,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp,metadata=0x1,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp,metadata=0x1,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp6,metadata=0x1,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 
> actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,udp,metadata=0x1,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,udp6,metadata=0x1,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 
> actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,udp6,metadata=0x2,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 
> actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp6,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,udp,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,udp6,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
>  ])
>
>  AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=69 | grep -v NXST | cut 
> -d ' ' -f8- | sort], [0], [dnl
> @@ -23216,13 +23217,12 @@ 
> priority=100,ct_state=+trk+dnat,ct_nw_dst=88.88.88.90,ip,metadata=0x1 
> actions=ct
>  ])
>
>  AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=68 | grep -v NXST | cut 
> -d ' ' -f8- | sort], [0], [dnl
> -priority=100,tcp,metadata=0x1,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp,metadata=0x1,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp,metadata=0x1,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,tcp6,metadata=0x1,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 
> actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,udp,metadata=0x1,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,udp6,metadata=0x1,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 
> actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,udp6,metadata=0x2,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 
> actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp6,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,udp,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,udp6,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
>  ])
>
>  AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=69 | grep -v NXST | cut 
> -d ' ' -f8- | sort], [0], [dnl
> @@ -23261,13 +23261,13 @@ OVS_WAIT_UNTIL(
>  )
>
>  OVS_WAIT_UNTIL(
> -    [test $(as hv1 ovs-ofctl dump-flows br-int table=68 | grep -v NXST | wc 
> -l) -eq 7]
> +    [test $(as hv1 ovs-ofctl dump-flows br-int table=68 | grep -v NXST | wc 
> -l) -eq 6]
>  )
>
>  check ovn-nbctl --wait=hv lb-del lb-ipv4-tcp
>
>  OVS_WAIT_UNTIL(
> -    [test $(as hv1 ovs-ofctl dump-flows br-int table=68 | grep -v NXST | wc 
> -l) -eq 4]
> +    [test $(as hv1 ovs-ofctl dump-flows br-int table=68 | grep -v NXST | wc 
> -l) -eq 3]
>  )
>
>  OVS_WAIT_UNTIL(
> @@ -23275,10 +23275,9 @@ OVS_WAIT_UNTIL(
>  )
>
>  AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=68 | grep -v NXST | cut 
> -d ' ' -f8- | sort], [0], [dnl
> -priority=100,tcp6,metadata=0x1,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 
> actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,udp,metadata=0x1,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,udp6,metadata=0x1,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 
> actions=load:0x1->NXM_NX_REG10[[7]]
> -priority=100,udp6,metadata=0x2,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 
> actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,tcp6,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,udp,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
> +priority=100,ct_label=0x2/0x2,udp6,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021
>  actions=load:0x1->NXM_NX_REG10[[7]]
>  ])
>
>  AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=69 | grep -v NXST | cut 
> -d ' ' -f8- | sort], [0], [dnl
> --
> 1.8.3.1
>
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to