Message ID | 20250122170819.2050308-1-amusil@redhat.com |
---|---|
State | Accepted |
Headers | show |
Series | [ovs-dev] northd: Consolidate register usage in logical flows. | expand |
Context | Check | Description |
---|---|---|
ovsrobot/apply-robot | warning | apply and check: warning |
ovsrobot/github-robot-_Build_and_Test | success | github build: passed |
ovsrobot/github-robot-_ovn-kubernetes | success | github build: passed |
Hi Ales, Acked-by: Mark Michelson <mmichels@redhat.com> My only suggestion would be to add a comment in northd.c above the definitions for REG_LB_IPV4, REG_LB_IPV6, and REG_LB_PORT that explains that on new connections, these contain the VIP[:port], and on established connections, these contain the backend[:port]. Otherwise, the register names are ambiguous, and the fact they are used for two purposes is not clear. On 1/22/25 12:08, Ales Musil wrote: > We were running out of space in registers. After the consolidation > there are several registers are free to use once again. > The consolidation is mainly done by reusing single register for LB > affinity flows. > > Signed-off-by: Ales Musil <amusil@redhat.com> > --- > include/ovn/logical-fields.h | 7 +- > lib/actions.c | 6 +- > northd/northd.c | 254 +++++++++++++--------------------- > tests/ovn-northd.at | 126 ++++++++--------- > tests/ovn.at | 258 +++++++++++++++++------------------ > tests/system-ovn-kmod.at | 12 +- > 6 files changed, 297 insertions(+), 366 deletions(-) > > diff --git a/include/ovn/logical-fields.h b/include/ovn/logical-fields.h > index 59e4ac3da..6a87fc386 100644 > --- a/include/ovn/logical-fields.h > +++ b/include/ovn/logical-fields.h > @@ -47,7 +47,7 @@ enum ovn_controller_event { > * > * Make sure these don't overlap with the logical fields! */ > #define MFF_LOG_REG0 MFF_REG0 > -#define MFF_LOG_LB_ORIG_DIP_IPV4 MFF_REG1 > +#define MFF_LOG_LB_ORIG_DIP_IPV4 MFF_REG4 > #define MFF_LOG_LB_ORIG_TP_DPORT MFF_REG2 > > #define MFF_LOG_XXREG0 MFF_XXREG0 > @@ -56,9 +56,8 @@ enum ovn_controller_event { > #define MFF_N_LOG_REGS 10 > > #define MFF_LOG_LB_AFF_MATCH_IP4_ADDR MFF_REG4 > -#define MFF_LOG_LB_AFF_MATCH_LS_IP6_ADDR MFF_XXREG0 > -#define MFF_LOG_LB_AFF_MATCH_LR_IP6_ADDR MFF_XXREG1 > -#define MFF_LOG_LB_AFF_MATCH_PORT MFF_REG8 > +#define MFF_LOG_LB_AFF_MATCH_IP6_ADDR MFF_XXREG1 > +#define MFF_LOG_LB_AFF_MATCH_PORT MFF_REG2 > > #define MFF_LOG_CT_ORIG_NW_DST_ADDR MFF_REG1 /* REG_ORIG_DIP_IPV4 */ > #define MFF_LOG_CT_ORIG_IP6_DST_ADDR MFF_XXREG1 /* REG_ORIG_DIP_IPV6 */ > diff --git a/lib/actions.c b/lib/actions.c > index ea30be767..62e73b2c5 100644 > --- a/lib/actions.c > +++ b/lib/actions.c > @@ -5371,11 +5371,7 @@ encode_COMMIT_LB_AFF(const struct ovnact_commit_lb_aff *lb_aff, > imm_backend_ip = (union mf_value) { > .ipv6 = lb_aff->backend, > }; > - if (ep->is_switch) { > - ol_spec->dst.field = mf_from_id(MFF_LOG_LB_AFF_MATCH_LS_IP6_ADDR); > - } else { > - ol_spec->dst.field = mf_from_id(MFF_LOG_LB_AFF_MATCH_LR_IP6_ADDR); > - } > + ol_spec->dst.field = mf_from_id(MFF_LOG_LB_AFF_MATCH_IP6_ADDR); > } else { > ovs_be32 ip4 = in6_addr_get_mapped_ipv4(&lb_aff->backend); > imm_backend_ip = (union mf_value) { > diff --git a/northd/northd.c b/northd/northd.c > index c41a7591b..2385c3b5e 100644 > --- a/northd/northd.c > +++ b/northd/northd.c > @@ -125,20 +125,12 @@ static bool vxlan_mode; > #define REGBIT_FROM_ROUTER_PORT "reg0[18]" > #define REGBIT_IP_FRAG "reg0[19]" > > -#define REG_ORIG_DIP_IPV4 "reg1" > -#define REG_ORIG_DIP_IPV6 "xxreg1" > -#define REG_ORIG_TP_DPORT "reg2[0..15]" > - > -/* Register used to store backend ipv6 address > - * for load balancer affinity. */ > -#define REG_LB_L2_AFF_BACKEND_IP6 "xxreg0" > - > /* Register definitions for switches and routers. */ > > -/* Register used to store backend ipv4 address > - * for load balancer affinity. */ > -#define REG_LB_AFF_BACKEND_IP4 "reg4" > -#define REG_LB_AFF_MATCH_PORT "reg8[0..15]" > +/* Register used for LB. */ > +#define REG_LB_IPV4 "reg4" > +#define REG_LB_IPV6 "xxreg1" > +#define REG_LB_PORT "reg2[0..15]" > > /* Registers for ACL evaluation */ > #define REGBIT_ACL_VERDICT_ALLOW "reg8[16]" > @@ -192,12 +184,6 @@ BUILD_ASSERT_DECL(ACL_OBS_STAGE_MAX < (1 << 2)); > #define REG_DHCP_RELAY_DIP_IPV4 "reg2" > #define REG_ROUTE_TABLE_ID "reg7" > > -/* Register used to store backend ipv6 address > - * for load balancer affinity. */ > -#define REG_LB_L3_AFF_BACKEND_IP6 "xxreg1" > - > -#define REG_ORIG_TP_DPORT_ROUTER "reg9[16..31]" > - > /* Registers used for pasing observability information for switches: > * domain and point ID. */ > #define REG_OBS_POINT_ID_NEW "reg3" > @@ -227,25 +213,27 @@ BUILD_ASSERT_DECL(ACL_OBS_STAGE_MAX < (1 << 2)); > * | | REGBIT_{HAIRPIN/HAIRPIN_REPLY} | | | > * | | REGBIT_ACL_HINT_{ALLOW_NEW/ALLOW/DROP/BLOCK} | | | > * | | REGBIT_ACL_{LABEL/STATELESS} | X | | > - * +----+----------------------------------------------+ X | LB_L2_AFF_BACKEND_IP6 | > - * | R1 | ORIG_DIP_IPV4 (>= IN_PRE_STATEFUL) | R | (>= IN_LB_AFF_CHECK && | > - * +----+----------------------------------------------+ E | <= IN_LB_AFF_LEARN) | > - * | R2 | ORIG_TP_DPORT (>= IN_PRE_STATEFUL) | G | | > - * +----+----------------------------------------------+ 0 | | > + * +----+----------------------------------------------+ X | | > + * | R1 | UNUSED | R | | > + * +----+----------------------------------------------+ E | | > + * | R2 | REG_LB_PORT | G | | > + * | | (>= IN_PRE_STATEFUL && <= IN_LB_AFF_LEARN) | 0 | | > + * +----+----------------------------------------------+ | | > * | R3 | OBS_POINT_ID_NEW | | | > * | | (>= ACL_EVAL* && <= ACL_ACTION*) | | | > * +----+----------------------------------------------+---+-----------------------------------+ > - * | R4 | REG_LB_AFF_BACKEND_IP4 | | | > - * +----+----------------------------------------------+ X | | > - * | R5 | UNUSED | X | ORIG_DIP_IPV6(>= IN_PRE_STATEFUL) | > - * +----+----------------------------------------------+ R | | > - * | R6 | UNUSED | E | | > - * +----+----------------------------------------------+ G | | > - * | R7 | UNUSED | 1 | | > + * | R4 | REG_LB_IPV4 | | | > + * | R4 | (>= IN_PRE_STATEFUL && <= IN_HAIRPIN) | X | | > + * +----+----------------------------------------------+ X | REG_LB_IPV6 | > + * | R5 | UNUSED | R | (>= IN_PRE_STATEFUL && | > + * +----+----------------------------------------------+ E | <= IN_HAIRPIN) | > + * | R6 | UNUSED | G | | > + * +----+----------------------------------------------+ 1 | | > + * | R7 | UNUSED | | | > * +----+----------------------------------------------+---+-----------------------------------+ > - * | R8 | LB_AFF_MATCH_PORT | X | REG_OBS_COLLECTOR_ID_NEW | > - * | | (>= IN_LB_AFF_CHECK && <= IN_LB_AFF_LEARN) | R | REG_OBS_COLLECTOR_ID_EST | > - * | | | E | (>= ACL_EVAL* && <= ACL_ACTION*) | > + * | R8 | REG_OBS_COLLECTOR_ID_NEW | X | | > + * | | REG_OBS_COLLECTOR_ID_EST | R | | > + * | | (>= ACL_EVAL* && <= ACL_ACTION*) | E | | > * +----+----------------------------------------------+ G +-----------------------------------+ > * | R9 | OBS_POINT_ID_EST | 4 | | > * | | (>= ACL_EVAL* && <= ACL_ACTION*) | | | > @@ -256,23 +244,26 @@ BUILD_ASSERT_DECL(ACL_OBS_STAGE_MAX < (1 << 2)); > * | R0 | REGBIT_ND_RA_OPTS_RESULT | | | | | > * | | (= IN_ND_RA_OPTIONS) | X | | | | > * | | NEXT_HOP_IPV4 | R | | | | > - * | | (>= IP_INPUT) | E | INPORT_ETH_ADDR | X | | > + * | | (>= IN_IP_ROUTING) | E | INPORT_ETH_ADDR | X | | > * +-----+---------------------------+ G | (< IP_INPUT) | X | | > * | R1 | UNUSED | 0 | | R | | > - * | | | | | E | NEXT_HOP_IPV6 (>= DEFRAG ) | > + * | | | | | E | NEXT_HOP_IPV6 (>= IN_IP_ROUTING) | > * +-----+---------------------------+---+-----------------+ G | | > - * | R2 REG_DHCP_RELAY_DIP_IPV4 | X | | 0 | | > - * | | | R | | | | > - * +-----+---------------------------+ E | UNUSED | | | > - * | R3 | UNUSED | G | | | | > - * | | | 1 | | | | > + * | R2 | REG_DHCP_RELAY_DIP_IPV4 | | | 0 | | > + * | | REG_LB_PORT | X | | 0 | | > + * | | (>= IN_LB_AFF_CHECK | R | | | | > + * | | <= IN_LB_AFF_LEARN) | E | | | | > + * +-----+---------------------------+ G | UNUSED | | | > + * | R3 | UNUSED | 1 | | | | > + * | | | | | | | > * +-----+---------------------------+---+-----------------+---+------------------------------------+ > - * | R4 | REG_LB_AFF_BACKEND_IP4 | X | | | | > - * | | | R | | | | > + * | R4 | REG_LB_IPV4 | X | | | | > + * | | (>= IN_LB_AFF_CHECK && | R | | | | > + * | | <= IN_LB_AFF_LEARN) | R | | | | > * +-----+---------------------------+ E | UNUSED | X | | > - * | R5 | SRC_IPV4 for ARP-REQ | G | | X | | > - * | | (>= IP_INPUT) | 2 | | R | LB_L3_AFF_BACKEND_IP6 | > - * +-----+---------------------------+---+-----------------+ E | (<= IN_DNAT) | > + * | R5 | SRC_IPV4 for ARP-REQ | G | | X | REG_LB_IPV6 | > + * | | (>= IP_INPUT) | 2 | | R | (>= IN_LB_AFF_CHECK && | > + * +-----+---------------------------+---+-----------------+ E | <= IN_LB_AFF_LEARN) | > * | R6 | UNUSED | X | | G | | > * | | | R | | 1 | | > * +-----+---------------------------+ E | UNUSED | | | > @@ -282,7 +273,7 @@ BUILD_ASSERT_DECL(ACL_OBS_STAGE_MAX < (1 << 2)); > * +-----+---------------------------+---+-----------------+---+------------------------------------+ > * | R8 | ECMP_GROUP_ID | | | > * | | ECMP_MEMBER_ID | | | > - * | | LB_AFF_MATCH_PORT | X | | > + * | | | X | | > * +-----+---------------------------+ R | | > * | | REGBIT_{ | E | | > * | | EGRESS_LOOPBACK/ | G | UNUSED | > @@ -292,9 +283,6 @@ BUILD_ASSERT_DECL(ACL_OBS_STAGE_MAX < (1 << 2)); > * | |REGBIT_DHCP_RELAY_REQ_CHK/ | | | > * | |REGBIT_DHCP_RELAY_RESP_CHK | | | > * | |REGBIT_NEXTHOP_IS_IPV4} | | | > - * | | | | | > - * | | REG_ORIG_TP_DPORT_ROUTER | | | > - * | | | | | > * +-----+---------------------------+---+-----------------+ > * > */ > @@ -3621,6 +3609,16 @@ build_lb_vip_actions(const struct ovn_northd_lb *lb, > bool reject = !lb_vip->n_backends && lb_vip->empty_backend_rej; > bool drop = !lb_vip->n_backends && !lb_vip->empty_backend_rej; > > + if (ls_dp || lb->affinity_timeout) { > + const char *ip_reg = > + lb_vip->address_family == AF_INET ? REG_LB_IPV4 : REG_LB_IPV6; > + ds_put_format(action, "%s = %s; ", ip_reg, lb_vip->vip_str); > + > + if (lb_vip->port_str) { > + ds_put_format(action, REG_LB_PORT" = %s; ", lb_vip->port_str); > + } > + } > + > if (lb_vip_nb->lb_health_check) { > ds_put_cstr(action, "ct_lb_mark(backends="); > > @@ -7867,29 +7865,19 @@ build_lb_rules_pre_stateful(struct lflow_table *lflows, > */ > if (lb->vips[i].address_family == AF_INET) { > ip_match = "ip4"; > - ds_put_format(action, REG_ORIG_DIP_IPV4 " = %s; ", > + ds_put_format(action, REG_LB_IPV4 " = %s; ", > lb_vip->vip_str); > } else { > ip_match = "ip6"; > - ds_put_format(action, REG_ORIG_DIP_IPV6 " = %s; ", > + ds_put_format(action, REG_LB_IPV6 " = %s; ", > lb_vip->vip_str); > } > > - const char *proto = NULL; > if (lb_vip->port_str) { > - proto = "tcp"; > - if (lb->nlb->protocol) { > - if (!strcmp(lb->nlb->protocol, "udp")) { > - proto = "udp"; > - } else if (!strcmp(lb->nlb->protocol, "sctp")) { > - proto = "sctp"; > - } > - } > - > /* Store the original destination port to be used when generating > * hairpin flows. > */ > - ds_put_format(action, REG_ORIG_TP_DPORT " = %s; ", > + ds_put_format(action, REG_LB_PORT " = %s; ", > lb_vip->port_str); > } > ds_put_cstr(action, "ct_lb_mark;"); > @@ -7897,7 +7885,8 @@ build_lb_rules_pre_stateful(struct lflow_table *lflows, > ds_put_format(match, REGBIT_CONNTRACK_NAT" == 1 && %s.dst == %s", > ip_match, lb_vip->vip_str); > if (lb_vip->port_str) { > - ds_put_format(match, " && %s.dst == %s", proto, lb_vip->port_str); > + ds_put_format(match, " && %s.dst == %s", lb->proto, > + lb_vip->port_str); > } > > ovn_lflow_add_with_dp_group( > @@ -7913,34 +7902,30 @@ build_lb_rules_pre_stateful(struct lflow_table *lflows, > * - load balancing affinity check: > * table=lr_in_lb_aff_check, priority=100 > * match=(new_lb_match) > - * action=(REG_NEXT_HOP_IPV4 = ip4.dst; > - * REG_ORIG_TP_DPORT_ROUTER = tcp.dst; > - * REGBIT_KNOWN_LB_SESSION = chk_lb_aff(); next;) > + * action=(REGBIT_KNOWN_LB_SESSION = chk_lb_aff(); next;) > * > * - load balancing: > * table=lr_in_dnat, priority=150 > * match=(REGBIT_KNOWN_LB_SESSION == 1 && ct.new && ip4.dst == V > - * && REG_LB_AFF_BACKEND_IP4 == B1 && REG_LB_AFF_MATCH_PORT == BP1) > - * action=(REG_NEXT_HOP_IPV4 = V; lb_action; > - * ct_lb_mark(backends=B1:BP1; ct_flag);) > + * && REG_LB_IPV4 == B1 && REG_LB_PORT == BP1) > + * action=(lb_action; ct_lb_mark(backends=B1:BP1; ct_flag);) > * table=lr_in_dnat, priority=150 > * match=(REGBIT_KNOWN_LB_SESSION == 1 && ct.new && ip4.dst == V > - * && REG_LB_AFF_BACKEND_IP4 == B2 && REG_LB_AFF_MATCH_PORT == BP2) > - * action=(REG_NEXT_HOP_IPV4 = V; lb_action; > - * ct_lb_mark(backends=B2:BP2; ct_flag);) > + * && REG_LB_IPV4 == B2 && REG_LB_PORT == BP2) > + * action=(lb_action; ct_lb_mark(backends=B2:BP2; ct_flag);) > * > * - load balancing affinity learn: > * table=lr_in_lb_aff_learn, priority=100 > * match=(REGBIT_KNOWN_LB_SESSION == 0 > * && ct.new && ip4 > - * && REG_NEXT_HOP_IPV4 == V && REG_ORIG_TP_DPORT_ROUTER = VP > + * && REG_LB_IPV4 == V && REG_LB_PORT = VP > * && ip4.dst == B1 && tcp.dst == BP1) > * action=(commit_lb_aff(vip = "V:VP", backend = "B1:BP1", > * proto = tcp, timeout = T)); > * table=lr_in_lb_aff_learn, priority=100 > * match=(REGBIT_KNOWN_LB_SESSION == 0 > * && ct.new && ip4 > - * && REG_NEXT_HOP_IPV4 == V && REG_ORIG_TP_DPORT_ROUTER = VP > + * && REG_LB_IPV4 == V && REG_LB_PORT = VP > * && ip4.dst == B2 && tcp.dst == BP2) > * action=(commit_lb_aff(vip = "V:VP", backend = "B2:BP2", > * proto = tcp, timeout = T)); > @@ -7963,14 +7948,11 @@ build_lb_affinity_lr_flows(struct lflow_table *lflows, > struct ds aff_action_learn = DS_EMPTY_INITIALIZER; > struct ds aff_match = DS_EMPTY_INITIALIZER; > struct ds aff_match_learn = DS_EMPTY_INITIALIZER; > - struct ds aff_check_action = DS_EMPTY_INITIALIZER; > > bool ipv6 = !IN6_IS_ADDR_V4MAPPED(&lb_vip->vip); > const char *ip_match = ipv6 ? "ip6" : "ip4"; > > - const char *reg_vip = ipv6 ? REG_NEXT_HOP_IPV6 : REG_NEXT_HOP_IPV4; > - const char *reg_backend = > - ipv6 ? REG_LB_L3_AFF_BACKEND_IP6 : REG_LB_AFF_BACKEND_IP4; > + const char *reg_ip = ipv6 ? REG_LB_IPV6 : REG_LB_IPV4; > const char *ct_flag = NULL; > if (lb_action && !strcmp(lb_action, "flags.skip_snat_for_lb = 1; ")) { > ct_flag = "; skip_snat"; > @@ -7980,22 +7962,12 @@ build_lb_affinity_lr_flows(struct lflow_table *lflows, > } > > /* Create affinity check flow. */ > - ds_put_format(&aff_check_action, "%s = %s.dst; ", reg_vip, ip_match); > - > - if (lb_vip->port_str) { > - ds_put_format(&aff_check_action, REG_ORIG_TP_DPORT_ROUTER" = %s.dst; ", > - lb->proto); > - } > - ds_put_cstr(&aff_check_action, REGBIT_KNOWN_LB_SESSION > - " = chk_lb_aff(); next;"); > - > ovn_lflow_add_with_dp_group( > lflows, dp_bitmap, ods_size(lr_datapaths), S_ROUTER_IN_LB_AFF_CHECK, > - 100, new_lb_match, ds_cstr(&aff_check_action), &lb->nlb->header_, > - lflow_ref); > + 100, new_lb_match, REGBIT_KNOWN_LB_SESSION" = chk_lb_aff(); next;", > + &lb->nlb->header_, lflow_ref); > > /* Prepare common part of affinity LB and affinity learn action. */ > - ds_put_format(&aff_action, "%s = %s; ", reg_vip, lb_vip->vip_str); > ds_put_cstr(&aff_action_learn, "commit_lb_aff(vip = \""); > > if (lb_vip->port_str) { > @@ -8015,19 +7987,19 @@ build_lb_affinity_lr_flows(struct lflow_table *lflows, > if (lb_vip->port_str) { > ds_put_format(&aff_match_learn, REGBIT_KNOWN_LB_SESSION" == 0 && " > "ct.new && %s && %s == %s && " > - REG_ORIG_TP_DPORT_ROUTER" == %s && " > - "%s.dst == ", ip_match, reg_vip, lb_vip->vip_str, > + REG_LB_PORT " == %s && " > + "%s.dst == ", ip_match, reg_ip, lb_vip->vip_str, > lb_vip->port_str, ip_match); > } else { > ds_put_format(&aff_match_learn, REGBIT_KNOWN_LB_SESSION" == 0 && " > "ct.new && %s && %s == %s && %s.dst == ", ip_match, > - reg_vip, lb_vip->vip_str, ip_match); > + reg_ip, lb_vip->vip_str, ip_match); > } > > /* Prepare common part of affinity match. */ > ds_put_format(&aff_match, REGBIT_KNOWN_LB_SESSION" == 1 && " > "ct.new && %s.dst == %s && %s == ", ip_match, > - lb_vip->vip_str, reg_backend); > + lb_vip->vip_str, reg_ip); > > /* Store the common part length. */ > size_t aff_action_len = aff_action.length; > @@ -8050,7 +8022,7 @@ build_lb_affinity_lr_flows(struct lflow_table *lflows, > > ds_put_format(&aff_match_learn, " && %s.dst == %d", > lb->proto, backend->port); > - ds_put_format(&aff_match, " && "REG_LB_AFF_MATCH_PORT" == %d", > + ds_put_format(&aff_match, " && "REG_LB_PORT" == %d", > backend->port); > } else { > ds_put_cstr(&aff_action, backend->ip_str); > @@ -8094,7 +8066,6 @@ build_lb_affinity_lr_flows(struct lflow_table *lflows, > ds_destroy(&aff_action_learn); > ds_destroy(&aff_match); > ds_destroy(&aff_match_learn); > - ds_destroy(&aff_check_action); > } > > /* Builds the logical switch flows related to load balancer affinity. > @@ -8102,35 +8073,33 @@ build_lb_affinity_lr_flows(struct lflow_table *lflows, > * affinity timeout set to T, it generates the following logical flows: > * - load balancing affinity check: > * table=ls_in_lb_aff_check, priority=100 > - * match=(ct.new && ip4 > - * && REG_ORIG_DIP_IPV4 == V && REG_ORIG_TP_DPORT == VP) > + * match=(ct.new && ip4 && ip4.dst == V && PROTO && PROTO.dst == VP) > * action=(REGBIT_KNOWN_LB_SESSION = chk_lb_aff(); next;) > * > * - load balancing: > * table=ls_in_lb, priority=150 > * match=(REGBIT_KNOWN_LB_SESSION == 1 && ct.new && ip4.dst == V > - * && REG_LB_AFF_BACKEND_IP4 == B1 && REG_LB_AFF_MATCH_PORT == BP1) > - * action=(REG_ORIG_DIP_IPV4 = V; REG_ORIG_TP_DPORT = VP; > + * && PROTO && PROTO.dst == VP) > + * action=(REG_LB_IPV4 = V; REG_LB_PORT = VP; > * ct_lb_mark(backends=B1:BP1);) > * table=ls_in_lb, priority=150 > * match=(REGBIT_KNOWN_LB_SESSION == 1 && ct.new && ip4.dst == V > - * && REG_LB_AFF_BACKEND_IP4 == B2 && REG_LB_AFF_MATCH_PORT == BP2) > - * action=(REG_ORIG_DIP_IPV4 = V; > - * REG_ORIG_TP_DPORT = VP; > + * && PROTO && PROTO.dst == VP) > + * action=(REG_LB_IPV4 = V; REG_LB_PORT = VP; > * ct_lb_mark(backends=B1:BP2);) > * > * - load balancing affinity learn: > * table=ls_in_lb_aff_learn, priority=100 > * match=(REGBIT_KNOWN_LB_SESSION == 0 > * && ct.new && ip4 > - * && REG_ORIG_DIP_IPV4 == V && REG_ORIG_TP_DPORT == VP > + * && REG_LB_IPV4 == V && REG_LB_PORT == VP > * && ip4.dst == B1 && tcp.dst == BP1) > * action=(commit_lb_aff(vip = "V:VP", backend = "B1:BP1", > * proto = tcp, timeout = T)); > * table=ls_in_lb_aff_learn, priority=100 > * match=(REGBIT_KNOWN_LB_SESSION == 0 > * && ct.new && ip4 > - * && REG_ORIG_DIP_IPV4 == V && REG_ORIG_TP_DPORT == VP > + * && REG_LB_IPV4 == V && REG_LB_PORT == VP > * && ip4.dst == B2 && tcp.dst == BP2) > * action=(commit_lb_aff(vip = "V:VP", backend = "B2:BP2", > * proto = tcp, timeout = T)); > @@ -8149,19 +8118,16 @@ build_lb_affinity_ls_flows(struct lflow_table *lflows, > > const struct ovn_northd_lb *lb = lb_dps->lb; > struct ds new_lb_match = DS_EMPTY_INITIALIZER; > - if (IN6_IS_ADDR_V4MAPPED(&lb_vip->vip)) { > - ds_put_format(&new_lb_match, > - "ct.new && ip4 && "REG_ORIG_DIP_IPV4 " == %s", > - lb_vip->vip_str); > - } else { > - ds_put_format(&new_lb_match, > - "ct.new && ip6 && "REG_ORIG_DIP_IPV6 " == %s", > - lb_vip->vip_str); > - } > + bool ipv6 = lb_vip->address_family == AF_INET6; > + const char *ip_match = ipv6 ? "ip6" : "ip4"; > + const char *reg_ip = ipv6 ? REG_LB_IPV6 : REG_LB_IPV4; > + > + ds_put_format(&new_lb_match, "ct.new && %s && %s.dst == %s", > + ip_match, ip_match, lb_vip->vip_str); > > if (lb_vip->port_str) { > - ds_put_format(&new_lb_match, " && "REG_ORIG_TP_DPORT " == %s", > - lb_vip->port_str); > + ds_put_format(&new_lb_match, " && %s && %s.dst == %s", > + lb->proto, lb->proto, lb_vip->port_str); > } > > static char *aff_check = REGBIT_KNOWN_LB_SESSION" = chk_lb_aff(); next;"; > @@ -8177,19 +8143,12 @@ build_lb_affinity_ls_flows(struct lflow_table *lflows, > struct ds aff_match = DS_EMPTY_INITIALIZER; > struct ds aff_match_learn = DS_EMPTY_INITIALIZER; > > - bool ipv6 = !IN6_IS_ADDR_V4MAPPED(&lb_vip->vip); > - const char *ip_match = ipv6 ? "ip6" : "ip4"; > - > - const char *reg_vip = ipv6 ? REG_ORIG_DIP_IPV6 : REG_ORIG_DIP_IPV4; > - const char *reg_backend = > - ipv6 ? REG_LB_L2_AFF_BACKEND_IP6 : REG_LB_AFF_BACKEND_IP4; > - > /* Prepare common part of affinity LB and affinity learn action. */ > - ds_put_format(&aff_action, "%s = %s; ", reg_vip, lb_vip->vip_str); > + ds_put_format(&aff_action, "%s = %s; ", reg_ip, lb_vip->vip_str); > ds_put_cstr(&aff_action_learn, "commit_lb_aff(vip = \""); > > if (lb_vip->port_str) { > - ds_put_format(&aff_action, REG_ORIG_TP_DPORT" = %s; ", > + ds_put_format(&aff_action, REG_LB_PORT" = %s; ", > lb_vip->port_str); > ds_put_format(&aff_action_learn, ipv6 ? "[%s]:%s" : "%s:%s", > lb_vip->vip_str, lb_vip->port_str); > @@ -8204,19 +8163,19 @@ build_lb_affinity_ls_flows(struct lflow_table *lflows, > if (lb_vip->port_str) { > ds_put_format(&aff_match_learn, REGBIT_KNOWN_LB_SESSION" == 0 && " > "ct.new && %s && %s == %s && " > - REG_ORIG_TP_DPORT" == %s && %s.dst == ", > - ip_match, reg_vip, lb_vip->vip_str, > + REG_LB_PORT" == %s && %s.dst == ", > + ip_match, reg_ip, lb_vip->vip_str, > lb_vip->port_str, ip_match); > } else { > ds_put_format(&aff_match_learn, REGBIT_KNOWN_LB_SESSION" == 0 && " > "ct.new && %s && %s == %s && %s.dst == ", > - ip_match, reg_vip, lb_vip->vip_str, ip_match); > + ip_match, reg_ip, lb_vip->vip_str, ip_match); > } > > /* Prepare common part of affinity match. */ > ds_put_format(&aff_match, REGBIT_KNOWN_LB_SESSION" == 1 && " > "ct.new && %s.dst == %s && %s == ", ip_match, > - lb_vip->vip_str, reg_backend); > + lb_vip->vip_str, reg_ip); > > /* Store the common part length. */ > size_t aff_action_len = aff_action.length; > @@ -8238,7 +8197,7 @@ build_lb_affinity_ls_flows(struct lflow_table *lflows, > > ds_put_format(&aff_match_learn, " && %s.dst == %d", > lb->proto, backend->port); > - ds_put_format(&aff_match, " && "REG_LB_AFF_MATCH_PORT" == %d", > + ds_put_format(&aff_match, " && "REG_LB_PORT" == %d", > backend->port); > } else { > ds_put_cstr(&aff_action, backend->ip_str); > @@ -8315,33 +8274,10 @@ build_lb_rules(struct lflow_table *lflows, struct ovn_lb_datapaths *lb_dps, > for (size_t i = 0; i < lb->n_vips; i++) { > struct ovn_lb_vip *lb_vip = &lb->vips[i]; > struct ovn_northd_lb_vip *lb_vip_nb = &lb->vips_nb[i]; > - const char *ip_match = NULL; > + const char *ip_match = > + lb_vip->address_family == AF_INET ? "ip4" : "ip6"; > > ds_clear(action); > - > - /* Store the original destination IP to be used when generating > - * hairpin flows. > - * If the packet is fragmented, then the flow which saves the > - * original destination IP (and port) in the "ls_in_pre_stateful" > - * stage will not be hit. > - */ > - if (lb_vip->address_family == AF_INET) { > - ip_match = "ip4"; > - ds_put_format(action, REG_ORIG_DIP_IPV4 " = %s; ", > - lb_vip->vip_str); > - } else { > - ip_match = "ip6"; > - ds_put_format(action, REG_ORIG_DIP_IPV6 " = %s; ", > - lb_vip->vip_str); > - } > - > - if (lb_vip->port_str) { > - /* Store the original destination port to be used when generating > - * hairpin flows. > - */ > - ds_put_format(action, REG_ORIG_TP_DPORT " = %s; ", > - lb_vip->port_str); > - } > ds_clear(match); > > /* New connections in Ingress table. */ > @@ -8489,13 +8425,13 @@ build_lb_hairpin(const struct ls_stateful_record *ls_stateful_rec, > * */ > ovn_lflow_add(lflows, od, S_SWITCH_IN_LB, 110, > "ct.trk && !ct.rpl && "REGBIT_IP_FRAG" == 1 && ip4", > - REG_ORIG_DIP_IPV4 " = ct_nw_dst(); " > - REG_ORIG_TP_DPORT " = ct_tp_dst(); next;", > + REG_LB_IPV4 " = ct_nw_dst(); " > + REG_LB_PORT " = ct_tp_dst(); next;", > lflow_ref); > ovn_lflow_add(lflows, od, S_SWITCH_IN_LB, 110, > "ct.trk && !ct.rpl && "REGBIT_IP_FRAG" == 1 && ip6", > - REG_ORIG_DIP_IPV6 " = ct_ip6_dst(); " > - REG_ORIG_TP_DPORT " = ct_tp_dst(); next;", > + REG_LB_IPV6 " = ct_ip6_dst(); " > + REG_LB_PORT " = ct_tp_dst(); next;", > lflow_ref); > > /* Set REGBIT_HAIRPIN in the original direction and > diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at > index edfd5764b..2b1791de0 100644 > --- a/tests/ovn-northd.at > +++ b/tests/ovn-northd.at > @@ -1425,7 +1425,7 @@ check ovn-nbctl --wait=sb ls-lb-add sw0 lb1 > AT_CAPTURE_FILE([sbflows]) > OVS_WAIT_FOR_OUTPUT( > [ovn-sbctl dump-flows sw0 | tee sbflows | grep 'priority=120.*backends' | ovn_strip_lflows], 0, [dnl > - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > ]) > > # disabled LSPs should not be a backend of Load Balancer > @@ -1434,7 +1434,7 @@ check ovn-nbctl lsp-set-enabled sw0-p1 disabled > AT_CAPTURE_FILE([sbflows]) > OVS_WAIT_FOR_OUTPUT( > [ovn-sbctl dump-flows sw0 | tee sbflows | grep 'priority=120.*backends' | ovn_strip_lflows], 0, [dnl > - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=20.0.0.3:80);) > + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=20.0.0.3:80);) > ]) > wait_row_count Service_Monitor 1 > > @@ -1443,7 +1443,7 @@ check ovn-nbctl lsp-set-enabled sw0-p1 enabled > AT_CAPTURE_FILE([sbflows]) > OVS_WAIT_FOR_OUTPUT( > [ovn-sbctl dump-flows sw0 | tee sbflows | grep 'priority=120.*backends' | ovn_strip_lflows], 0, [dnl > - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > ]) > wait_row_count Service_Monitor 2 > > @@ -1454,7 +1454,7 @@ wait_row_count Service_Monitor 0 > AT_CAPTURE_FILE([sbflows2]) > OVS_WAIT_FOR_OUTPUT( > [ovn-sbctl dump-flows sw0 | tee sbflows2 | grep 'priority=120.*backends' | ovn_strip_lflows], [0], > -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > ]) > > AS_BOX([Create the Load_Balancer_Health_Check again.]) > @@ -1466,7 +1466,7 @@ check ovn-nbctl --wait=sb sync > > ovn-sbctl dump-flows sw0 | grep backends | grep priority=120 > lflows.txt > AT_CHECK([cat lflows.txt | ovn_strip_lflows], [0], [dnl > - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > ]) > > AS_BOX([Get the uuid of both the service_monitor]) > @@ -1476,7 +1476,7 @@ sm_sw1_p1=$(fetch_column Service_Monitor _uuid logical_port=sw1-p1) > AT_CAPTURE_FILE([sbflows3]) > OVS_WAIT_FOR_OUTPUT( > [ovn-sbctl dump-flows sw0 | tee sbflows 3 | grep 'priority=120.*backends' | ovn_strip_lflows], [0], > -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > ]) > > AS_BOX([Set the service monitor for sw1-p1 to offline]) > @@ -1487,7 +1487,7 @@ check ovn-nbctl --wait=sb sync > AT_CAPTURE_FILE([sbflows4]) > OVS_WAIT_FOR_OUTPUT( > [ovn-sbctl dump-flows sw0 | tee sbflows4 | grep 'priority=120.*backends' | ovn_strip_lflows], [0], > -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) > +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) > ]) > > AS_BOX([Set the service monitor for sw0-p1 to offline]) > @@ -1516,7 +1516,7 @@ check ovn-nbctl --wait=sb sync > AT_CAPTURE_FILE([sbflows7]) > OVS_WAIT_FOR_OUTPUT( > [ovn-sbctl dump-flows sw0 | tee sbflows7 | grep backends | grep priority=120 | ovn_strip_lflows], 0, > -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > ]) > > AS_BOX([Set the service monitor for sw1-p1 to error]) > @@ -1527,7 +1527,7 @@ check ovn-nbctl --wait=sb sync > ovn-sbctl dump-flows sw0 | grep "ip4.dst == 10.0.0.10 && tcp.dst == 80" \ > | grep priority=120 > lflows.txt > AT_CHECK([cat lflows.txt | grep ls_in_lb | ovn_strip_lflows], [0], [dnl > - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) > + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) > ]) > > AS_BOX([Add one more vip to lb1]) > @@ -1553,8 +1553,8 @@ AT_CAPTURE_FILE([sbflows9]) > OVS_WAIT_FOR_OUTPUT( > [ovn-sbctl dump-flows sw0 | tee sbflows9 | grep backends | grep priority=120 | ovn_strip_lflows], > 0, > -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) > - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg1 = 10.0.0.40; reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000);) > +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) > + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg4 = 10.0.0.40; reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000);) > ]) > > AS_BOX([Set the service monitor for sw1-p1 to online]) > @@ -1567,8 +1567,8 @@ AT_CAPTURE_FILE([sbflows10]) > OVS_WAIT_FOR_OUTPUT( > [ovn-sbctl dump-flows sw0 | tee sbflows10 | grep backends | grep priority=120 | ovn_strip_lflows], > 0, > -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg1 = 10.0.0.40; reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000,20.0.0.3:80);) > +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg4 = 10.0.0.40; reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000,20.0.0.3:80);) > ]) > > AS_BOX([Associate lb1 to sw1]) > @@ -1577,8 +1577,8 @@ AT_CAPTURE_FILE([sbflows11]) > OVS_WAIT_FOR_OUTPUT( > [ovn-sbctl dump-flows sw1 | tee sbflows11 | grep backends | grep priority=120 | ovn_strip_lflows], > 0, [dnl > - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg1 = 10.0.0.40; reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000,20.0.0.3:80);) > + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg4 = 10.0.0.40; reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000,20.0.0.3:80);) > ]) > > AS_BOX([Now create lb2 same as lb1 but udp protocol.]) > @@ -4666,16 +4666,16 @@ check_stateful_flows() { > table=??(ls_in_pre_stateful ), priority=100 , match=(reg0[[0]] == 1), action=(ct_next;) > table=??(ls_in_pre_stateful ), priority=110 , match=(reg0[[2]] == 1), action=(ct_lb_mark;) > table=??(ls_in_pre_stateful ), priority=115 , match=(reg0[[2]] == 1 && ip.is_frag), action=(reg0[[19]] = 1; ct_lb_mark;) > - table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark;) > - table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 10.0.0.20 && tcp.dst == 80), action=(reg1 = 10.0.0.20; reg2[[0..15]] = 80; ct_lb_mark;) > + table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark;) > + table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 10.0.0.20 && tcp.dst == 80), action=(reg4 = 10.0.0.20; reg2[[0..15]] = 80; ct_lb_mark;) > ]) > > AT_CHECK([grep "ls_in_lb " sw0flows | ovn_strip_lflows], [0], [dnl > table=??(ls_in_lb ), priority=0 , match=(1), action=(next;) > - table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) > + table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) > table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); reg2[[0..15]] = ct_tp_dst(); next;) > - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.4:8080);) > - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.20 && tcp.dst == 80), action=(reg1 = 10.0.0.20; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.40:8080);) > + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.4:8080);) > + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.20 && tcp.dst == 80), action=(reg4 = 10.0.0.20; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.40:8080);) > ]) > > AT_CHECK([grep "ls_in_stateful" sw0flows | ovn_strip_lflows], [0], [dnl > @@ -4780,7 +4780,7 @@ check ovn-nbctl --wait=sb ls-lb-add sw0 lb1 > AT_CHECK([ovn-sbctl dump-flows sw0 | grep "ls_in_lb " | ovn_strip_lflows ], [0], [dnl > table=??(ls_in_lb ), priority=0 , match=(1), action=(next;) > table=??(ls_in_lb ), priority=110 , match=(ct.new && ip4.dst == 10.0.0.20), action=(drop;) > - table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) > + table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) > table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); reg2[[0..15]] = ct_tp_dst(); next;) > ]) > > @@ -7842,8 +7842,8 @@ AT_CHECK([grep -e "ls_in_acl.*eval" -e "ls_in_acl_hint" lsflows | ovn_strip_lflo > > AT_CHECK([grep -e "ls_in_lb " lsflows | ovn_strip_lflows], [0], [dnl > table=??(ls_in_lb ), priority=0 , match=(1), action=(next;) > - table=??(ls_in_lb ), priority=110 , match=(ct.new && ip4.dst == 10.0.0.2), action=(reg1 = 10.0.0.2; ct_lb_mark(backends=10.0.0.10);) > - table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) > + table=??(ls_in_lb ), priority=110 , match=(ct.new && ip4.dst == 10.0.0.2), action=(reg4 = 10.0.0.2; ct_lb_mark(backends=10.0.0.10);) > + table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) > table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); reg2[[0..15]] = ct_tp_dst(); next;) > ]) > > @@ -7899,8 +7899,8 @@ AT_CHECK([grep -e "ls_in_acl.*eval" -e "ls_in_acl_hint" lsflows | ovn_strip_lflo > > AT_CHECK([grep -e "ls_in_lb " lsflows | ovn_strip_lflows], [0], [dnl > table=??(ls_in_lb ), priority=0 , match=(1), action=(next;) > - table=??(ls_in_lb ), priority=110 , match=(ct.new && ip4.dst == 10.0.0.2), action=(reg1 = 10.0.0.2; ct_lb_mark(backends=10.0.0.10);) > - table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) > + table=??(ls_in_lb ), priority=110 , match=(ct.new && ip4.dst == 10.0.0.2), action=(reg4 = 10.0.0.2; ct_lb_mark(backends=10.0.0.10);) > + table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) > table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); reg2[[0..15]] = ct_tp_dst(); next;) > ]) > > @@ -7956,8 +7956,8 @@ AT_CHECK([grep -e "ls_in_acl.*eval" -e "ls_in_acl_hint" lsflows | ovn_strip_lflo > > AT_CHECK([grep -e "ls_in_lb " lsflows | ovn_strip_lflows], [0], [dnl > table=??(ls_in_lb ), priority=0 , match=(1), action=(next;) > - table=??(ls_in_lb ), priority=110 , match=(ct.new && ip4.dst == 10.0.0.2), action=(reg1 = 10.0.0.2; ct_lb_mark(backends=10.0.0.10);) > - table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) > + table=??(ls_in_lb ), priority=110 , match=(ct.new && ip4.dst == 10.0.0.2), action=(reg4 = 10.0.0.2; ct_lb_mark(backends=10.0.0.10);) > + table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) > table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); reg2[[0..15]] = ct_tp_dst(); next;) > ]) > > @@ -9345,13 +9345,13 @@ AT_CAPTURE_FILE([S1flows]) > > AT_CHECK([grep "ls_in_lb " S0flows | ovn_strip_lflows], [0], [dnl > table=??(ls_in_lb ), priority=0 , match=(1), action=(next;) > - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg1 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80);) > - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 172.16.0.11 && tcp.dst == 8080), action=(reg1 = 172.16.0.11; reg2[[0..15]] = 8080; ct_lb_mark(backends=10.0.0.2:8080);) > + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg4 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80);) > + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 172.16.0.11 && tcp.dst == 8080), action=(reg4 = 172.16.0.11; reg2[[0..15]] = 8080; ct_lb_mark(backends=10.0.0.2:8080);) > ]) > AT_CHECK([grep "ls_in_lb " S1flows | ovn_strip_lflows], [0], [dnl > table=??(ls_in_lb ), priority=0 , match=(1), action=(next;) > - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg1 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80);) > - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 172.16.0.11 && tcp.dst == 8080), action=(reg1 = 172.16.0.11; reg2[[0..15]] = 8080; ct_lb_mark(backends=10.0.0.2:8080);) > + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg4 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80);) > + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 172.16.0.11 && tcp.dst == 8080), action=(reg4 = 172.16.0.11; reg2[[0..15]] = 8080; ct_lb_mark(backends=10.0.0.2:8080);) > ]) > > ovn-sbctl get datapath S0 _uuid > dp_uuids > @@ -9477,20 +9477,20 @@ AT_CAPTURE_FILE([S0flows]) > > AT_CHECK([grep "ls_in_lb_aff_check" S0flows | ovn_strip_lflows], [0], [dnl > table=??(ls_in_lb_aff_check ), priority=0 , match=(1), action=(next;) > - table=??(ls_in_lb_aff_check ), priority=100 , match=(ct.new && ip4 && reg1 == 172.16.0.10 && reg2[[0..15]] == 80), action=(reg9[[6]] = chk_lb_aff(); next;) > + table=??(ls_in_lb_aff_check ), priority=100 , match=(ct.new && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(reg9[[6]] = chk_lb_aff(); next;) > ]) > AT_CHECK([grep "ls_in_lb " S0flows | ovn_strip_lflows], [0], [dnl > table=??(ls_in_lb ), priority=0 , match=(1), action=(next;) > - table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) > + table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) > table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); reg2[[0..15]] = ct_tp_dst(); next;) > - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg1 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80);) > - table=??(ls_in_lb ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg8[[0..15]] == 80), action=(reg1 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80);) > - table=??(ls_in_lb ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg8[[0..15]] == 80), action=(reg1 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=20.0.0.2:80);) > + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg4 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80);) > + table=??(ls_in_lb ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg2[[0..15]] == 80), action=(reg4 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80);) > + table=??(ls_in_lb ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg2[[0..15]] == 80), action=(reg4 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=20.0.0.2:80);) > ]) > AT_CHECK([grep "ls_in_lb_aff_learn" S0flows | ovn_strip_lflows], [0], [dnl > table=??(ls_in_lb_aff_learn ), priority=0 , match=(1), action=(next;) > - table=??(ls_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == 0 && ct.new && ip4 && reg1 == 172.16.0.10 && reg2[[0..15]] == 80 && ip4.dst == 10.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = "172.16.0.10:80", backend = "10.0.0.2:80", proto = tcp, timeout = 60); /* drop */) > - table=??(ls_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == 0 && ct.new && ip4 && reg1 == 172.16.0.10 && reg2[[0..15]] == 80 && ip4.dst == 20.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = "172.16.0.10:80", backend = "20.0.0.2:80", proto = tcp, timeout = 60); /* drop */) > + table=??(ls_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == 0 && ct.new && ip4 && reg4 == 172.16.0.10 && reg2[[0..15]] == 80 && ip4.dst == 10.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = "172.16.0.10:80", backend = "10.0.0.2:80", proto = tcp, timeout = 60); /* drop */) > + table=??(ls_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == 0 && ct.new && ip4 && reg4 == 172.16.0.10 && reg2[[0..15]] == 80 && ip4.dst == 20.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = "172.16.0.10:80", backend = "20.0.0.2:80", proto = tcp, timeout = 60); /* drop */) > ]) > > AS_BOX([Test LR flows]) > @@ -9499,13 +9499,13 @@ AT_CAPTURE_FILE([R1flows]) > > AT_CHECK([grep "lr_in_lb_aff_check" R1flows | ovn_strip_lflows], [0], [dnl > table=??(lr_in_lb_aff_check ), priority=0 , match=(1), action=(next;) > - table=??(lr_in_lb_aff_check ), priority=100 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(reg0 = ip4.dst; reg9[[16..31]] = tcp.dst; reg9[[6]] = chk_lb_aff(); next;) > + table=??(lr_in_lb_aff_check ), priority=100 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(reg9[[6]] = chk_lb_aff(); next;) > ]) > AT_CHECK([grep "lr_in_dnat " R1flows | ovn_strip_lflows], [0], [dnl > table=??(lr_in_dnat ), priority=0 , match=(1), action=(next;) > - table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80);) > - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; ct_lb_mark(backends=10.0.0.2:80);) > - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; ct_lb_mark(backends=20.0.0.2:80);) > + table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(reg4 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80);) > + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg2[[0..15]] == 80), action=(ct_lb_mark(backends=10.0.0.2:80);) > + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg2[[0..15]] == 80), action=(ct_lb_mark(backends=20.0.0.2:80);) > table=??(lr_in_dnat ), priority=50 , match=(ct.est && !ct.rel && !ct.new && !ct.rpl && ct_mark.natted), action=(next;) > table=??(lr_in_dnat ), priority=50 , match=(ct.rel && !ct.est && !ct.new && !ct.rpl), action=(ct_commit_nat;) > table=??(lr_in_dnat ), priority=70 , match=(ct.est && !ct.rel && !ct.new && !ct.rpl && ct_mark.natted && ct_mark.force_snat == 1), action=(flags.force_snat_for_lb = 1; next;) > @@ -9515,8 +9515,8 @@ AT_CHECK([grep "lr_in_dnat " R1flows | ovn_strip_lflows], [0], [dnl > ]) > AT_CHECK([grep "lr_in_lb_aff_learn" R1flows | ovn_strip_lflows], [0], [dnl > table=??(lr_in_lb_aff_learn ), priority=0 , match=(1), action=(next;) > - table=??(lr_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == 0 && ct.new && ip4 && reg0 == 172.16.0.10 && reg9[[16..31]] == 80 && ip4.dst == 10.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = "172.16.0.10:80", backend = "10.0.0.2:80", proto = tcp, timeout = 60); /* drop */) > - table=??(lr_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == 0 && ct.new && ip4 && reg0 == 172.16.0.10 && reg9[[16..31]] == 80 && ip4.dst == 20.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = "172.16.0.10:80", backend = "20.0.0.2:80", proto = tcp, timeout = 60); /* drop */) > + table=??(lr_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == 0 && ct.new && ip4 && reg4 == 172.16.0.10 && reg2[[0..15]] == 80 && ip4.dst == 10.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = "172.16.0.10:80", backend = "10.0.0.2:80", proto = tcp, timeout = 60); /* drop */) > + table=??(lr_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == 0 && ct.new && ip4 && reg4 == 172.16.0.10 && reg2[[0..15]] == 80 && ip4.dst == 20.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = "172.16.0.10:80", backend = "20.0.0.2:80", proto = tcp, timeout = 60); /* drop */) > ]) > > AS_BOX([Test LR flows - skip_snat=true]) > @@ -9527,9 +9527,9 @@ AT_CAPTURE_FILE([R1flows_skip_snat]) > > AT_CHECK([grep "lr_in_dnat " R1flows_skip_snat | ovn_strip_lflows], [0], [dnl > table=??(lr_in_dnat ), priority=0 , match=(1), action=(next;) > - table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) > - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; skip_snat);) > - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; flags.skip_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; skip_snat);) > + table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(flags.skip_snat_for_lb = 1; reg4 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) > + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; skip_snat);) > + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; skip_snat);) > table=??(lr_in_dnat ), priority=50 , match=(ct.est && !ct.rel && !ct.new && !ct.rpl && ct_mark.natted), action=(next;) > table=??(lr_in_dnat ), priority=50 , match=(ct.rel && !ct.est && !ct.new && !ct.rpl), action=(ct_commit_nat;) > table=??(lr_in_dnat ), priority=70 , match=(ct.est && !ct.rel && !ct.new && !ct.rpl && ct_mark.natted && ct_mark.force_snat == 1), action=(flags.force_snat_for_lb = 1; next;) > @@ -9548,9 +9548,9 @@ AT_CAPTURE_FILE([R1flows_force_snat]) > > AT_CHECK([grep "lr_in_dnat " R1flows_force_snat | ovn_strip_lflows], [0], [dnl > table=??(lr_in_dnat ), priority=0 , match=(1), action=(next;) > - table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(flags.force_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; force_snat);) > - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; flags.force_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; force_snat);) > - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; flags.force_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; force_snat);) > + table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(flags.force_snat_for_lb = 1; reg4 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; force_snat);) > + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg2[[0..15]] == 80), action=(flags.force_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; force_snat);) > + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg2[[0..15]] == 80), action=(flags.force_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; force_snat);) > table=??(lr_in_dnat ), priority=50 , match=(ct.est && !ct.rel && !ct.new && !ct.rpl && ct_mark.natted), action=(next;) > table=??(lr_in_dnat ), priority=50 , match=(ct.rel && !ct.est && !ct.new && !ct.rpl), action=(ct_commit_nat;) > table=??(lr_in_dnat ), priority=70 , match=(ct.est && !ct.rel && !ct.new && !ct.rpl && ct_mark.natted && ct_mark.force_snat == 1), action=(flags.force_snat_for_lb = 1; next;) > @@ -9568,9 +9568,9 @@ AT_CAPTURE_FILE([R1flows_force_skip_snat]) > > AT_CHECK([grep "lr_in_dnat " R1flows_force_skip_snat | ovn_strip_lflows], [0], [dnl > table=??(lr_in_dnat ), priority=0 , match=(1), action=(next;) > - table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) > - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; skip_snat);) > - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; flags.skip_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; skip_snat);) > + table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(flags.skip_snat_for_lb = 1; reg4 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) > + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; skip_snat);) > + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; skip_snat);) > table=??(lr_in_dnat ), priority=50 , match=(ct.est && !ct.rel && !ct.new && !ct.rpl && ct_mark.natted), action=(next;) > table=??(lr_in_dnat ), priority=50 , match=(ct.rel && !ct.est && !ct.new && !ct.rpl), action=(ct_commit_nat;) > table=??(lr_in_dnat ), priority=70 , match=(ct.est && !ct.rel && !ct.new && !ct.rpl && ct_mark.natted && ct_mark.force_snat == 1), action=(flags.force_snat_for_lb = 1; next;) > @@ -9592,12 +9592,12 @@ AT_CAPTURE_FILE([R1flows_2lbs]) > > AT_CHECK([grep "lr_in_dnat " R1flows_2lbs | ovn_strip_lflows], [0], [dnl > table=??(lr_in_dnat ), priority=0 , match=(1), action=(next;) > - table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) > - table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.20 && tcp && tcp.dst == 80), action=(flags.force_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; force_snat);) > - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; skip_snat);) > - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; flags.skip_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; skip_snat);) > - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.20 && reg4 == 10.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.20; flags.force_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; force_snat);) > - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.20 && reg4 == 20.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.20; flags.force_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; force_snat);) > + table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(flags.skip_snat_for_lb = 1; reg4 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) > + table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.20 && tcp && tcp.dst == 80), action=(flags.force_snat_for_lb = 1; reg4 = 172.16.0.20; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; force_snat);) > + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; skip_snat);) > + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; skip_snat);) > + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.20 && reg4 == 10.0.0.2 && reg2[[0..15]] == 80), action=(flags.force_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; force_snat);) > + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.20 && reg4 == 20.0.0.2 && reg2[[0..15]] == 80), action=(flags.force_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; force_snat);) > table=??(lr_in_dnat ), priority=50 , match=(ct.est && !ct.rel && !ct.new && !ct.rpl && ct_mark.natted), action=(next;) > table=??(lr_in_dnat ), priority=50 , match=(ct.rel && !ct.est && !ct.new && !ct.rpl), action=(ct_commit_nat;) > table=??(lr_in_dnat ), priority=70 , match=(ct.est && !ct.rel && !ct.new && !ct.rpl && ct_mark.natted && ct_mark.force_snat == 1), action=(flags.force_snat_for_lb = 1; next;) > @@ -14058,10 +14058,10 @@ ovn-sbctl dump-flows s1 > s1flows > AT_CAPTURE_FILE([s1flows]) > > AT_CHECK([grep "ls_in_pre_stateful" s1flows | ovn_strip_lflows | grep "30.0.0.1"], [0], [dnl > - table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 30.0.0.1), action=(reg1 = 30.0.0.1; ct_lb_mark;) > + table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 30.0.0.1), action=(reg4 = 30.0.0.1; ct_lb_mark;) > ]) > AT_CHECK([grep "ls_in_lb" s1flows | ovn_strip_lflows | grep "30.0.0.1"], [0], [dnl > - table=??(ls_in_lb ), priority=110 , match=(ct.new && ip4.dst == 30.0.0.1), action=(reg1 = 30.0.0.1; ct_lb_mark(backends=172.16.0.103,172.16.0.102,172.16.0.101);) > + table=??(ls_in_lb ), priority=110 , match=(ct.new && ip4.dst == 30.0.0.1), action=(reg4 = 30.0.0.1; ct_lb_mark(backends=172.16.0.103,172.16.0.102,172.16.0.101);) > ]) > > # Associate load balancer to lr1 with DGP > @@ -14283,10 +14283,10 @@ ovn-sbctl dump-flows s1 > s1flows > AT_CAPTURE_FILE([s1flows]) > > AT_CHECK([grep "ls_in_pre_stateful" s1flows | ovn_strip_lflows | grep "30.0.0.1"], [0], [dnl > - table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 30.0.0.1), action=(reg1 = 30.0.0.1; ct_lb_mark;) > + table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 30.0.0.1), action=(reg4 = 30.0.0.1; ct_lb_mark;) > ]) > AT_CHECK([grep "ls_in_lb" s1flows | ovn_strip_lflows | grep "30.0.0.1"], [0], [dnl > - table=??(ls_in_lb ), priority=110 , match=(ct.new && ip4.dst == 30.0.0.1), action=(reg1 = 30.0.0.1; ct_lb_mark(backends=172.16.0.103,172.16.0.102,172.16.0.101);) > + table=??(ls_in_lb ), priority=110 , match=(ct.new && ip4.dst == 30.0.0.1), action=(reg4 = 30.0.0.1; ct_lb_mark(backends=172.16.0.103,172.16.0.102,172.16.0.101);) > ]) > > # Associate load balancer to lr1 with DGP > diff --git a/tests/ovn.at b/tests/ovn.at > index b49a63f3e..e9144b0cd 100644 > --- a/tests/ovn.at > +++ b/tests/ovn.at > @@ -2161,13 +2161,13 @@ reg9[[5]] = chk_ecmp_nh(); > > # commit_lb_aff > commit_lb_aff(vip = "172.16.0.123:8080", backend = "10.0.0.3:8080", proto = tcp, timeout = 30); > - encodes as learn(table=OFTABLE_CHK_LB_AFFINITY,idle_timeout=30,delete_learned,cookie=0xaaaaaaaa,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=172.16.0.123,nw_proto=6,tcp_dst=8080,load:0x1->NXM_NX_REG10[[14]],load:0xa000003->NXM_NX_REG4[[]],load:0x1f90->NXM_NX_REG8[[0..15]]) > + encodes as learn(table=OFTABLE_CHK_LB_AFFINITY,idle_timeout=30,delete_learned,cookie=0xaaaaaaaa,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=172.16.0.123,nw_proto=6,tcp_dst=8080,load:0x1->NXM_NX_REG10[[14]],load:0xa000003->NXM_NX_REG4[[]],load:0x1f90->NXM_NX_REG2[[0..15]]) > > commit_lb_aff(vip = "172.16.0.123", backend = "10.0.0.3", timeout = 30); > encodes as learn(table=OFTABLE_CHK_LB_AFFINITY,idle_timeout=30,delete_learned,cookie=0xaaaaaaaa,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=172.16.0.123,load:0x1->NXM_NX_REG10[[14]],load:0xa000003->NXM_NX_REG4[[]]) > > commit_lb_aff(vip = "[[::1]]:8080", backend = "[[::2]]:8080", proto = tcp, timeout = 30); > - encodes as learn(table=OFTABLE_CHK_LB_AFFINITY,idle_timeout=30,delete_learned,cookie=0xaaaaaaaa,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=::1,nw_proto=6,tcp_dst=8080,load:0x1->NXM_NX_REG10[[14]],load:0x2->NXM_NX_XXREG0[[]],load:0x1f90->NXM_NX_REG8[[0..15]]) > + encodes as learn(table=OFTABLE_CHK_LB_AFFINITY,idle_timeout=30,delete_learned,cookie=0xaaaaaaaa,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=::1,nw_proto=6,tcp_dst=8080,load:0x1->NXM_NX_REG10[[14]],load:0x2->NXM_NX_XXREG1[[]],load:0x1f90->NXM_NX_REG2[[0..15]]) > > # chk_lb_aff() > reg9[[6]] = chk_lb_aff(); > @@ -25576,8 +25576,8 @@ OVS_WAIT_FOR_OUTPUT( > [ovn-sbctl dump-flows > sbflows > ovn-sbctl dump-flows sw0 | grep ct_lb_mark | grep priority=120 | sed 's/table=..//'], 0, > [dnl > - (ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark;) > - (ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80; hash_fields="ip_dst,ip_src,tcp_dst,tcp_src");) > + (ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark;) > + (ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80; hash_fields="ip_dst,ip_src,tcp_dst,tcp_src");) > ]) > > AT_CAPTURE_FILE([sbflows2]) > @@ -25621,7 +25621,7 @@ AT_CHECK( > [grep "ip4.dst == 10.0.0.10 && tcp.dst == 80" sbflows3 | grep priority=120 |\ > ovn_strip_lflows], [0], [dnl > table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(drop;) > - table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark;) > + table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark;) > ]) > > AT_CAPTURE_FILE([sbflows4]) > @@ -30627,7 +30627,7 @@ OVS_WAIT_UNTIL( > ) > > AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > ]) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY], [0], [dnl > @@ -30635,7 +30635,7 @@ NXST_FLOW reply (xid=0x8): > ]) > > AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > ]) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | grep -v NXST], [1], [dnl > @@ -30654,9 +30654,9 @@ OVS_WAIT_UNTIL( > ) > > AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > ]) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY], [0], [dnl > @@ -30664,8 +30664,8 @@ NXST_FLOW reply (xid=0x8): > ]) > > AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > ]) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | grep -v NXST], [1], [dnl > @@ -30687,17 +30687,17 @@ OVS_WAIT_UNTIL( > ) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > ]) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY | grep -v NXST], [1], [dnl > ]) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > ]) > > check ovn-nbctl --wait=hv ls-lb-add sw0 lb-ipv4-udp > @@ -30711,35 +30711,35 @@ OVS_WAIT_UNTIL( > ) > > AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > ]) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY | grep -v NXST], [1], [dnl > ]) > > AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > ]) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > ]) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY | grep -v NXST], [1], [dnl > ]) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > ]) > > check ovn-nbctl --wait=hv ls-lb-add sw0 lb-ipv6-tcp > @@ -30753,39 +30753,39 @@ OVS_WAIT_UNTIL( > ) > > AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > ]) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY | grep -v NXST], [1], [dnl > ]) > > AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > ]) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > ]) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY | grep -v NXST], [1], [dnl > ]) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > ]) > > check ovn-nbctl --wait=hv ls-lb-add sw0 lb-ipv6-udp > @@ -30799,11 +30799,11 @@ OVS_WAIT_UNTIL( > ) > > AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > ]) > > @@ -30811,19 +30811,19 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY > ]) > > AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > ]) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > ]) > > @@ -30831,10 +30831,10 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY > ]) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > ]) > > @@ -30851,11 +30851,11 @@ OVS_WAIT_UNTIL( > ) > > AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > ]) > > @@ -30863,19 +30863,19 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY > ]) > > AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > ]) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > ]) > > @@ -30883,10 +30883,10 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY > ]) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > ]) > > @@ -30900,12 +30900,12 @@ OVS_WAIT_UNTIL( > ) > > AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,ip,reg1=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,ip,reg4=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > ]) > > @@ -30913,21 +30913,21 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY > ]) > > AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg1=0x58585859 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg4=0x58585859 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) > ]) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,ip,reg1=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,ip,reg4=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > ]) > > @@ -30935,12 +30935,12 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY > ]) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg1=0x58585859 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg4=0x58585859 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) > ]) > > check ovn-nbctl --wait=hv ls-lb-add sw0 lb-ipv6 > @@ -30953,13 +30953,13 @@ OVS_WAIT_UNTIL( > ) > > AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,ip,reg1=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,ip,reg4=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) > table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,ipv6,reg4=0x88000000,reg5=0,reg6=0,reg7=0x89,ipv6_src=4200::2,ipv6_dst=4200::2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > ]) > > @@ -30967,23 +30967,23 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY > ]) > > AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg1=0x58585859 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg4=0x58585859 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) > table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ipv6,reg4=0x88000000,reg5=0,reg6=0,reg7=0x89 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::89)) > ]) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,ip,reg1=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,ip,reg4=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) > table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,ipv6,reg4=0x88000000,reg5=0,reg6=0,reg7=0x89,ipv6_src=4200::2,ipv6_dst=4200::2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > ]) > > @@ -30991,12 +30991,12 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY > ]) > > AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg1=0x58585859 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg4=0x58585859 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) > table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ipv6,reg4=0x88000000,reg5=0,reg6=0,reg7=0x89 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::89)) > ]) > > @@ -31093,7 +31093,7 @@ OVS_WAIT_UNTIL( > > AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > ]) > > @@ -31103,7 +31103,7 @@ NXST_FLOW reply (xid=0x8): > > AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl > table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > ]) > > @@ -36078,15 +36078,15 @@ AT_CHECK([ovs-ofctl dump-groups br-int | grep 'nat(dst=85.85.85.44:8504)' -c], [ > dnl Ensure hairpin flows are correct. > as hv1 > AT_CHECK([ovs-ofctl dump-flows br-int | grep table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all], [0], [dnl > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b01,reg2=0x10cd/0xffff,nw_src=85.85.85.1,nw_dst=85.85.85.1,tp_dst=8501 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.1,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b02,reg2=0x10ce/0xffff,nw_src=85.85.85.21,nw_dst=85.85.85.21,tp_dst=8502 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b02,reg2=0x10ce/0xffff,nw_src=85.85.85.22,nw_dst=85.85.85.22,tp_dst=8502 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b03,reg2=0x10cf/0xffff,nw_src=85.85.85.31,nw_dst=85.85.85.31,tp_dst=8503 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b03,reg2=0x10cf/0xffff,nw_src=85.85.85.32,nw_dst=85.85.85.32,tp_dst=8503 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b04,reg2=0x10d0/0xffff,nw_src=85.85.85.41,nw_dst=85.85.85.41,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b04,reg2=0x10d0/0xffff,nw_src=85.85.85.42,nw_dst=85.85.85.42,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b04,reg2=0x10d0/0xffff,nw_src=85.85.85.43,nw_dst=85.85.85.43,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b04,reg2=0x10d0/0xffff,nw_src=85.85.85.44,nw_dst=85.85.85.44,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10cd/0xffff,reg4=0x2b2b2b01,nw_src=85.85.85.1,nw_dst=85.85.85.1,tp_dst=8501 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.1,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=68, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10ce/0xffff,reg4=0x2b2b2b02,nw_src=85.85.85.21,nw_dst=85.85.85.21,tp_dst=8502 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=68, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10ce/0xffff,reg4=0x2b2b2b02,nw_src=85.85.85.22,nw_dst=85.85.85.22,tp_dst=8502 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=68, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10cf/0xffff,reg4=0x2b2b2b03,nw_src=85.85.85.31,nw_dst=85.85.85.31,tp_dst=8503 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=68, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10cf/0xffff,reg4=0x2b2b2b03,nw_src=85.85.85.32,nw_dst=85.85.85.32,tp_dst=8503 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=68, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10d0/0xffff,reg4=0x2b2b2b04,nw_src=85.85.85.41,nw_dst=85.85.85.41,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=68, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10d0/0xffff,reg4=0x2b2b2b04,nw_src=85.85.85.42,nw_dst=85.85.85.42,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=68, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10d0/0xffff,reg4=0x2b2b2b04,nw_src=85.85.85.43,nw_dst=85.85.85.43,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=68, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10d0/0xffff,reg4=0x2b2b2b04,nw_src=85.85.85.44,nw_dst=85.85.85.44,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > ]) > > dnl Change Chassis_Template_Var mappings > @@ -36137,15 +36137,15 @@ AT_CHECK([ovs-ofctl dump-groups br-int | grep 'nat(dst=84.84.84.44:8404)' -c], [ > dnl Ensure hairpin flows are correct. > as hv1 > AT_CHECK([ovs-ofctl dump-flows br-int | grep table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all], [0], [dnl > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a01,reg2=0x1069/0xffff,nw_src=84.84.84.1,nw_dst=84.84.84.1,tp_dst=8401 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.1,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a02,reg2=0x106a/0xffff,nw_src=84.84.84.21,nw_dst=84.84.84.21,tp_dst=8402 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a02,reg2=0x106a/0xffff,nw_src=84.84.84.22,nw_dst=84.84.84.22,tp_dst=8402 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a03,reg2=0x106b/0xffff,nw_src=84.84.84.31,nw_dst=84.84.84.31,tp_dst=8403 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a03,reg2=0x106b/0xffff,nw_src=84.84.84.32,nw_dst=84.84.84.32,tp_dst=8403 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a04,reg2=0x106c/0xffff,nw_src=84.84.84.41,nw_dst=84.84.84.41,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a04,reg2=0x106c/0xffff,nw_src=84.84.84.42,nw_dst=84.84.84.42,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a04,reg2=0x106c/0xffff,nw_src=84.84.84.43,nw_dst=84.84.84.43,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a04,reg2=0x106c/0xffff,nw_src=84.84.84.44,nw_dst=84.84.84.44,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1069/0xffff,reg4=0x2a2a2a01,nw_src=84.84.84.1,nw_dst=84.84.84.1,tp_dst=8401 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.1,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106a/0xffff,reg4=0x2a2a2a02,nw_src=84.84.84.21,nw_dst=84.84.84.21,tp_dst=8402 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106a/0xffff,reg4=0x2a2a2a02,nw_src=84.84.84.22,nw_dst=84.84.84.22,tp_dst=8402 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106b/0xffff,reg4=0x2a2a2a03,nw_src=84.84.84.31,nw_dst=84.84.84.31,tp_dst=8403 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106b/0xffff,reg4=0x2a2a2a03,nw_src=84.84.84.32,nw_dst=84.84.84.32,tp_dst=8403 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106c/0xffff,reg4=0x2a2a2a04,nw_src=84.84.84.41,nw_dst=84.84.84.41,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106c/0xffff,reg4=0x2a2a2a04,nw_src=84.84.84.42,nw_dst=84.84.84.42,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106c/0xffff,reg4=0x2a2a2a04,nw_src=84.84.84.43,nw_dst=84.84.84.43,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106c/0xffff,reg4=0x2a2a2a04,nw_src=84.84.84.44,nw_dst=84.84.84.44,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > ]) > > dnl Remove Chassis_Template_Variables and check that everything is > diff --git a/tests/system-ovn-kmod.at b/tests/system-ovn-kmod.at > index 170024a61..f7745b979 100644 > --- a/tests/system-ovn-kmod.at > +++ b/tests/system-ovn-kmod.at > @@ -151,12 +151,12 @@ tcp,orig=(src=172.16.1.2,dst=172.16.1.100,sport=<cleared>,dport=<cleared>),reply > > dp_key=$(printf "0x%x" $(fetch_column datapath tunnel_key external_ids:name=R2)) > AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_AFFINITY --no-stats | strip_cookie | sed -e 's/load:0xc0a80[[0-9]]02/load:0xc0a80<cleared>02/'], [0], [dnl > - table=OFTABLE_CHK_LB_AFFINITY, idle_timeout=60, tcp,metadata=$dp_key,nw_src=172.16.1.2,nw_dst=172.16.1.100,tp_dst=8080 actions=load:0x1->NXM_NX_REG10[[14]],load:0xc0a80<cleared>02->NXM_NX_REG4[[]],load:0x50->NXM_NX_REG8[[0..15]] > + table=OFTABLE_CHK_LB_AFFINITY, idle_timeout=60, tcp,metadata=$dp_key,nw_src=172.16.1.2,nw_dst=172.16.1.100,tp_dst=8080 actions=load:0x1->NXM_NX_REG10[[14]],load:0xc0a80<cleared>02->NXM_NX_REG4[[]],load:0x50->NXM_NX_REG2[[0..15]] > ]) > > check_affinity_flows () { > -n1=$(ovs-ofctl dump-flows br-int table=$dnat |awk '/priority=150,ct_state=\+new\+trk,ip,reg4=0xc0a80102,.*nw_dst=172.16.1.100/{print substr($4,11,length($4)-11)}') > -n2=$(ovs-ofctl dump-flows br-int table=$dnat |awk '/priority=150,ct_state=\+new\+trk,ip,reg4=0xc0a80202,.*nw_dst=172.16.1.100/{print substr($4,11,length($4)-11)}') > +n1=$(ovs-ofctl dump-flows br-int table=$dnat |awk '/priority=150,ct_state=\+new\+trk,ip,reg2=0x50\/0xffff,reg4=0xc0a80102,.*nw_dst=172.16.1.100/{print substr($4,11,length($4)-11)}') > +n2=$(ovs-ofctl dump-flows br-int table=$dnat |awk '/priority=150,ct_state=\+new\+trk,ip,reg2=0x50\/0xffff,reg4=0xc0a80202,.*nw_dst=172.16.1.100/{print substr($4,11,length($4)-11)}') > [[ $n1 -gt 0 -a $n2 -eq 0 ]] || [[ $n1 -eq 0 -a $n2 -gt 0 ]] > echo $? > } > @@ -452,12 +452,12 @@ tcp,orig=(src=fd72::2,dst=fd30::1,sport=<cleared>,dport=<cleared>),reply=(src=fd > > dp_key=$(printf "0x%x" $(fetch_column datapath tunnel_key external_ids:name=R2)) > AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_AFFINITY --no-stats | strip_cookie | sed -e 's/load:0xfd1[[0-9]]000000000000/load:0xfd1<cleared>000000000000/'], [0], [dnl > - table=OFTABLE_CHK_LB_AFFINITY, idle_timeout=60, tcp6,metadata=$dp_key,ipv6_src=fd72::2,ipv6_dst=fd30::1,tp_dst=8080 actions=load:0x1->NXM_NX_REG10[[14]],load:0x2->NXM_NX_XXREG1[[0..63]],load:0xfd1<cleared>000000000000->NXM_NX_XXREG1[[64..127]],load:0x50->NXM_NX_REG8[[0..15]] > + table=OFTABLE_CHK_LB_AFFINITY, idle_timeout=60, tcp6,metadata=$dp_key,ipv6_src=fd72::2,ipv6_dst=fd30::1,tp_dst=8080 actions=load:0x1->NXM_NX_REG10[[14]],load:0x2->NXM_NX_XXREG1[[0..63]],load:0xfd1<cleared>000000000000->NXM_NX_XXREG1[[64..127]],load:0x50->NXM_NX_REG2[[0..15]] > ]) > > check_affinity_flows () { > -n1=$(ovs-ofctl dump-flows br-int table=$dnat |awk '/priority=150,ct_state=\+new\+trk,ipv6,reg4=0xfd110000,.*ipv6_dst=fd30::1\s/{print substr($4,11,length($4)-11)}') > -n2=$(ovs-ofctl dump-flows br-int table=$dnat |awk '/priority=150,ct_state=\+new\+trk,ipv6,reg4=0xfd120000,.*ipv6_dst=fd30::1\s/{print substr($4,11,length($4)-11)}') > +n1=$(ovs-ofctl dump-flows br-int table=$dnat |awk '/priority=150,ct_state=\+new\+trk,ipv6,reg2=0x50\/0xffff,reg4=0xfd110000,.*ipv6_dst=fd30::1\s/{print substr($4,11,length($4)-11)}') > +n2=$(ovs-ofctl dump-flows br-int table=$dnat |awk '/priority=150,ct_state=\+new\+trk,ipv6,reg2=0x50\/0xffff,reg4=0xfd120000,.*ipv6_dst=fd30::1\s/{print substr($4,11,length($4)-11)}') > [[ $n1 -gt 0 -a $n2 -eq 0 ]] || [[ $n1 -eq 0 -a $n2 -gt 0 ]] > echo $? > }
On 1/22/25 16:59, Mark Michelson wrote: > Hi Ales, > > Acked-by: Mark Michelson <mmichels@redhat.com> > > My only suggestion would be to add a comment in northd.c above the > definitions for REG_LB_IPV4, REG_LB_IPV6, and REG_LB_PORT that explains > that on new connections, these contain the VIP[:port], and on > established connections, these contain the backend[:port]. Otherwise, > the register names are ambiguous, and the fact they are used for two > purposes is not clear. > > On 1/22/25 12:08, Ales Musil wrote: >> We were running out of space in registers. After the consolidation >> there are several registers are free to use once again. >> The consolidation is mainly done by reusing single register for LB >> affinity flows. >> >> Signed-off-by: Ales Musil <amusil@redhat.com> I added the comment and pushed the patch to main. Thanks Ales! >> --- >> include/ovn/logical-fields.h | 7 +- >> lib/actions.c | 6 +- >> northd/northd.c | 254 +++++++++++++--------------------- >> tests/ovn-northd.at | 126 ++++++++--------- >> tests/ovn.at | 258 +++++++++++++++++------------------ >> tests/system-ovn-kmod.at | 12 +- >> 6 files changed, 297 insertions(+), 366 deletions(-) >> >> diff --git a/include/ovn/logical-fields.h b/include/ovn/logical-fields.h >> index 59e4ac3da..6a87fc386 100644 >> --- a/include/ovn/logical-fields.h >> +++ b/include/ovn/logical-fields.h >> @@ -47,7 +47,7 @@ enum ovn_controller_event { >> * >> * Make sure these don't overlap with the logical fields! */ >> #define MFF_LOG_REG0 MFF_REG0 >> -#define MFF_LOG_LB_ORIG_DIP_IPV4 MFF_REG1 >> +#define MFF_LOG_LB_ORIG_DIP_IPV4 MFF_REG4 >> #define MFF_LOG_LB_ORIG_TP_DPORT MFF_REG2 >> #define MFF_LOG_XXREG0 MFF_XXREG0 >> @@ -56,9 +56,8 @@ enum ovn_controller_event { >> #define MFF_N_LOG_REGS 10 >> #define MFF_LOG_LB_AFF_MATCH_IP4_ADDR MFF_REG4 >> -#define MFF_LOG_LB_AFF_MATCH_LS_IP6_ADDR MFF_XXREG0 >> -#define MFF_LOG_LB_AFF_MATCH_LR_IP6_ADDR MFF_XXREG1 >> -#define MFF_LOG_LB_AFF_MATCH_PORT MFF_REG8 >> +#define MFF_LOG_LB_AFF_MATCH_IP6_ADDR MFF_XXREG1 >> +#define MFF_LOG_LB_AFF_MATCH_PORT MFF_REG2 >> #define MFF_LOG_CT_ORIG_NW_DST_ADDR MFF_REG1 /* >> REG_ORIG_DIP_IPV4 */ >> #define MFF_LOG_CT_ORIG_IP6_DST_ADDR MFF_XXREG1 /* >> REG_ORIG_DIP_IPV6 */ >> diff --git a/lib/actions.c b/lib/actions.c >> index ea30be767..62e73b2c5 100644 >> --- a/lib/actions.c >> +++ b/lib/actions.c >> @@ -5371,11 +5371,7 @@ encode_COMMIT_LB_AFF(const struct >> ovnact_commit_lb_aff *lb_aff, >> imm_backend_ip = (union mf_value) { >> .ipv6 = lb_aff->backend, >> }; >> - if (ep->is_switch) { >> - ol_spec->dst.field = >> mf_from_id(MFF_LOG_LB_AFF_MATCH_LS_IP6_ADDR); >> - } else { >> - ol_spec->dst.field = >> mf_from_id(MFF_LOG_LB_AFF_MATCH_LR_IP6_ADDR); >> - } >> + ol_spec->dst.field = mf_from_id(MFF_LOG_LB_AFF_MATCH_IP6_ADDR); >> } else { >> ovs_be32 ip4 = in6_addr_get_mapped_ipv4(&lb_aff->backend); >> imm_backend_ip = (union mf_value) { >> diff --git a/northd/northd.c b/northd/northd.c >> index c41a7591b..2385c3b5e 100644 >> --- a/northd/northd.c >> +++ b/northd/northd.c >> @@ -125,20 +125,12 @@ static bool vxlan_mode; >> #define REGBIT_FROM_ROUTER_PORT "reg0[18]" >> #define REGBIT_IP_FRAG "reg0[19]" >> -#define REG_ORIG_DIP_IPV4 "reg1" >> -#define REG_ORIG_DIP_IPV6 "xxreg1" >> -#define REG_ORIG_TP_DPORT "reg2[0..15]" >> - >> -/* Register used to store backend ipv6 address >> - * for load balancer affinity. */ >> -#define REG_LB_L2_AFF_BACKEND_IP6 "xxreg0" >> - >> /* Register definitions for switches and routers. */ >> -/* Register used to store backend ipv4 address >> - * for load balancer affinity. */ >> -#define REG_LB_AFF_BACKEND_IP4 "reg4" >> -#define REG_LB_AFF_MATCH_PORT "reg8[0..15]" >> +/* Register used for LB. */ >> +#define REG_LB_IPV4 "reg4" >> +#define REG_LB_IPV6 "xxreg1" >> +#define REG_LB_PORT "reg2[0..15]" >> /* Registers for ACL evaluation */ >> #define REGBIT_ACL_VERDICT_ALLOW "reg8[16]" >> @@ -192,12 +184,6 @@ BUILD_ASSERT_DECL(ACL_OBS_STAGE_MAX < (1 << 2)); >> #define REG_DHCP_RELAY_DIP_IPV4 "reg2" >> #define REG_ROUTE_TABLE_ID "reg7" >> -/* Register used to store backend ipv6 address >> - * for load balancer affinity. */ >> -#define REG_LB_L3_AFF_BACKEND_IP6 "xxreg1" >> - >> -#define REG_ORIG_TP_DPORT_ROUTER "reg9[16..31]" >> - >> /* Registers used for pasing observability information for switches: >> * domain and point ID. */ >> #define REG_OBS_POINT_ID_NEW "reg3" >> @@ -227,25 +213,27 @@ BUILD_ASSERT_DECL(ACL_OBS_STAGE_MAX < (1 << 2)); >> * | | REGBIT_{HAIRPIN/HAIRPIN_REPLY} | >> | | >> * | | REGBIT_ACL_HINT_{ALLOW_NEW/ALLOW/DROP/BLOCK} | >> | | >> * | | REGBIT_ACL_{LABEL/STATELESS} | X >> | | >> - * +----+----------------------------------------------+ X | >> LB_L2_AFF_BACKEND_IP6 | >> - * | R1 | ORIG_DIP_IPV4 (>= IN_PRE_STATEFUL) | R | >> (>= IN_LB_AFF_CHECK && | >> - * +----+----------------------------------------------+ E | >> <= IN_LB_AFF_LEARN) | >> - * | R2 | ORIG_TP_DPORT (>= IN_PRE_STATEFUL) | G >> | | >> - * +----+----------------------------------------------+ 0 >> | | >> + * +----+----------------------------------------------+ X >> | | >> + * | R1 | UNUSED | R >> | | >> + * +----+----------------------------------------------+ E >> | | >> + * | R2 | REG_LB_PORT | G >> | | >> + * | | (>= IN_PRE_STATEFUL && <= IN_LB_AFF_LEARN) | 0 >> | | >> + * +----+----------------------------------------------+ >> | | >> * | R3 | OBS_POINT_ID_NEW | >> | | >> * | | (>= ACL_EVAL* && <= ACL_ACTION*) | >> | | >> * >> +----+----------------------------------------------+---+-----------------------------------+ >> - * | R4 | REG_LB_AFF_BACKEND_IP4 | >> | | >> - * +----+----------------------------------------------+ X >> | | >> - * | R5 | UNUSED | X | >> ORIG_DIP_IPV6(>= IN_PRE_STATEFUL) | >> - * +----+----------------------------------------------+ R >> | | >> - * | R6 | UNUSED | E >> | | >> - * +----+----------------------------------------------+ G >> | | >> - * | R7 | UNUSED | 1 >> | | >> + * | R4 | REG_LB_IPV4 | >> | | >> + * | R4 | (>= IN_PRE_STATEFUL && <= IN_HAIRPIN) | X >> | | >> + * +----+----------------------------------------------+ X >> | REG_LB_IPV6 | >> + * | R5 | UNUSED | R | (>= >> IN_PRE_STATEFUL && | >> + * +----+----------------------------------------------+ E | <= >> IN_HAIRPIN) | >> + * | R6 | UNUSED | G >> | | >> + * +----+----------------------------------------------+ 1 >> | | >> + * | R7 | UNUSED | >> | | >> * >> +----+----------------------------------------------+---+-----------------------------------+ >> - * | R8 | LB_AFF_MATCH_PORT | X | >> REG_OBS_COLLECTOR_ID_NEW | >> - * | | (>= IN_LB_AFF_CHECK && <= IN_LB_AFF_LEARN) | R | >> REG_OBS_COLLECTOR_ID_EST | >> - * | | | E | (>= >> ACL_EVAL* && <= ACL_ACTION*) | >> + * | R8 | REG_OBS_COLLECTOR_ID_NEW | X >> | | >> + * | | REG_OBS_COLLECTOR_ID_EST | R >> | | >> + * | | (>= ACL_EVAL* && <= ACL_ACTION*) | E >> | | >> * +----+----------------------------------------------+ G >> +-----------------------------------+ >> * | R9 | OBS_POINT_ID_EST | 4 >> | | >> * | | (>= ACL_EVAL* && <= ACL_ACTION*) | >> | | >> @@ -256,23 +244,26 @@ BUILD_ASSERT_DECL(ACL_OBS_STAGE_MAX < (1 << 2)); >> * | R0 | REGBIT_ND_RA_OPTS_RESULT | | | >> | | >> * | | (= IN_ND_RA_OPTIONS) | X | | >> | | >> * | | NEXT_HOP_IPV4 | R | | >> | | >> - * | | (>= IP_INPUT) | E | INPORT_ETH_ADDR | X >> | | >> + * | | (>= IN_IP_ROUTING) | E | INPORT_ETH_ADDR | X >> | | >> * +-----+---------------------------+ G | (< IP_INPUT) | X >> | | >> * | R1 | UNUSED | 0 | | R >> | | >> - * | | | | | E | >> NEXT_HOP_IPV6 (>= DEFRAG ) | >> + * | | | | | E | >> NEXT_HOP_IPV6 (>= IN_IP_ROUTING) | >> * +-----+---------------------------+---+-----------------+ G >> | | >> - * | R2 REG_DHCP_RELAY_DIP_IPV4 | X | | 0 >> | | >> - * | | | R | | >> | | >> - * +-----+---------------------------+ E | UNUSED | >> | | >> - * | R3 | UNUSED | G | | >> | | >> - * | | | 1 | | >> | | >> + * | R2 | REG_DHCP_RELAY_DIP_IPV4 | | | 0 >> | | >> + * | | REG_LB_PORT | X | | 0 >> | | >> + * | | (>= IN_LB_AFF_CHECK | R | | >> | | >> + * | | <= IN_LB_AFF_LEARN) | E | | >> | | >> + * +-----+---------------------------+ G | UNUSED | >> | | >> + * | R3 | UNUSED | 1 | | >> | | >> + * | | | | | >> | | >> * >> +-----+---------------------------+---+-----------------+---+------------------------------------+ >> - * | R4 | REG_LB_AFF_BACKEND_IP4 | X | | >> | | >> - * | | | R | | >> | | >> + * | R4 | REG_LB_IPV4 | X | | >> | | >> + * | | (>= IN_LB_AFF_CHECK && | R | | >> | | >> + * | | <= IN_LB_AFF_LEARN) | R | | >> | | >> * +-----+---------------------------+ E | UNUSED | X >> | | >> - * | R5 | SRC_IPV4 for ARP-REQ | G | | X >> | | >> - * | | (>= IP_INPUT) | 2 | | R >> | LB_L3_AFF_BACKEND_IP6 | >> - * +-----+---------------------------+---+-----------------+ E >> | (<= IN_DNAT) | >> + * | R5 | SRC_IPV4 for ARP-REQ | G | | X >> | REG_LB_IPV6 | >> + * | | (>= IP_INPUT) | 2 | | R >> | (>= IN_LB_AFF_CHECK && | >> + * +-----+---------------------------+---+-----------------+ E >> | <= IN_LB_AFF_LEARN) | >> * | R6 | UNUSED | X | | G >> | | >> * | | | R | | 1 >> | | >> * +-----+---------------------------+ E | UNUSED | >> | | >> @@ -282,7 +273,7 @@ BUILD_ASSERT_DECL(ACL_OBS_STAGE_MAX < (1 << 2)); >> * >> +-----+---------------------------+---+-----------------+---+------------------------------------+ >> * | R8 | ECMP_GROUP_ID | | | >> * | | ECMP_MEMBER_ID | | | >> - * | | LB_AFF_MATCH_PORT | X | | >> + * | | | X | | >> * +-----+---------------------------+ R | | >> * | | REGBIT_{ | E | | >> * | | EGRESS_LOOPBACK/ | G | UNUSED | >> @@ -292,9 +283,6 @@ BUILD_ASSERT_DECL(ACL_OBS_STAGE_MAX < (1 << 2)); >> * | |REGBIT_DHCP_RELAY_REQ_CHK/ | | | >> * | |REGBIT_DHCP_RELAY_RESP_CHK | | | >> * | |REGBIT_NEXTHOP_IS_IPV4} | | | >> - * | | | | | >> - * | | REG_ORIG_TP_DPORT_ROUTER | | | >> - * | | | | | >> * +-----+---------------------------+---+-----------------+ >> * >> */ >> @@ -3621,6 +3609,16 @@ build_lb_vip_actions(const struct ovn_northd_lb >> *lb, >> bool reject = !lb_vip->n_backends && lb_vip->empty_backend_rej; >> bool drop = !lb_vip->n_backends && !lb_vip->empty_backend_rej; >> + if (ls_dp || lb->affinity_timeout) { >> + const char *ip_reg = >> + lb_vip->address_family == AF_INET ? REG_LB_IPV4 : >> REG_LB_IPV6; >> + ds_put_format(action, "%s = %s; ", ip_reg, lb_vip->vip_str); >> + >> + if (lb_vip->port_str) { >> + ds_put_format(action, REG_LB_PORT" = %s; ", >> lb_vip->port_str); >> + } >> + } >> + >> if (lb_vip_nb->lb_health_check) { >> ds_put_cstr(action, "ct_lb_mark(backends="); >> @@ -7867,29 +7865,19 @@ build_lb_rules_pre_stateful(struct lflow_table >> *lflows, >> */ >> if (lb->vips[i].address_family == AF_INET) { >> ip_match = "ip4"; >> - ds_put_format(action, REG_ORIG_DIP_IPV4 " = %s; ", >> + ds_put_format(action, REG_LB_IPV4 " = %s; ", >> lb_vip->vip_str); >> } else { >> ip_match = "ip6"; >> - ds_put_format(action, REG_ORIG_DIP_IPV6 " = %s; ", >> + ds_put_format(action, REG_LB_IPV6 " = %s; ", >> lb_vip->vip_str); >> } >> - const char *proto = NULL; >> if (lb_vip->port_str) { >> - proto = "tcp"; >> - if (lb->nlb->protocol) { >> - if (!strcmp(lb->nlb->protocol, "udp")) { >> - proto = "udp"; >> - } else if (!strcmp(lb->nlb->protocol, "sctp")) { >> - proto = "sctp"; >> - } >> - } >> - >> /* Store the original destination port to be used when >> generating >> * hairpin flows. >> */ >> - ds_put_format(action, REG_ORIG_TP_DPORT " = %s; ", >> + ds_put_format(action, REG_LB_PORT " = %s; ", >> lb_vip->port_str); >> } >> ds_put_cstr(action, "ct_lb_mark;"); >> @@ -7897,7 +7885,8 @@ build_lb_rules_pre_stateful(struct lflow_table >> *lflows, >> ds_put_format(match, REGBIT_CONNTRACK_NAT" == 1 && %s.dst == >> %s", >> ip_match, lb_vip->vip_str); >> if (lb_vip->port_str) { >> - ds_put_format(match, " && %s.dst == %s", proto, >> lb_vip->port_str); >> + ds_put_format(match, " && %s.dst == %s", lb->proto, >> + lb_vip->port_str); >> } >> ovn_lflow_add_with_dp_group( >> @@ -7913,34 +7902,30 @@ build_lb_rules_pre_stateful(struct lflow_table >> *lflows, >> * - load balancing affinity check: >> * table=lr_in_lb_aff_check, priority=100 >> * match=(new_lb_match) >> - * action=(REG_NEXT_HOP_IPV4 = ip4.dst; >> - * REG_ORIG_TP_DPORT_ROUTER = tcp.dst; >> - * REGBIT_KNOWN_LB_SESSION = chk_lb_aff(); next;) >> + * action=(REGBIT_KNOWN_LB_SESSION = chk_lb_aff(); next;) >> * >> * - load balancing: >> * table=lr_in_dnat, priority=150 >> * match=(REGBIT_KNOWN_LB_SESSION == 1 && ct.new && ip4.dst == V >> - * && REG_LB_AFF_BACKEND_IP4 == B1 && >> REG_LB_AFF_MATCH_PORT == BP1) >> - * action=(REG_NEXT_HOP_IPV4 = V; lb_action; >> - * ct_lb_mark(backends=B1:BP1; ct_flag);) >> + * && REG_LB_IPV4 == B1 && REG_LB_PORT == BP1) >> + * action=(lb_action; ct_lb_mark(backends=B1:BP1; ct_flag);) >> * table=lr_in_dnat, priority=150 >> * match=(REGBIT_KNOWN_LB_SESSION == 1 && ct.new && ip4.dst == V >> - * && REG_LB_AFF_BACKEND_IP4 == B2 && >> REG_LB_AFF_MATCH_PORT == BP2) >> - * action=(REG_NEXT_HOP_IPV4 = V; lb_action; >> - * ct_lb_mark(backends=B2:BP2; ct_flag);) >> + * && REG_LB_IPV4 == B2 && REG_LB_PORT == BP2) >> + * action=(lb_action; ct_lb_mark(backends=B2:BP2; ct_flag);) >> * >> * - load balancing affinity learn: >> * table=lr_in_lb_aff_learn, priority=100 >> * match=(REGBIT_KNOWN_LB_SESSION == 0 >> * && ct.new && ip4 >> - * && REG_NEXT_HOP_IPV4 == V && REG_ORIG_TP_DPORT_ROUTER >> = VP >> + * && REG_LB_IPV4 == V && REG_LB_PORT = VP >> * && ip4.dst == B1 && tcp.dst == BP1) >> * action=(commit_lb_aff(vip = "V:VP", backend = "B1:BP1", >> * proto = tcp, timeout = T)); >> * table=lr_in_lb_aff_learn, priority=100 >> * match=(REGBIT_KNOWN_LB_SESSION == 0 >> * && ct.new && ip4 >> - * && REG_NEXT_HOP_IPV4 == V && REG_ORIG_TP_DPORT_ROUTER >> = VP >> + * && REG_LB_IPV4 == V && REG_LB_PORT = VP >> * && ip4.dst == B2 && tcp.dst == BP2) >> * action=(commit_lb_aff(vip = "V:VP", backend = "B2:BP2", >> * proto = tcp, timeout = T)); >> @@ -7963,14 +7948,11 @@ build_lb_affinity_lr_flows(struct lflow_table >> *lflows, >> struct ds aff_action_learn = DS_EMPTY_INITIALIZER; >> struct ds aff_match = DS_EMPTY_INITIALIZER; >> struct ds aff_match_learn = DS_EMPTY_INITIALIZER; >> - struct ds aff_check_action = DS_EMPTY_INITIALIZER; >> bool ipv6 = !IN6_IS_ADDR_V4MAPPED(&lb_vip->vip); >> const char *ip_match = ipv6 ? "ip6" : "ip4"; >> - const char *reg_vip = ipv6 ? REG_NEXT_HOP_IPV6 : REG_NEXT_HOP_IPV4; >> - const char *reg_backend = >> - ipv6 ? REG_LB_L3_AFF_BACKEND_IP6 : REG_LB_AFF_BACKEND_IP4; >> + const char *reg_ip = ipv6 ? REG_LB_IPV6 : REG_LB_IPV4; >> const char *ct_flag = NULL; >> if (lb_action && !strcmp(lb_action, "flags.skip_snat_for_lb = 1; >> ")) { >> ct_flag = "; skip_snat"; >> @@ -7980,22 +7962,12 @@ build_lb_affinity_lr_flows(struct lflow_table >> *lflows, >> } >> /* Create affinity check flow. */ >> - ds_put_format(&aff_check_action, "%s = %s.dst; ", reg_vip, >> ip_match); >> - >> - if (lb_vip->port_str) { >> - ds_put_format(&aff_check_action, REG_ORIG_TP_DPORT_ROUTER" = >> %s.dst; ", >> - lb->proto); >> - } >> - ds_put_cstr(&aff_check_action, REGBIT_KNOWN_LB_SESSION >> - " = chk_lb_aff(); next;"); >> - >> ovn_lflow_add_with_dp_group( >> lflows, dp_bitmap, ods_size(lr_datapaths), >> S_ROUTER_IN_LB_AFF_CHECK, >> - 100, new_lb_match, ds_cstr(&aff_check_action), >> &lb->nlb->header_, >> - lflow_ref); >> + 100, new_lb_match, REGBIT_KNOWN_LB_SESSION" = chk_lb_aff(); >> next;", >> + &lb->nlb->header_, lflow_ref); >> /* Prepare common part of affinity LB and affinity learn action. */ >> - ds_put_format(&aff_action, "%s = %s; ", reg_vip, lb_vip->vip_str); >> ds_put_cstr(&aff_action_learn, "commit_lb_aff(vip = \""); >> if (lb_vip->port_str) { >> @@ -8015,19 +7987,19 @@ build_lb_affinity_lr_flows(struct lflow_table >> *lflows, >> if (lb_vip->port_str) { >> ds_put_format(&aff_match_learn, REGBIT_KNOWN_LB_SESSION" == >> 0 && " >> "ct.new && %s && %s == %s && " >> - REG_ORIG_TP_DPORT_ROUTER" == %s && " >> - "%s.dst == ", ip_match, reg_vip, lb_vip->vip_str, >> + REG_LB_PORT " == %s && " >> + "%s.dst == ", ip_match, reg_ip, lb_vip->vip_str, >> lb_vip->port_str, ip_match); >> } else { >> ds_put_format(&aff_match_learn, REGBIT_KNOWN_LB_SESSION" == >> 0 && " >> "ct.new && %s && %s == %s && %s.dst == ", >> ip_match, >> - reg_vip, lb_vip->vip_str, ip_match); >> + reg_ip, lb_vip->vip_str, ip_match); >> } >> /* Prepare common part of affinity match. */ >> ds_put_format(&aff_match, REGBIT_KNOWN_LB_SESSION" == 1 && " >> "ct.new && %s.dst == %s && %s == ", ip_match, >> - lb_vip->vip_str, reg_backend); >> + lb_vip->vip_str, reg_ip); >> /* Store the common part length. */ >> size_t aff_action_len = aff_action.length; >> @@ -8050,7 +8022,7 @@ build_lb_affinity_lr_flows(struct lflow_table >> *lflows, >> ds_put_format(&aff_match_learn, " && %s.dst == %d", >> lb->proto, backend->port); >> - ds_put_format(&aff_match, " && "REG_LB_AFF_MATCH_PORT" == >> %d", >> + ds_put_format(&aff_match, " && "REG_LB_PORT" == %d", >> backend->port); >> } else { >> ds_put_cstr(&aff_action, backend->ip_str); >> @@ -8094,7 +8066,6 @@ build_lb_affinity_lr_flows(struct lflow_table >> *lflows, >> ds_destroy(&aff_action_learn); >> ds_destroy(&aff_match); >> ds_destroy(&aff_match_learn); >> - ds_destroy(&aff_check_action); >> } >> /* Builds the logical switch flows related to load balancer affinity. >> @@ -8102,35 +8073,33 @@ build_lb_affinity_lr_flows(struct lflow_table >> *lflows, >> * affinity timeout set to T, it generates the following logical flows: >> * - load balancing affinity check: >> * table=ls_in_lb_aff_check, priority=100 >> - * match=(ct.new && ip4 >> - * && REG_ORIG_DIP_IPV4 == V && REG_ORIG_TP_DPORT == VP) >> + * match=(ct.new && ip4 && ip4.dst == V && PROTO && PROTO.dst == >> VP) >> * action=(REGBIT_KNOWN_LB_SESSION = chk_lb_aff(); next;) >> * >> * - load balancing: >> * table=ls_in_lb, priority=150 >> * match=(REGBIT_KNOWN_LB_SESSION == 1 && ct.new && ip4.dst == V >> - * && REG_LB_AFF_BACKEND_IP4 == B1 && >> REG_LB_AFF_MATCH_PORT == BP1) >> - * action=(REG_ORIG_DIP_IPV4 = V; REG_ORIG_TP_DPORT = VP; >> + * && PROTO && PROTO.dst == VP) >> + * action=(REG_LB_IPV4 = V; REG_LB_PORT = VP; >> * ct_lb_mark(backends=B1:BP1);) >> * table=ls_in_lb, priority=150 >> * match=(REGBIT_KNOWN_LB_SESSION == 1 && ct.new && ip4.dst == V >> - * && REG_LB_AFF_BACKEND_IP4 == B2 && >> REG_LB_AFF_MATCH_PORT == BP2) >> - * action=(REG_ORIG_DIP_IPV4 = V; >> - * REG_ORIG_TP_DPORT = VP; >> + * && PROTO && PROTO.dst == VP) >> + * action=(REG_LB_IPV4 = V; REG_LB_PORT = VP; >> * ct_lb_mark(backends=B1:BP2);) >> * >> * - load balancing affinity learn: >> * table=ls_in_lb_aff_learn, priority=100 >> * match=(REGBIT_KNOWN_LB_SESSION == 0 >> * && ct.new && ip4 >> - * && REG_ORIG_DIP_IPV4 == V && REG_ORIG_TP_DPORT == VP >> + * && REG_LB_IPV4 == V && REG_LB_PORT == VP >> * && ip4.dst == B1 && tcp.dst == BP1) >> * action=(commit_lb_aff(vip = "V:VP", backend = "B1:BP1", >> * proto = tcp, timeout = T)); >> * table=ls_in_lb_aff_learn, priority=100 >> * match=(REGBIT_KNOWN_LB_SESSION == 0 >> * && ct.new && ip4 >> - * && REG_ORIG_DIP_IPV4 == V && REG_ORIG_TP_DPORT == VP >> + * && REG_LB_IPV4 == V && REG_LB_PORT == VP >> * && ip4.dst == B2 && tcp.dst == BP2) >> * action=(commit_lb_aff(vip = "V:VP", backend = "B2:BP2", >> * proto = tcp, timeout = T)); >> @@ -8149,19 +8118,16 @@ build_lb_affinity_ls_flows(struct lflow_table >> *lflows, >> const struct ovn_northd_lb *lb = lb_dps->lb; >> struct ds new_lb_match = DS_EMPTY_INITIALIZER; >> - if (IN6_IS_ADDR_V4MAPPED(&lb_vip->vip)) { >> - ds_put_format(&new_lb_match, >> - "ct.new && ip4 && "REG_ORIG_DIP_IPV4 " == %s", >> - lb_vip->vip_str); >> - } else { >> - ds_put_format(&new_lb_match, >> - "ct.new && ip6 && "REG_ORIG_DIP_IPV6 " == %s", >> - lb_vip->vip_str); >> - } >> + bool ipv6 = lb_vip->address_family == AF_INET6; >> + const char *ip_match = ipv6 ? "ip6" : "ip4"; >> + const char *reg_ip = ipv6 ? REG_LB_IPV6 : REG_LB_IPV4; >> + >> + ds_put_format(&new_lb_match, "ct.new && %s && %s.dst == %s", >> + ip_match, ip_match, lb_vip->vip_str); >> if (lb_vip->port_str) { >> - ds_put_format(&new_lb_match, " && "REG_ORIG_TP_DPORT " == %s", >> - lb_vip->port_str); >> + ds_put_format(&new_lb_match, " && %s && %s.dst == %s", >> + lb->proto, lb->proto, lb_vip->port_str); >> } >> static char *aff_check = REGBIT_KNOWN_LB_SESSION" = >> chk_lb_aff(); next;"; >> @@ -8177,19 +8143,12 @@ build_lb_affinity_ls_flows(struct lflow_table >> *lflows, >> struct ds aff_match = DS_EMPTY_INITIALIZER; >> struct ds aff_match_learn = DS_EMPTY_INITIALIZER; >> - bool ipv6 = !IN6_IS_ADDR_V4MAPPED(&lb_vip->vip); >> - const char *ip_match = ipv6 ? "ip6" : "ip4"; >> - >> - const char *reg_vip = ipv6 ? REG_ORIG_DIP_IPV6 : REG_ORIG_DIP_IPV4; >> - const char *reg_backend = >> - ipv6 ? REG_LB_L2_AFF_BACKEND_IP6 : REG_LB_AFF_BACKEND_IP4; >> - >> /* Prepare common part of affinity LB and affinity learn action. */ >> - ds_put_format(&aff_action, "%s = %s; ", reg_vip, lb_vip->vip_str); >> + ds_put_format(&aff_action, "%s = %s; ", reg_ip, lb_vip->vip_str); >> ds_put_cstr(&aff_action_learn, "commit_lb_aff(vip = \""); >> if (lb_vip->port_str) { >> - ds_put_format(&aff_action, REG_ORIG_TP_DPORT" = %s; ", >> + ds_put_format(&aff_action, REG_LB_PORT" = %s; ", >> lb_vip->port_str); >> ds_put_format(&aff_action_learn, ipv6 ? "[%s]:%s" : "%s:%s", >> lb_vip->vip_str, lb_vip->port_str); >> @@ -8204,19 +8163,19 @@ build_lb_affinity_ls_flows(struct lflow_table >> *lflows, >> if (lb_vip->port_str) { >> ds_put_format(&aff_match_learn, REGBIT_KNOWN_LB_SESSION" == >> 0 && " >> "ct.new && %s && %s == %s && " >> - REG_ORIG_TP_DPORT" == %s && %s.dst == ", >> - ip_match, reg_vip, lb_vip->vip_str, >> + REG_LB_PORT" == %s && %s.dst == ", >> + ip_match, reg_ip, lb_vip->vip_str, >> lb_vip->port_str, ip_match); >> } else { >> ds_put_format(&aff_match_learn, REGBIT_KNOWN_LB_SESSION" == >> 0 && " >> "ct.new && %s && %s == %s && %s.dst == ", >> - ip_match, reg_vip, lb_vip->vip_str, ip_match); >> + ip_match, reg_ip, lb_vip->vip_str, ip_match); >> } >> /* Prepare common part of affinity match. */ >> ds_put_format(&aff_match, REGBIT_KNOWN_LB_SESSION" == 1 && " >> "ct.new && %s.dst == %s && %s == ", ip_match, >> - lb_vip->vip_str, reg_backend); >> + lb_vip->vip_str, reg_ip); >> /* Store the common part length. */ >> size_t aff_action_len = aff_action.length; >> @@ -8238,7 +8197,7 @@ build_lb_affinity_ls_flows(struct lflow_table >> *lflows, >> ds_put_format(&aff_match_learn, " && %s.dst == %d", >> lb->proto, backend->port); >> - ds_put_format(&aff_match, " && "REG_LB_AFF_MATCH_PORT" == >> %d", >> + ds_put_format(&aff_match, " && "REG_LB_PORT" == %d", >> backend->port); >> } else { >> ds_put_cstr(&aff_action, backend->ip_str); >> @@ -8315,33 +8274,10 @@ build_lb_rules(struct lflow_table *lflows, >> struct ovn_lb_datapaths *lb_dps, >> for (size_t i = 0; i < lb->n_vips; i++) { >> struct ovn_lb_vip *lb_vip = &lb->vips[i]; >> struct ovn_northd_lb_vip *lb_vip_nb = &lb->vips_nb[i]; >> - const char *ip_match = NULL; >> + const char *ip_match = >> + lb_vip->address_family == AF_INET ? "ip4" : "ip6"; >> ds_clear(action); >> - >> - /* Store the original destination IP to be used when generating >> - * hairpin flows. >> - * If the packet is fragmented, then the flow which saves the >> - * original destination IP (and port) in the >> "ls_in_pre_stateful" >> - * stage will not be hit. >> - */ >> - if (lb_vip->address_family == AF_INET) { >> - ip_match = "ip4"; >> - ds_put_format(action, REG_ORIG_DIP_IPV4 " = %s; ", >> - lb_vip->vip_str); >> - } else { >> - ip_match = "ip6"; >> - ds_put_format(action, REG_ORIG_DIP_IPV6 " = %s; ", >> - lb_vip->vip_str); >> - } >> - >> - if (lb_vip->port_str) { >> - /* Store the original destination port to be used when >> generating >> - * hairpin flows. >> - */ >> - ds_put_format(action, REG_ORIG_TP_DPORT " = %s; ", >> - lb_vip->port_str); >> - } >> ds_clear(match); >> /* New connections in Ingress table. */ >> @@ -8489,13 +8425,13 @@ build_lb_hairpin(const struct >> ls_stateful_record *ls_stateful_rec, >> * */ >> ovn_lflow_add(lflows, od, S_SWITCH_IN_LB, 110, >> "ct.trk && !ct.rpl && "REGBIT_IP_FRAG" == 1 && >> ip4", >> - REG_ORIG_DIP_IPV4 " = ct_nw_dst(); " >> - REG_ORIG_TP_DPORT " = ct_tp_dst(); next;", >> + REG_LB_IPV4 " = ct_nw_dst(); " >> + REG_LB_PORT " = ct_tp_dst(); next;", >> lflow_ref); >> ovn_lflow_add(lflows, od, S_SWITCH_IN_LB, 110, >> "ct.trk && !ct.rpl && "REGBIT_IP_FRAG" == 1 && >> ip6", >> - REG_ORIG_DIP_IPV6 " = ct_ip6_dst(); " >> - REG_ORIG_TP_DPORT " = ct_tp_dst(); next;", >> + REG_LB_IPV6 " = ct_ip6_dst(); " >> + REG_LB_PORT " = ct_tp_dst(); next;", >> lflow_ref); >> /* Set REGBIT_HAIRPIN in the original direction and >> diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at >> index edfd5764b..2b1791de0 100644 >> --- a/tests/ovn-northd.at >> +++ b/tests/ovn-northd.at >> @@ -1425,7 +1425,7 @@ check ovn-nbctl --wait=sb ls-lb-add sw0 lb1 >> AT_CAPTURE_FILE([sbflows]) >> OVS_WAIT_FOR_OUTPUT( >> [ovn-sbctl dump-flows sw0 | tee sbflows | grep >> 'priority=120.*backends' | ovn_strip_lflows], 0, [dnl >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) >> ]) >> # disabled LSPs should not be a backend of Load Balancer >> @@ -1434,7 +1434,7 @@ check ovn-nbctl lsp-set-enabled sw0-p1 disabled >> AT_CAPTURE_FILE([sbflows]) >> OVS_WAIT_FOR_OUTPUT( >> [ovn-sbctl dump-flows sw0 | tee sbflows | grep >> 'priority=120.*backends' | ovn_strip_lflows], 0, [dnl >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=20.0.0.3:80);) >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=20.0.0.3:80);) >> ]) >> wait_row_count Service_Monitor 1 >> @@ -1443,7 +1443,7 @@ check ovn-nbctl lsp-set-enabled sw0-p1 enabled >> AT_CAPTURE_FILE([sbflows]) >> OVS_WAIT_FOR_OUTPUT( >> [ovn-sbctl dump-flows sw0 | tee sbflows | grep >> 'priority=120.*backends' | ovn_strip_lflows], 0, [dnl >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) >> ]) >> wait_row_count Service_Monitor 2 >> @@ -1454,7 +1454,7 @@ wait_row_count Service_Monitor 0 >> AT_CAPTURE_FILE([sbflows2]) >> OVS_WAIT_FOR_OUTPUT( >> [ovn-sbctl dump-flows sw0 | tee sbflows2 | grep >> 'priority=120.*backends' | ovn_strip_lflows], [0], >> -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) >> +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) >> ]) >> AS_BOX([Create the Load_Balancer_Health_Check again.]) >> @@ -1466,7 +1466,7 @@ check ovn-nbctl --wait=sb sync >> ovn-sbctl dump-flows sw0 | grep backends | grep priority=120 > >> lflows.txt >> AT_CHECK([cat lflows.txt | ovn_strip_lflows], [0], [dnl >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) >> ]) >> AS_BOX([Get the uuid of both the service_monitor]) >> @@ -1476,7 +1476,7 @@ sm_sw1_p1=$(fetch_column Service_Monitor _uuid >> logical_port=sw1-p1) >> AT_CAPTURE_FILE([sbflows3]) >> OVS_WAIT_FOR_OUTPUT( >> [ovn-sbctl dump-flows sw0 | tee sbflows 3 | grep >> 'priority=120.*backends' | ovn_strip_lflows], [0], >> -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) >> +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) >> ]) >> AS_BOX([Set the service monitor for sw1-p1 to offline]) >> @@ -1487,7 +1487,7 @@ check ovn-nbctl --wait=sb sync >> AT_CAPTURE_FILE([sbflows4]) >> OVS_WAIT_FOR_OUTPUT( >> [ovn-sbctl dump-flows sw0 | tee sbflows4 | grep >> 'priority=120.*backends' | ovn_strip_lflows], [0], >> -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) >> +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) >> ]) >> AS_BOX([Set the service monitor for sw0-p1 to offline]) >> @@ -1516,7 +1516,7 @@ check ovn-nbctl --wait=sb sync >> AT_CAPTURE_FILE([sbflows7]) >> OVS_WAIT_FOR_OUTPUT( >> [ovn-sbctl dump-flows sw0 | tee sbflows7 | grep backends | grep >> priority=120 | ovn_strip_lflows], 0, >> -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) >> +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) >> ]) >> AS_BOX([Set the service monitor for sw1-p1 to error]) >> @@ -1527,7 +1527,7 @@ check ovn-nbctl --wait=sb sync >> ovn-sbctl dump-flows sw0 | grep "ip4.dst == 10.0.0.10 && tcp.dst == >> 80" \ >> | grep priority=120 > lflows.txt >> AT_CHECK([cat lflows.txt | grep ls_in_lb | ovn_strip_lflows], [0], [dnl >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) >> ]) >> AS_BOX([Add one more vip to lb1]) >> @@ -1553,8 +1553,8 @@ AT_CAPTURE_FILE([sbflows9]) >> OVS_WAIT_FOR_OUTPUT( >> [ovn-sbctl dump-flows sw0 | tee sbflows9 | grep backends | grep >> priority=120 | ovn_strip_lflows], >> 0, >> -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg1 = 10.0.0.40; >> reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000);) >> +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg4 = 10.0.0.40; >> reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000);) >> ]) >> AS_BOX([Set the service monitor for sw1-p1 to online]) >> @@ -1567,8 +1567,8 @@ AT_CAPTURE_FILE([sbflows10]) >> OVS_WAIT_FOR_OUTPUT( >> [ovn-sbctl dump-flows sw0 | tee sbflows10 | grep backends | grep >> priority=120 | ovn_strip_lflows], >> 0, >> -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg1 = 10.0.0.40; >> reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000,20.0.0.3:80);) >> +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg4 = 10.0.0.40; >> reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000,20.0.0.3:80);) >> ]) >> AS_BOX([Associate lb1 to sw1]) >> @@ -1577,8 +1577,8 @@ AT_CAPTURE_FILE([sbflows11]) >> OVS_WAIT_FOR_OUTPUT( >> [ovn-sbctl dump-flows sw1 | tee sbflows11 | grep backends | grep >> priority=120 | ovn_strip_lflows], >> 0, [dnl >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg1 = 10.0.0.40; >> reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000,20.0.0.3:80);) >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg4 = 10.0.0.40; >> reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000,20.0.0.3:80);) >> ]) >> AS_BOX([Now create lb2 same as lb1 but udp protocol.]) >> @@ -4666,16 +4666,16 @@ check_stateful_flows() { >> table=??(ls_in_pre_stateful ), priority=100 , match=(reg0[[0]] == >> 1), action=(ct_next;) >> table=??(ls_in_pre_stateful ), priority=110 , match=(reg0[[2]] == >> 1), action=(ct_lb_mark;) >> table=??(ls_in_pre_stateful ), priority=115 , match=(reg0[[2]] == >> 1 && ip.is_frag), action=(reg0[[19]] = 1; ct_lb_mark;) >> - table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == >> 1 && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark;) >> - table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == >> 1 && ip4.dst == 10.0.0.20 && tcp.dst == 80), action=(reg1 = 10.0.0.20; >> reg2[[0..15]] = 80; ct_lb_mark;) >> + table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == >> 1 && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark;) >> + table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == >> 1 && ip4.dst == 10.0.0.20 && tcp.dst == 80), action=(reg4 = 10.0.0.20; >> reg2[[0..15]] = 80; ct_lb_mark;) >> ]) >> AT_CHECK([grep "ls_in_lb " sw0flows | ovn_strip_lflows], [0], [dnl >> table=??(ls_in_lb ), priority=0 , match=(1), >> action=(next;) >> - table=??(ls_in_lb ), priority=110 , match=(ct.trk && >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); >> reg2[[0..15]] = ct_tp_dst(); next;) >> + table=??(ls_in_lb ), priority=110 , match=(ct.trk && >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); >> reg2[[0..15]] = ct_tp_dst(); next;) >> table=??(ls_in_lb ), priority=110 , match=(ct.trk && >> !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); >> reg2[[0..15]] = ct_tp_dst(); next;) >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.4:8080);) >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.20 && tcp.dst == 80), action=(reg1 = 10.0.0.20; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.40:8080);) >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.4:8080);) >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.20 && tcp.dst == 80), action=(reg4 = 10.0.0.20; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.40:8080);) >> ]) >> AT_CHECK([grep "ls_in_stateful" sw0flows | ovn_strip_lflows], >> [0], [dnl >> @@ -4780,7 +4780,7 @@ check ovn-nbctl --wait=sb ls-lb-add sw0 lb1 >> AT_CHECK([ovn-sbctl dump-flows sw0 | grep "ls_in_lb " | >> ovn_strip_lflows ], [0], [dnl >> table=??(ls_in_lb ), priority=0 , match=(1), >> action=(next;) >> table=??(ls_in_lb ), priority=110 , match=(ct.new && >> ip4.dst == 10.0.0.20), action=(drop;) >> - table=??(ls_in_lb ), priority=110 , match=(ct.trk && >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); >> reg2[[0..15]] = ct_tp_dst(); next;) >> + table=??(ls_in_lb ), priority=110 , match=(ct.trk && >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); >> reg2[[0..15]] = ct_tp_dst(); next;) >> table=??(ls_in_lb ), priority=110 , match=(ct.trk && >> !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); >> reg2[[0..15]] = ct_tp_dst(); next;) >> ]) >> @@ -7842,8 +7842,8 @@ AT_CHECK([grep -e "ls_in_acl.*eval" -e >> "ls_in_acl_hint" lsflows | ovn_strip_lflo >> AT_CHECK([grep -e "ls_in_lb " lsflows | ovn_strip_lflows], [0], [dnl >> table=??(ls_in_lb ), priority=0 , match=(1), >> action=(next;) >> - table=??(ls_in_lb ), priority=110 , match=(ct.new && >> ip4.dst == 10.0.0.2), action=(reg1 = 10.0.0.2; >> ct_lb_mark(backends=10.0.0.10);) >> - table=??(ls_in_lb ), priority=110 , match=(ct.trk && >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); >> reg2[[0..15]] = ct_tp_dst(); next;) >> + table=??(ls_in_lb ), priority=110 , match=(ct.new && >> ip4.dst == 10.0.0.2), action=(reg4 = 10.0.0.2; >> ct_lb_mark(backends=10.0.0.10);) >> + table=??(ls_in_lb ), priority=110 , match=(ct.trk && >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); >> reg2[[0..15]] = ct_tp_dst(); next;) >> table=??(ls_in_lb ), priority=110 , match=(ct.trk && >> !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); >> reg2[[0..15]] = ct_tp_dst(); next;) >> ]) >> @@ -7899,8 +7899,8 @@ AT_CHECK([grep -e "ls_in_acl.*eval" -e >> "ls_in_acl_hint" lsflows | ovn_strip_lflo >> AT_CHECK([grep -e "ls_in_lb " lsflows | ovn_strip_lflows], [0], [dnl >> table=??(ls_in_lb ), priority=0 , match=(1), >> action=(next;) >> - table=??(ls_in_lb ), priority=110 , match=(ct.new && >> ip4.dst == 10.0.0.2), action=(reg1 = 10.0.0.2; >> ct_lb_mark(backends=10.0.0.10);) >> - table=??(ls_in_lb ), priority=110 , match=(ct.trk && >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); >> reg2[[0..15]] = ct_tp_dst(); next;) >> + table=??(ls_in_lb ), priority=110 , match=(ct.new && >> ip4.dst == 10.0.0.2), action=(reg4 = 10.0.0.2; >> ct_lb_mark(backends=10.0.0.10);) >> + table=??(ls_in_lb ), priority=110 , match=(ct.trk && >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); >> reg2[[0..15]] = ct_tp_dst(); next;) >> table=??(ls_in_lb ), priority=110 , match=(ct.trk && >> !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); >> reg2[[0..15]] = ct_tp_dst(); next;) >> ]) >> @@ -7956,8 +7956,8 @@ AT_CHECK([grep -e "ls_in_acl.*eval" -e >> "ls_in_acl_hint" lsflows | ovn_strip_lflo >> AT_CHECK([grep -e "ls_in_lb " lsflows | ovn_strip_lflows], [0], [dnl >> table=??(ls_in_lb ), priority=0 , match=(1), >> action=(next;) >> - table=??(ls_in_lb ), priority=110 , match=(ct.new && >> ip4.dst == 10.0.0.2), action=(reg1 = 10.0.0.2; >> ct_lb_mark(backends=10.0.0.10);) >> - table=??(ls_in_lb ), priority=110 , match=(ct.trk && >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); >> reg2[[0..15]] = ct_tp_dst(); next;) >> + table=??(ls_in_lb ), priority=110 , match=(ct.new && >> ip4.dst == 10.0.0.2), action=(reg4 = 10.0.0.2; >> ct_lb_mark(backends=10.0.0.10);) >> + table=??(ls_in_lb ), priority=110 , match=(ct.trk && >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); >> reg2[[0..15]] = ct_tp_dst(); next;) >> table=??(ls_in_lb ), priority=110 , match=(ct.trk && >> !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); >> reg2[[0..15]] = ct_tp_dst(); next;) >> ]) >> @@ -9345,13 +9345,13 @@ AT_CAPTURE_FILE([S1flows]) >> AT_CHECK([grep "ls_in_lb " S0flows | ovn_strip_lflows], [0], [dnl >> table=??(ls_in_lb ), priority=0 , match=(1), >> action=(next;) >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg1 = 172.16.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80);) >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 172.16.0.11 && tcp.dst == 8080), action=(reg1 = >> 172.16.0.11; reg2[[0..15]] = 8080; ct_lb_mark(backends=10.0.0.2:8080);) >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg4 = 172.16.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80);) >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 172.16.0.11 && tcp.dst == 8080), action=(reg4 = >> 172.16.0.11; reg2[[0..15]] = 8080; ct_lb_mark(backends=10.0.0.2:8080);) >> ]) >> AT_CHECK([grep "ls_in_lb " S1flows | ovn_strip_lflows], [0], [dnl >> table=??(ls_in_lb ), priority=0 , match=(1), >> action=(next;) >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg1 = 172.16.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80);) >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 172.16.0.11 && tcp.dst == 8080), action=(reg1 = >> 172.16.0.11; reg2[[0..15]] = 8080; ct_lb_mark(backends=10.0.0.2:8080);) >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg4 = 172.16.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80);) >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 172.16.0.11 && tcp.dst == 8080), action=(reg4 = >> 172.16.0.11; reg2[[0..15]] = 8080; ct_lb_mark(backends=10.0.0.2:8080);) >> ]) >> ovn-sbctl get datapath S0 _uuid > dp_uuids >> @@ -9477,20 +9477,20 @@ AT_CAPTURE_FILE([S0flows]) >> AT_CHECK([grep "ls_in_lb_aff_check" S0flows | ovn_strip_lflows], >> [0], [dnl >> table=??(ls_in_lb_aff_check ), priority=0 , match=(1), >> action=(next;) >> - table=??(ls_in_lb_aff_check ), priority=100 , match=(ct.new && ip4 >> && reg1 == 172.16.0.10 && reg2[[0..15]] == 80), action=(reg9[[6]] = >> chk_lb_aff(); next;) >> + table=??(ls_in_lb_aff_check ), priority=100 , match=(ct.new && ip4 >> && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(reg9[[6]] >> = chk_lb_aff(); next;) >> ]) >> AT_CHECK([grep "ls_in_lb " S0flows | ovn_strip_lflows], [0], [dnl >> table=??(ls_in_lb ), priority=0 , match=(1), >> action=(next;) >> - table=??(ls_in_lb ), priority=110 , match=(ct.trk && >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); >> reg2[[0..15]] = ct_tp_dst(); next;) >> + table=??(ls_in_lb ), priority=110 , match=(ct.trk && >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); >> reg2[[0..15]] = ct_tp_dst(); next;) >> table=??(ls_in_lb ), priority=110 , match=(ct.trk && >> !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); >> reg2[[0..15]] = ct_tp_dst(); next;) >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg1 = 172.16.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80);) >> - table=??(ls_in_lb ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && >> reg8[[0..15]] == 80), action=(reg1 = 172.16.0.10; reg2[[0..15]] = 80; >> ct_lb_mark(backends=10.0.0.2:80);) >> - table=??(ls_in_lb ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && >> reg8[[0..15]] == 80), action=(reg1 = 172.16.0.10; reg2[[0..15]] = 80; >> ct_lb_mark(backends=20.0.0.2:80);) >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg4 = 172.16.0.10; >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80);) >> + table=??(ls_in_lb ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && >> reg2[[0..15]] == 80), action=(reg4 = 172.16.0.10; reg2[[0..15]] = 80; >> ct_lb_mark(backends=10.0.0.2:80);) >> + table=??(ls_in_lb ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && >> reg2[[0..15]] == 80), action=(reg4 = 172.16.0.10; reg2[[0..15]] = 80; >> ct_lb_mark(backends=20.0.0.2:80);) >> ]) >> AT_CHECK([grep "ls_in_lb_aff_learn" S0flows | ovn_strip_lflows], >> [0], [dnl >> table=??(ls_in_lb_aff_learn ), priority=0 , match=(1), >> action=(next;) >> - table=??(ls_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == >> 0 && ct.new && ip4 && reg1 == 172.16.0.10 && reg2[[0..15]] == 80 && >> ip4.dst == 10.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = >> "172.16.0.10:80", backend = "10.0.0.2:80", proto = tcp, timeout = 60); >> /* drop */) >> - table=??(ls_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == >> 0 && ct.new && ip4 && reg1 == 172.16.0.10 && reg2[[0..15]] == 80 && >> ip4.dst == 20.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = >> "172.16.0.10:80", backend = "20.0.0.2:80", proto = tcp, timeout = 60); >> /* drop */) >> + table=??(ls_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == >> 0 && ct.new && ip4 && reg4 == 172.16.0.10 && reg2[[0..15]] == 80 && >> ip4.dst == 10.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = >> "172.16.0.10:80", backend = "10.0.0.2:80", proto = tcp, timeout = 60); >> /* drop */) >> + table=??(ls_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == >> 0 && ct.new && ip4 && reg4 == 172.16.0.10 && reg2[[0..15]] == 80 && >> ip4.dst == 20.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = >> "172.16.0.10:80", backend = "20.0.0.2:80", proto = tcp, timeout = 60); >> /* drop */) >> ]) >> AS_BOX([Test LR flows]) >> @@ -9499,13 +9499,13 @@ AT_CAPTURE_FILE([R1flows]) >> AT_CHECK([grep "lr_in_lb_aff_check" R1flows | ovn_strip_lflows], >> [0], [dnl >> table=??(lr_in_lb_aff_check ), priority=0 , match=(1), >> action=(next;) >> - table=??(lr_in_lb_aff_check ), priority=100 , match=(ct.new && >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), >> action=(reg0 = ip4.dst; reg9[[16..31]] = tcp.dst; reg9[[6]] = >> chk_lb_aff(); next;) >> + table=??(lr_in_lb_aff_check ), priority=100 , match=(ct.new && >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), >> action=(reg9[[6]] = chk_lb_aff(); next;) >> ]) >> AT_CHECK([grep "lr_in_dnat " R1flows | ovn_strip_lflows], [0], [dnl >> table=??(lr_in_dnat ), priority=0 , match=(1), >> action=(next;) >> - table=??(lr_in_dnat ), priority=120 , match=(ct.new && >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), >> action=(ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80);) >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; >> ct_lb_mark(backends=10.0.0.2:80);) >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; >> ct_lb_mark(backends=20.0.0.2:80);) >> + table=??(lr_in_dnat ), priority=120 , match=(ct.new && >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), >> action=(reg4 = 172.16.0.10; reg2[[0..15]] = 80; >> ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80);) >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && >> reg2[[0..15]] == 80), action=(ct_lb_mark(backends=10.0.0.2:80);) >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && >> reg2[[0..15]] == 80), action=(ct_lb_mark(backends=20.0.0.2:80);) >> table=??(lr_in_dnat ), priority=50 , match=(ct.est && >> !ct.rel && !ct.new && !ct.rpl && ct_mark.natted), action=(next;) >> table=??(lr_in_dnat ), priority=50 , match=(ct.rel && >> !ct.est && !ct.new && !ct.rpl), action=(ct_commit_nat;) >> table=??(lr_in_dnat ), priority=70 , match=(ct.est && >> !ct.rel && !ct.new && !ct.rpl && ct_mark.natted && ct_mark.force_snat >> == 1), action=(flags.force_snat_for_lb = 1; next;) >> @@ -9515,8 +9515,8 @@ AT_CHECK([grep "lr_in_dnat " R1flows | >> ovn_strip_lflows], [0], [dnl >> ]) >> AT_CHECK([grep "lr_in_lb_aff_learn" R1flows | ovn_strip_lflows], >> [0], [dnl >> table=??(lr_in_lb_aff_learn ), priority=0 , match=(1), >> action=(next;) >> - table=??(lr_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == >> 0 && ct.new && ip4 && reg0 == 172.16.0.10 && reg9[[16..31]] == 80 && >> ip4.dst == 10.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = >> "172.16.0.10:80", backend = "10.0.0.2:80", proto = tcp, timeout = 60); >> /* drop */) >> - table=??(lr_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == >> 0 && ct.new && ip4 && reg0 == 172.16.0.10 && reg9[[16..31]] == 80 && >> ip4.dst == 20.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = >> "172.16.0.10:80", backend = "20.0.0.2:80", proto = tcp, timeout = 60); >> /* drop */) >> + table=??(lr_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == >> 0 && ct.new && ip4 && reg4 == 172.16.0.10 && reg2[[0..15]] == 80 && >> ip4.dst == 10.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = >> "172.16.0.10:80", backend = "10.0.0.2:80", proto = tcp, timeout = 60); >> /* drop */) >> + table=??(lr_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == >> 0 && ct.new && ip4 && reg4 == 172.16.0.10 && reg2[[0..15]] == 80 && >> ip4.dst == 20.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = >> "172.16.0.10:80", backend = "20.0.0.2:80", proto = tcp, timeout = 60); >> /* drop */) >> ]) >> AS_BOX([Test LR flows - skip_snat=true]) >> @@ -9527,9 +9527,9 @@ AT_CAPTURE_FILE([R1flows_skip_snat]) >> AT_CHECK([grep "lr_in_dnat " R1flows_skip_snat | ovn_strip_lflows], >> [0], [dnl >> table=??(lr_in_dnat ), priority=0 , match=(1), >> action=(next;) >> - table=??(lr_in_dnat ), priority=120 , match=(ct.new && >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), >> action=(flags.skip_snat_for_lb = 1; >> ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; >> flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; skip_snat);) >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; >> flags.skip_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; skip_snat);) >> + table=??(lr_in_dnat ), priority=120 , match=(ct.new && >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), >> action=(flags.skip_snat_for_lb = 1; reg4 = 172.16.0.10; reg2[[0..15]] >> = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && >> reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; >> ct_lb_mark(backends=10.0.0.2:80; skip_snat);) >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && >> reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; >> ct_lb_mark(backends=20.0.0.2:80; skip_snat);) >> table=??(lr_in_dnat ), priority=50 , match=(ct.est && >> !ct.rel && !ct.new && !ct.rpl && ct_mark.natted), action=(next;) >> table=??(lr_in_dnat ), priority=50 , match=(ct.rel && >> !ct.est && !ct.new && !ct.rpl), action=(ct_commit_nat;) >> table=??(lr_in_dnat ), priority=70 , match=(ct.est && >> !ct.rel && !ct.new && !ct.rpl && ct_mark.natted && ct_mark.force_snat >> == 1), action=(flags.force_snat_for_lb = 1; next;) >> @@ -9548,9 +9548,9 @@ AT_CAPTURE_FILE([R1flows_force_snat]) >> AT_CHECK([grep "lr_in_dnat " R1flows_force_snat | ovn_strip_lflows], >> [0], [dnl >> table=??(lr_in_dnat ), priority=0 , match=(1), >> action=(next;) >> - table=??(lr_in_dnat ), priority=120 , match=(ct.new && >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), >> action=(flags.force_snat_for_lb = 1; >> ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; force_snat);) >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; >> flags.force_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; >> force_snat);) >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; >> flags.force_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; >> force_snat);) >> + table=??(lr_in_dnat ), priority=120 , match=(ct.new && >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), >> action=(flags.force_snat_for_lb = 1; reg4 = 172.16.0.10; reg2[[0..15]] >> = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; force_snat);) >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && >> reg2[[0..15]] == 80), action=(flags.force_snat_for_lb = 1; >> ct_lb_mark(backends=10.0.0.2:80; force_snat);) >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && >> reg2[[0..15]] == 80), action=(flags.force_snat_for_lb = 1; >> ct_lb_mark(backends=20.0.0.2:80; force_snat);) >> table=??(lr_in_dnat ), priority=50 , match=(ct.est && >> !ct.rel && !ct.new && !ct.rpl && ct_mark.natted), action=(next;) >> table=??(lr_in_dnat ), priority=50 , match=(ct.rel && >> !ct.est && !ct.new && !ct.rpl), action=(ct_commit_nat;) >> table=??(lr_in_dnat ), priority=70 , match=(ct.est && >> !ct.rel && !ct.new && !ct.rpl && ct_mark.natted && ct_mark.force_snat >> == 1), action=(flags.force_snat_for_lb = 1; next;) >> @@ -9568,9 +9568,9 @@ AT_CAPTURE_FILE([R1flows_force_skip_snat]) >> AT_CHECK([grep "lr_in_dnat " R1flows_force_skip_snat | >> ovn_strip_lflows], [0], [dnl >> table=??(lr_in_dnat ), priority=0 , match=(1), >> action=(next;) >> - table=??(lr_in_dnat ), priority=120 , match=(ct.new && >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), >> action=(flags.skip_snat_for_lb = 1; >> ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; >> flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; skip_snat);) >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; >> flags.skip_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; skip_snat);) >> + table=??(lr_in_dnat ), priority=120 , match=(ct.new && >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), >> action=(flags.skip_snat_for_lb = 1; reg4 = 172.16.0.10; reg2[[0..15]] >> = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && >> reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; >> ct_lb_mark(backends=10.0.0.2:80; skip_snat);) >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && >> reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; >> ct_lb_mark(backends=20.0.0.2:80; skip_snat);) >> table=??(lr_in_dnat ), priority=50 , match=(ct.est && >> !ct.rel && !ct.new && !ct.rpl && ct_mark.natted), action=(next;) >> table=??(lr_in_dnat ), priority=50 , match=(ct.rel && >> !ct.est && !ct.new && !ct.rpl), action=(ct_commit_nat;) >> table=??(lr_in_dnat ), priority=70 , match=(ct.est && >> !ct.rel && !ct.new && !ct.rpl && ct_mark.natted && ct_mark.force_snat >> == 1), action=(flags.force_snat_for_lb = 1; next;) >> @@ -9592,12 +9592,12 @@ AT_CAPTURE_FILE([R1flows_2lbs]) >> AT_CHECK([grep "lr_in_dnat " R1flows_2lbs | ovn_strip_lflows], [0], >> [dnl >> table=??(lr_in_dnat ), priority=0 , match=(1), >> action=(next;) >> - table=??(lr_in_dnat ), priority=120 , match=(ct.new && >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), >> action=(flags.skip_snat_for_lb = 1; >> ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) >> - table=??(lr_in_dnat ), priority=120 , match=(ct.new && >> !ct.rel && ip4 && ip4.dst == 172.16.0.20 && tcp && tcp.dst == 80), >> action=(flags.force_snat_for_lb = 1; >> ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; force_snat);) >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; >> flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; skip_snat);) >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; >> flags.skip_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; skip_snat);) >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.20 && reg4 == 10.0.0.2 && >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.20; >> flags.force_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; >> force_snat);) >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.20 && reg4 == 20.0.0.2 && >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.20; >> flags.force_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; >> force_snat);) >> + table=??(lr_in_dnat ), priority=120 , match=(ct.new && >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), >> action=(flags.skip_snat_for_lb = 1; reg4 = 172.16.0.10; reg2[[0..15]] >> = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) >> + table=??(lr_in_dnat ), priority=120 , match=(ct.new && >> !ct.rel && ip4 && ip4.dst == 172.16.0.20 && tcp && tcp.dst == 80), >> action=(flags.force_snat_for_lb = 1; reg4 = 172.16.0.20; reg2[[0..15]] >> = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; force_snat);) >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && >> reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; >> ct_lb_mark(backends=10.0.0.2:80; skip_snat);) >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && >> reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; >> ct_lb_mark(backends=20.0.0.2:80; skip_snat);) >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.20 && reg4 == 10.0.0.2 && >> reg2[[0..15]] == 80), action=(flags.force_snat_for_lb = 1; >> ct_lb_mark(backends=10.0.0.2:80; force_snat);) >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == >> 1 && ct.new && ip4.dst == 172.16.0.20 && reg4 == 20.0.0.2 && >> reg2[[0..15]] == 80), action=(flags.force_snat_for_lb = 1; >> ct_lb_mark(backends=20.0.0.2:80; force_snat);) >> table=??(lr_in_dnat ), priority=50 , match=(ct.est && >> !ct.rel && !ct.new && !ct.rpl && ct_mark.natted), action=(next;) >> table=??(lr_in_dnat ), priority=50 , match=(ct.rel && >> !ct.est && !ct.new && !ct.rpl), action=(ct_commit_nat;) >> table=??(lr_in_dnat ), priority=70 , match=(ct.est && >> !ct.rel && !ct.new && !ct.rpl && ct_mark.natted && ct_mark.force_snat >> == 1), action=(flags.force_snat_for_lb = 1; next;) >> @@ -14058,10 +14058,10 @@ ovn-sbctl dump-flows s1 > s1flows >> AT_CAPTURE_FILE([s1flows]) >> AT_CHECK([grep "ls_in_pre_stateful" s1flows | ovn_strip_lflows | >> grep "30.0.0.1"], [0], [dnl >> - table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == >> 1 && ip4.dst == 30.0.0.1), action=(reg1 = 30.0.0.1; ct_lb_mark;) >> + table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == >> 1 && ip4.dst == 30.0.0.1), action=(reg4 = 30.0.0.1; ct_lb_mark;) >> ]) >> AT_CHECK([grep "ls_in_lb" s1flows | ovn_strip_lflows | grep >> "30.0.0.1"], [0], [dnl >> - table=??(ls_in_lb ), priority=110 , match=(ct.new && >> ip4.dst == 30.0.0.1), action=(reg1 = 30.0.0.1; >> ct_lb_mark(backends=172.16.0.103,172.16.0.102,172.16.0.101);) >> + table=??(ls_in_lb ), priority=110 , match=(ct.new && >> ip4.dst == 30.0.0.1), action=(reg4 = 30.0.0.1; >> ct_lb_mark(backends=172.16.0.103,172.16.0.102,172.16.0.101);) >> ]) >> # Associate load balancer to lr1 with DGP >> @@ -14283,10 +14283,10 @@ ovn-sbctl dump-flows s1 > s1flows >> AT_CAPTURE_FILE([s1flows]) >> AT_CHECK([grep "ls_in_pre_stateful" s1flows | ovn_strip_lflows | >> grep "30.0.0.1"], [0], [dnl >> - table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == >> 1 && ip4.dst == 30.0.0.1), action=(reg1 = 30.0.0.1; ct_lb_mark;) >> + table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == >> 1 && ip4.dst == 30.0.0.1), action=(reg4 = 30.0.0.1; ct_lb_mark;) >> ]) >> AT_CHECK([grep "ls_in_lb" s1flows | ovn_strip_lflows | grep >> "30.0.0.1"], [0], [dnl >> - table=??(ls_in_lb ), priority=110 , match=(ct.new && >> ip4.dst == 30.0.0.1), action=(reg1 = 30.0.0.1; >> ct_lb_mark(backends=172.16.0.103,172.16.0.102,172.16.0.101);) >> + table=??(ls_in_lb ), priority=110 , match=(ct.new && >> ip4.dst == 30.0.0.1), action=(reg4 = 30.0.0.1; >> ct_lb_mark(backends=172.16.0.103,172.16.0.102,172.16.0.101);) >> ]) >> # Associate load balancer to lr1 with DGP >> diff --git a/tests/ovn.at b/tests/ovn.at >> index b49a63f3e..e9144b0cd 100644 >> --- a/tests/ovn.at >> +++ b/tests/ovn.at >> @@ -2161,13 +2161,13 @@ reg9[[5]] = chk_ecmp_nh(); >> # commit_lb_aff >> commit_lb_aff(vip = "172.16.0.123:8080", backend = "10.0.0.3:8080", >> proto = tcp, timeout = 30); >> - encodes as >> learn(table=OFTABLE_CHK_LB_AFFINITY,idle_timeout=30,delete_learned,cookie=0xaaaaaaaa,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=172.16.0.123,nw_proto=6,tcp_dst=8080,load:0x1->NXM_NX_REG10[[14]],load:0xa000003->NXM_NX_REG4[[]],load:0x1f90->NXM_NX_REG8[[0..15]]) >> + encodes as >> learn(table=OFTABLE_CHK_LB_AFFINITY,idle_timeout=30,delete_learned,cookie=0xaaaaaaaa,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=172.16.0.123,nw_proto=6,tcp_dst=8080,load:0x1->NXM_NX_REG10[[14]],load:0xa000003->NXM_NX_REG4[[]],load:0x1f90->NXM_NX_REG2[[0..15]]) >> commit_lb_aff(vip = "172.16.0.123", backend = "10.0.0.3", timeout = >> 30); >> encodes as >> learn(table=OFTABLE_CHK_LB_AFFINITY,idle_timeout=30,delete_learned,cookie=0xaaaaaaaa,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=172.16.0.123,load:0x1->NXM_NX_REG10[[14]],load:0xa000003->NXM_NX_REG4[[]]) >> commit_lb_aff(vip = "[[::1]]:8080", backend = "[[::2]]:8080", proto >> = tcp, timeout = 30); >> - encodes as >> learn(table=OFTABLE_CHK_LB_AFFINITY,idle_timeout=30,delete_learned,cookie=0xaaaaaaaa,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=::1,nw_proto=6,tcp_dst=8080,load:0x1->NXM_NX_REG10[[14]],load:0x2->NXM_NX_XXREG0[[]],load:0x1f90->NXM_NX_REG8[[0..15]]) >> + encodes as >> learn(table=OFTABLE_CHK_LB_AFFINITY,idle_timeout=30,delete_learned,cookie=0xaaaaaaaa,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=::1,nw_proto=6,tcp_dst=8080,load:0x1->NXM_NX_REG10[[14]],load:0x2->NXM_NX_XXREG1[[]],load:0x1f90->NXM_NX_REG2[[0..15]]) >> # chk_lb_aff() >> reg9[[6]] = chk_lb_aff(); >> @@ -25576,8 +25576,8 @@ OVS_WAIT_FOR_OUTPUT( >> [ovn-sbctl dump-flows > sbflows >> ovn-sbctl dump-flows sw0 | grep ct_lb_mark | grep priority=120 | >> sed 's/table=..//'], 0, >> [dnl >> - (ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark;) >> - (ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == >> 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = >> 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80; >> hash_fields="ip_dst,ip_src,tcp_dst,tcp_src");) >> + (ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark;) >> + (ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == >> 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = >> 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80; >> hash_fields="ip_dst,ip_src,tcp_dst,tcp_src");) >> ]) >> AT_CAPTURE_FILE([sbflows2]) >> @@ -25621,7 +25621,7 @@ AT_CHECK( >> [grep "ip4.dst == 10.0.0.10 && tcp.dst == 80" sbflows3 | grep >> priority=120 |\ >> ovn_strip_lflows], [0], [dnl >> table=??(ls_in_lb ), priority=120 , match=(ct.new && >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(drop;) >> - table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == >> 1 && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark;) >> + table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == >> 1 && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; >> reg2[[0..15]] = 80; ct_lb_mark;) >> ]) >> AT_CAPTURE_FILE([sbflows4]) >> @@ -30627,7 +30627,7 @@ OVS_WAIT_UNTIL( >> ) >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> ]) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY], [0], [dnl >> @@ -30635,7 +30635,7 @@ NXST_FLOW reply (xid=0x8): >> ]) >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], >> [dnl >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> ]) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN | grep -v NXST], [1], [dnl >> @@ -30654,9 +30654,9 @@ OVS_WAIT_UNTIL( >> ) >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> ]) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY], [0], [dnl >> @@ -30664,8 +30664,8 @@ NXST_FLOW reply (xid=0x8): >> ]) >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], >> [dnl >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> ]) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN | grep -v NXST], [1], [dnl >> @@ -30687,17 +30687,17 @@ OVS_WAIT_UNTIL( >> ) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> ]) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY | grep -v NXST], [1], [dnl >> ]) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], >> [dnl >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> ]) >> check ovn-nbctl --wait=hv ls-lb-add sw0 lb-ipv4-udp >> @@ -30711,35 +30711,35 @@ OVS_WAIT_UNTIL( >> ) >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> ]) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY | grep -v NXST], [1], [dnl >> ]) >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], >> [dnl >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> ]) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> ]) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY | grep -v NXST], [1], [dnl >> ]) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], >> [dnl >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> ]) >> check ovn-nbctl --wait=hv ls-lb-add sw0 lb-ipv6-tcp >> @@ -30753,39 +30753,39 @@ OVS_WAIT_UNTIL( >> ) >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> ]) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY | grep -v NXST], [1], [dnl >> ]) >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], >> [dnl >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> ]) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> ]) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY | grep -v NXST], [1], [dnl >> ]) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], >> [dnl >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> ]) >> check ovn-nbctl --wait=hv ls-lb-add sw0 lb-ipv6-udp >> @@ -30799,11 +30799,11 @@ OVS_WAIT_UNTIL( >> ) >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> ]) >> @@ -30811,19 +30811,19 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY >> ]) >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], >> [dnl >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) >> ]) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> ]) >> @@ -30831,10 +30831,10 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY >> ]) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], >> [dnl >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) >> ]) >> @@ -30851,11 +30851,11 @@ OVS_WAIT_UNTIL( >> ) >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> ]) >> @@ -30863,19 +30863,19 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY >> ]) >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], >> [dnl >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) >> ]) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> ]) >> @@ -30883,10 +30883,10 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY >> ]) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], >> [dnl >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) >> ]) >> @@ -30900,12 +30900,12 @@ OVS_WAIT_UNTIL( >> ) >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,ip,reg1=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,ip,reg4=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> ]) >> @@ -30913,21 +30913,21 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY >> ]) >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], >> [dnl >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg1=0x58585859 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg4=0x58585859 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) >> ]) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,ip,reg1=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,ip,reg4=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> ]) >> @@ -30935,12 +30935,12 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY >> ]) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], >> [dnl >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg1=0x58585859 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg4=0x58585859 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) >> ]) >> check ovn-nbctl --wait=hv ls-lb-add sw0 lb-ipv6 >> @@ -30953,13 +30953,13 @@ OVS_WAIT_UNTIL( >> ) >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,ip,reg1=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,ip,reg4=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) >> table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,ipv6,reg4=0x88000000,reg5=0,reg6=0,reg7=0x89,ipv6_src=4200::2,ipv6_dst=4200::2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> ]) >> @@ -30967,23 +30967,23 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY >> ]) >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], >> [dnl >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg1=0x58585859 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg4=0x58585859 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) >> table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=90,ipv6,reg4=0x88000000,reg5=0,reg6=0,reg7=0x89 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::89)) >> ]) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,ip,reg1=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,ip,reg4=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) >> table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,ipv6,reg4=0x88000000,reg5=0,reg6=0,reg7=0x89,ipv6_src=4200::2,ipv6_dst=4200::2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> ]) >> @@ -30991,12 +30991,12 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY >> ]) >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], >> [dnl >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) >> table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg1=0x58585859 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg4=0x58585859 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) >> table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=90,ipv6,reg4=0x88000000,reg5=0,reg6=0,reg7=0x89 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::89)) >> ]) >> @@ -31093,7 +31093,7 @@ OVS_WAIT_UNTIL( >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl >> table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> ]) >> @@ -31103,7 +31103,7 @@ NXST_FLOW reply (xid=0x8): >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], >> [dnl >> table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) >> - table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> + table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) >> table=OFTABLE_CT_SNAT_HAIRPIN, >> priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) >> ]) >> @@ -36078,15 +36078,15 @@ AT_CHECK([ovs-ofctl dump-groups br-int | >> grep 'nat(dst=85.85.85.44:8504)' -c], [ >> dnl Ensure hairpin flows are correct. >> as hv1 >> AT_CHECK([ovs-ofctl dump-flows br-int | grep >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all], [0], [dnl >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b01,reg2=0x10cd/0xffff,nw_src=85.85.85.1,nw_dst=85.85.85.1,tp_dst=8501 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.1,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b02,reg2=0x10ce/0xffff,nw_src=85.85.85.21,nw_dst=85.85.85.21,tp_dst=8502 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b02,reg2=0x10ce/0xffff,nw_src=85.85.85.22,nw_dst=85.85.85.22,tp_dst=8502 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b03,reg2=0x10cf/0xffff,nw_src=85.85.85.31,nw_dst=85.85.85.31,tp_dst=8503 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b03,reg2=0x10cf/0xffff,nw_src=85.85.85.32,nw_dst=85.85.85.32,tp_dst=8503 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b04,reg2=0x10d0/0xffff,nw_src=85.85.85.41,nw_dst=85.85.85.41,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b04,reg2=0x10d0/0xffff,nw_src=85.85.85.42,nw_dst=85.85.85.42,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b04,reg2=0x10d0/0xffff,nw_src=85.85.85.43,nw_dst=85.85.85.43,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b04,reg2=0x10d0/0xffff,nw_src=85.85.85.44,nw_dst=85.85.85.44,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10cd/0xffff,reg4=0x2b2b2b01,nw_src=85.85.85.1,nw_dst=85.85.85.1,tp_dst=8501 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.1,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=68, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10ce/0xffff,reg4=0x2b2b2b02,nw_src=85.85.85.21,nw_dst=85.85.85.21,tp_dst=8502 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=68, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10ce/0xffff,reg4=0x2b2b2b02,nw_src=85.85.85.22,nw_dst=85.85.85.22,tp_dst=8502 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=68, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10cf/0xffff,reg4=0x2b2b2b03,nw_src=85.85.85.31,nw_dst=85.85.85.31,tp_dst=8503 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=68, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10cf/0xffff,reg4=0x2b2b2b03,nw_src=85.85.85.32,nw_dst=85.85.85.32,tp_dst=8503 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=68, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10d0/0xffff,reg4=0x2b2b2b04,nw_src=85.85.85.41,nw_dst=85.85.85.41,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=68, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10d0/0xffff,reg4=0x2b2b2b04,nw_src=85.85.85.42,nw_dst=85.85.85.42,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=68, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10d0/0xffff,reg4=0x2b2b2b04,nw_src=85.85.85.43,nw_dst=85.85.85.43,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=68, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10d0/0xffff,reg4=0x2b2b2b04,nw_src=85.85.85.44,nw_dst=85.85.85.44,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> ]) >> dnl Change Chassis_Template_Var mappings >> @@ -36137,15 +36137,15 @@ AT_CHECK([ovs-ofctl dump-groups br-int | >> grep 'nat(dst=84.84.84.44:8404)' -c], [ >> dnl Ensure hairpin flows are correct. >> as hv1 >> AT_CHECK([ovs-ofctl dump-flows br-int | grep >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all], [0], [dnl >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a01,reg2=0x1069/0xffff,nw_src=84.84.84.1,nw_dst=84.84.84.1,tp_dst=8401 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.1,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a02,reg2=0x106a/0xffff,nw_src=84.84.84.21,nw_dst=84.84.84.21,tp_dst=8402 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a02,reg2=0x106a/0xffff,nw_src=84.84.84.22,nw_dst=84.84.84.22,tp_dst=8402 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a03,reg2=0x106b/0xffff,nw_src=84.84.84.31,nw_dst=84.84.84.31,tp_dst=8403 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a03,reg2=0x106b/0xffff,nw_src=84.84.84.32,nw_dst=84.84.84.32,tp_dst=8403 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a04,reg2=0x106c/0xffff,nw_src=84.84.84.41,nw_dst=84.84.84.41,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a04,reg2=0x106c/0xffff,nw_src=84.84.84.42,nw_dst=84.84.84.42,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a04,reg2=0x106c/0xffff,nw_src=84.84.84.43,nw_dst=84.84.84.43,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> - table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a04,reg2=0x106c/0xffff,nw_src=84.84.84.44,nw_dst=84.84.84.44,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1069/0xffff,reg4=0x2a2a2a01,nw_src=84.84.84.1,nw_dst=84.84.84.1,tp_dst=8401 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.1,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106a/0xffff,reg4=0x2a2a2a02,nw_src=84.84.84.21,nw_dst=84.84.84.21,tp_dst=8402 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106a/0xffff,reg4=0x2a2a2a02,nw_src=84.84.84.22,nw_dst=84.84.84.22,tp_dst=8402 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106b/0xffff,reg4=0x2a2a2a03,nw_src=84.84.84.31,nw_dst=84.84.84.31,tp_dst=8403 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106b/0xffff,reg4=0x2a2a2a03,nw_src=84.84.84.32,nw_dst=84.84.84.32,tp_dst=8403 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106c/0xffff,reg4=0x2a2a2a04,nw_src=84.84.84.41,nw_dst=84.84.84.41,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106c/0xffff,reg4=0x2a2a2a04,nw_src=84.84.84.42,nw_dst=84.84.84.42,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106c/0xffff,reg4=0x2a2a2a04,nw_src=84.84.84.43,nw_dst=84.84.84.43,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> + table=OFTABLE_CHK_LB_HAIRPIN, >> priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106c/0xffff,reg4=0x2a2a2a04,nw_src=84.84.84.44,nw_dst=84.84.84.44,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) >> ]) >> dnl Remove Chassis_Template_Variables and check that everything is >> diff --git a/tests/system-ovn-kmod.at b/tests/system-ovn-kmod.at >> index 170024a61..f7745b979 100644 >> --- a/tests/system-ovn-kmod.at >> +++ b/tests/system-ovn-kmod.at >> @@ -151,12 +151,12 @@ >> tcp,orig=(src=172.16.1.2,dst=172.16.1.100,sport=<cleared>,dport=<cleared>),reply >> dp_key=$(printf "0x%x" $(fetch_column datapath tunnel_key >> external_ids:name=R2)) >> AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_AFFINITY --no-stats | strip_cookie | sed -e >> 's/load:0xc0a80[[0-9]]02/load:0xc0a80<cleared>02/'], [0], [dnl >> - table=OFTABLE_CHK_LB_AFFINITY, idle_timeout=60, >> tcp,metadata=$dp_key,nw_src=172.16.1.2,nw_dst=172.16.1.100,tp_dst=8080 >> actions=load:0x1->NXM_NX_REG10[[14]],load:0xc0a80<cleared>02->NXM_NX_REG4[[]],load:0x50->NXM_NX_REG8[[0..15]] >> + table=OFTABLE_CHK_LB_AFFINITY, idle_timeout=60, >> tcp,metadata=$dp_key,nw_src=172.16.1.2,nw_dst=172.16.1.100,tp_dst=8080 >> actions=load:0x1->NXM_NX_REG10[[14]],load:0xc0a80<cleared>02->NXM_NX_REG4[[]],load:0x50->NXM_NX_REG2[[0..15]] >> ]) >> check_affinity_flows () { >> -n1=$(ovs-ofctl dump-flows br-int table=$dnat |awk >> '/priority=150,ct_state=\+new\+trk,ip,reg4=0xc0a80102,.*nw_dst=172.16.1.100/{print substr($4,11,length($4)-11)}') >> -n2=$(ovs-ofctl dump-flows br-int table=$dnat |awk >> '/priority=150,ct_state=\+new\+trk,ip,reg4=0xc0a80202,.*nw_dst=172.16.1.100/{print substr($4,11,length($4)-11)}') >> +n1=$(ovs-ofctl dump-flows br-int table=$dnat |awk >> '/priority=150,ct_state=\+new\+trk,ip,reg2=0x50\/0xffff,reg4=0xc0a80102,.*nw_dst=172.16.1.100/{print substr($4,11,length($4)-11)}') >> +n2=$(ovs-ofctl dump-flows br-int table=$dnat |awk >> '/priority=150,ct_state=\+new\+trk,ip,reg2=0x50\/0xffff,reg4=0xc0a80202,.*nw_dst=172.16.1.100/{print substr($4,11,length($4)-11)}') >> [[ $n1 -gt 0 -a $n2 -eq 0 ]] || [[ $n1 -eq 0 -a $n2 -gt 0 ]] >> echo $? >> } >> @@ -452,12 +452,12 @@ >> tcp,orig=(src=fd72::2,dst=fd30::1,sport=<cleared>,dport=<cleared>),reply=(src=fd >> dp_key=$(printf "0x%x" $(fetch_column datapath tunnel_key >> external_ids:name=R2)) >> AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int >> table=OFTABLE_CHK_LB_AFFINITY --no-stats | strip_cookie | sed -e >> 's/load:0xfd1[[0-9]]000000000000/load:0xfd1<cleared>000000000000/'], >> [0], [dnl >> - table=OFTABLE_CHK_LB_AFFINITY, idle_timeout=60, >> tcp6,metadata=$dp_key,ipv6_src=fd72::2,ipv6_dst=fd30::1,tp_dst=8080 >> actions=load:0x1->NXM_NX_REG10[[14]],load:0x2->NXM_NX_XXREG1[[0..63]],load:0xfd1<cleared>000000000000->NXM_NX_XXREG1[[64..127]],load:0x50->NXM_NX_REG8[[0..15]] >> + table=OFTABLE_CHK_LB_AFFINITY, idle_timeout=60, >> tcp6,metadata=$dp_key,ipv6_src=fd72::2,ipv6_dst=fd30::1,tp_dst=8080 >> actions=load:0x1->NXM_NX_REG10[[14]],load:0x2->NXM_NX_XXREG1[[0..63]],load:0xfd1<cleared>000000000000->NXM_NX_XXREG1[[64..127]],load:0x50->NXM_NX_REG2[[0..15]] >> ]) >> check_affinity_flows () { >> -n1=$(ovs-ofctl dump-flows br-int table=$dnat |awk >> '/priority=150,ct_state=\+new\+trk,ipv6,reg4=0xfd110000,.*ipv6_dst=fd30::1\s/{print substr($4,11,length($4)-11)}') >> -n2=$(ovs-ofctl dump-flows br-int table=$dnat |awk >> '/priority=150,ct_state=\+new\+trk,ipv6,reg4=0xfd120000,.*ipv6_dst=fd30::1\s/{print substr($4,11,length($4)-11)}') >> +n1=$(ovs-ofctl dump-flows br-int table=$dnat |awk >> '/priority=150,ct_state=\+new\+trk,ipv6,reg2=0x50\/0xffff,reg4=0xfd110000,.*ipv6_dst=fd30::1\s/{print substr($4,11,length($4)-11)}') >> +n2=$(ovs-ofctl dump-flows br-int table=$dnat |awk >> '/priority=150,ct_state=\+new\+trk,ipv6,reg2=0x50\/0xffff,reg4=0xfd120000,.*ipv6_dst=fd30::1\s/{print substr($4,11,length($4)-11)}') >> [[ $n1 -gt 0 -a $n2 -eq 0 ]] || [[ $n1 -eq 0 -a $n2 -gt 0 ]] >> echo $? >> } >
Hi Ales, Mark Thanks for the patch! I am late on this patch, but I had some questions related to it. I think that we might have some issues with upgrades. With this patch, if we upgrade ovn-controller first, ovn-controller will use registers such as MFF_LOG_LB_AFF_MATCH_PORT in OFTABLE_CHK_LB_AFFINITY table, using the new value for the register But until ovn-northd is upgraded, ovn-northd still uses old value, and lb affinity won't work. I did run the system test "load balancing affinity sessions", using "old" northd (i.e. 24.09.0) and ovn-controller from main, and it fails: test was expecting to hit one backend (thanks to lb affinity) but hit multiple backends. I see that you just posted https://patchwork.ozlabs.org/project/ovn/patch/20250128094539.508298-1-amusil@redhat.com/ We will continue the conversation there. Thanks Xavier On Thu, Jan 23, 2025 at 6:05 PM Mark Michelson <mmichels@redhat.com> wrote: > On 1/22/25 16:59, Mark Michelson wrote: > > Hi Ales, > > > > Acked-by: Mark Michelson <mmichels@redhat.com> > > > > My only suggestion would be to add a comment in northd.c above the > > definitions for REG_LB_IPV4, REG_LB_IPV6, and REG_LB_PORT that explains > > that on new connections, these contain the VIP[:port], and on > > established connections, these contain the backend[:port]. Otherwise, > > the register names are ambiguous, and the fact they are used for two > > purposes is not clear. > > > > On 1/22/25 12:08, Ales Musil wrote: > >> We were running out of space in registers. After the consolidation > >> there are several registers are free to use once again. > >> The consolidation is mainly done by reusing single register for LB > >> affinity flows. > >> > >> Signed-off-by: Ales Musil <amusil@redhat.com> > > I added the comment and pushed the patch to main. Thanks Ales! > > >> --- > >> include/ovn/logical-fields.h | 7 +- > >> lib/actions.c | 6 +- > >> northd/northd.c | 254 +++++++++++++--------------------- > >> tests/ovn-northd.at | 126 ++++++++--------- > >> tests/ovn.at | 258 > +++++++++++++++++------------------ > >> tests/system-ovn-kmod.at | 12 +- > >> 6 files changed, 297 insertions(+), 366 deletions(-) > >> > >> diff --git a/include/ovn/logical-fields.h b/include/ovn/logical-fields.h > >> index 59e4ac3da..6a87fc386 100644 > >> --- a/include/ovn/logical-fields.h > >> +++ b/include/ovn/logical-fields.h > >> @@ -47,7 +47,7 @@ enum ovn_controller_event { > >> * > >> * Make sure these don't overlap with the logical fields! */ > >> #define MFF_LOG_REG0 MFF_REG0 > >> -#define MFF_LOG_LB_ORIG_DIP_IPV4 MFF_REG1 > >> +#define MFF_LOG_LB_ORIG_DIP_IPV4 MFF_REG4 > >> #define MFF_LOG_LB_ORIG_TP_DPORT MFF_REG2 > >> #define MFF_LOG_XXREG0 MFF_XXREG0 > >> @@ -56,9 +56,8 @@ enum ovn_controller_event { > >> #define MFF_N_LOG_REGS 10 > >> #define MFF_LOG_LB_AFF_MATCH_IP4_ADDR MFF_REG4 > >> -#define MFF_LOG_LB_AFF_MATCH_LS_IP6_ADDR MFF_XXREG0 > >> -#define MFF_LOG_LB_AFF_MATCH_LR_IP6_ADDR MFF_XXREG1 > >> -#define MFF_LOG_LB_AFF_MATCH_PORT MFF_REG8 > >> +#define MFF_LOG_LB_AFF_MATCH_IP6_ADDR MFF_XXREG1 > >> +#define MFF_LOG_LB_AFF_MATCH_PORT MFF_REG2 > >> #define MFF_LOG_CT_ORIG_NW_DST_ADDR MFF_REG1 /* > >> REG_ORIG_DIP_IPV4 */ > >> #define MFF_LOG_CT_ORIG_IP6_DST_ADDR MFF_XXREG1 /* > >> REG_ORIG_DIP_IPV6 */ > >> diff --git a/lib/actions.c b/lib/actions.c > >> index ea30be767..62e73b2c5 100644 > >> --- a/lib/actions.c > >> +++ b/lib/actions.c > >> @@ -5371,11 +5371,7 @@ encode_COMMIT_LB_AFF(const struct > >> ovnact_commit_lb_aff *lb_aff, > >> imm_backend_ip = (union mf_value) { > >> .ipv6 = lb_aff->backend, > >> }; > >> - if (ep->is_switch) { > >> - ol_spec->dst.field = > >> mf_from_id(MFF_LOG_LB_AFF_MATCH_LS_IP6_ADDR); > >> - } else { > >> - ol_spec->dst.field = > >> mf_from_id(MFF_LOG_LB_AFF_MATCH_LR_IP6_ADDR); > >> - } > >> + ol_spec->dst.field = mf_from_id(MFF_LOG_LB_AFF_MATCH_IP6_ADDR); > >> } else { > >> ovs_be32 ip4 = in6_addr_get_mapped_ipv4(&lb_aff->backend); > >> imm_backend_ip = (union mf_value) { > >> diff --git a/northd/northd.c b/northd/northd.c > >> index c41a7591b..2385c3b5e 100644 > >> --- a/northd/northd.c > >> +++ b/northd/northd.c > >> @@ -125,20 +125,12 @@ static bool vxlan_mode; > >> #define REGBIT_FROM_ROUTER_PORT "reg0[18]" > >> #define REGBIT_IP_FRAG "reg0[19]" > >> -#define REG_ORIG_DIP_IPV4 "reg1" > >> -#define REG_ORIG_DIP_IPV6 "xxreg1" > >> -#define REG_ORIG_TP_DPORT "reg2[0..15]" > >> - > >> -/* Register used to store backend ipv6 address > >> - * for load balancer affinity. */ > >> -#define REG_LB_L2_AFF_BACKEND_IP6 "xxreg0" > >> - > >> /* Register definitions for switches and routers. */ > >> -/* Register used to store backend ipv4 address > >> - * for load balancer affinity. */ > >> -#define REG_LB_AFF_BACKEND_IP4 "reg4" > >> -#define REG_LB_AFF_MATCH_PORT "reg8[0..15]" > >> +/* Register used for LB. */ > >> +#define REG_LB_IPV4 "reg4" > >> +#define REG_LB_IPV6 "xxreg1" > >> +#define REG_LB_PORT "reg2[0..15]" > >> /* Registers for ACL evaluation */ > >> #define REGBIT_ACL_VERDICT_ALLOW "reg8[16]" > >> @@ -192,12 +184,6 @@ BUILD_ASSERT_DECL(ACL_OBS_STAGE_MAX < (1 << 2)); > >> #define REG_DHCP_RELAY_DIP_IPV4 "reg2" > >> #define REG_ROUTE_TABLE_ID "reg7" > >> -/* Register used to store backend ipv6 address > >> - * for load balancer affinity. */ > >> -#define REG_LB_L3_AFF_BACKEND_IP6 "xxreg1" > >> - > >> -#define REG_ORIG_TP_DPORT_ROUTER "reg9[16..31]" > >> - > >> /* Registers used for pasing observability information for switches: > >> * domain and point ID. */ > >> #define REG_OBS_POINT_ID_NEW "reg3" > >> @@ -227,25 +213,27 @@ BUILD_ASSERT_DECL(ACL_OBS_STAGE_MAX < (1 << 2)); > >> * | | REGBIT_{HAIRPIN/HAIRPIN_REPLY} | > >> | | > >> * | | REGBIT_ACL_HINT_{ALLOW_NEW/ALLOW/DROP/BLOCK} | > >> | | > >> * | | REGBIT_ACL_{LABEL/STATELESS} | X > >> | | > >> - * +----+----------------------------------------------+ X | > >> LB_L2_AFF_BACKEND_IP6 | > >> - * | R1 | ORIG_DIP_IPV4 (>= IN_PRE_STATEFUL) | R | > >> (>= IN_LB_AFF_CHECK && | > >> - * +----+----------------------------------------------+ E | > >> <= IN_LB_AFF_LEARN) | > >> - * | R2 | ORIG_TP_DPORT (>= IN_PRE_STATEFUL) | G > >> | | > >> - * +----+----------------------------------------------+ 0 > >> | | > >> + * +----+----------------------------------------------+ X > >> | | > >> + * | R1 | UNUSED | R > >> | | > >> + * +----+----------------------------------------------+ E > >> | | > >> + * | R2 | REG_LB_PORT | G > >> | | > >> + * | | (>= IN_PRE_STATEFUL && <= IN_LB_AFF_LEARN) | 0 > >> | | > >> + * +----+----------------------------------------------+ > >> | | > >> * | R3 | OBS_POINT_ID_NEW | > >> | | > >> * | | (>= ACL_EVAL* && <= ACL_ACTION*) | > >> | | > >> * > >> > +----+----------------------------------------------+---+-----------------------------------+ > >> - * | R4 | REG_LB_AFF_BACKEND_IP4 | > >> | | > >> - * +----+----------------------------------------------+ X > >> | | > >> - * | R5 | UNUSED | X | > >> ORIG_DIP_IPV6(>= IN_PRE_STATEFUL) | > >> - * +----+----------------------------------------------+ R > >> | | > >> - * | R6 | UNUSED | E > >> | | > >> - * +----+----------------------------------------------+ G > >> | | > >> - * | R7 | UNUSED | 1 > >> | | > >> + * | R4 | REG_LB_IPV4 | > >> | | > >> + * | R4 | (>= IN_PRE_STATEFUL && <= IN_HAIRPIN) | X > >> | | > >> + * +----+----------------------------------------------+ X > >> | REG_LB_IPV6 | > >> + * | R5 | UNUSED | R | (>= > >> IN_PRE_STATEFUL && | > >> + * +----+----------------------------------------------+ E | <= > >> IN_HAIRPIN) | > >> + * | R6 | UNUSED | G > >> | | > >> + * +----+----------------------------------------------+ 1 > >> | | > >> + * | R7 | UNUSED | > >> | | > >> * > >> > +----+----------------------------------------------+---+-----------------------------------+ > >> - * | R8 | LB_AFF_MATCH_PORT | X | > >> REG_OBS_COLLECTOR_ID_NEW | > >> - * | | (>= IN_LB_AFF_CHECK && <= IN_LB_AFF_LEARN) | R | > >> REG_OBS_COLLECTOR_ID_EST | > >> - * | | | E | (>= > >> ACL_EVAL* && <= ACL_ACTION*) | > >> + * | R8 | REG_OBS_COLLECTOR_ID_NEW | X > >> | | > >> + * | | REG_OBS_COLLECTOR_ID_EST | R > >> | | > >> + * | | (>= ACL_EVAL* && <= ACL_ACTION*) | E > >> | | > >> * +----+----------------------------------------------+ G > >> +-----------------------------------+ > >> * | R9 | OBS_POINT_ID_EST | 4 > >> | | > >> * | | (>= ACL_EVAL* && <= ACL_ACTION*) | > >> | | > >> @@ -256,23 +244,26 @@ BUILD_ASSERT_DECL(ACL_OBS_STAGE_MAX < (1 << 2)); > >> * | R0 | REGBIT_ND_RA_OPTS_RESULT | | | > >> | | > >> * | | (= IN_ND_RA_OPTIONS) | X | | > >> | | > >> * | | NEXT_HOP_IPV4 | R | | > >> | | > >> - * | | (>= IP_INPUT) | E | INPORT_ETH_ADDR | X > >> | | > >> + * | | (>= IN_IP_ROUTING) | E | INPORT_ETH_ADDR | X > >> | | > >> * +-----+---------------------------+ G | (< IP_INPUT) | X > >> | | > >> * | R1 | UNUSED | 0 | | R > >> | | > >> - * | | | | | E | > >> NEXT_HOP_IPV6 (>= DEFRAG ) | > >> + * | | | | | E | > >> NEXT_HOP_IPV6 (>= IN_IP_ROUTING) | > >> * +-----+---------------------------+---+-----------------+ G > >> | | > >> - * | R2 REG_DHCP_RELAY_DIP_IPV4 | X | | 0 > >> | | > >> - * | | | R | | > >> | | > >> - * +-----+---------------------------+ E | UNUSED | > >> | | > >> - * | R3 | UNUSED | G | | > >> | | > >> - * | | | 1 | | > >> | | > >> + * | R2 | REG_DHCP_RELAY_DIP_IPV4 | | | 0 > >> | | > >> + * | | REG_LB_PORT | X | | 0 > >> | | > >> + * | | (>= IN_LB_AFF_CHECK | R | | > >> | | > >> + * | | <= IN_LB_AFF_LEARN) | E | | > >> | | > >> + * +-----+---------------------------+ G | UNUSED | > >> | | > >> + * | R3 | UNUSED | 1 | | > >> | | > >> + * | | | | | > >> | | > >> * > >> > +-----+---------------------------+---+-----------------+---+------------------------------------+ > >> - * | R4 | REG_LB_AFF_BACKEND_IP4 | X | | > >> | | > >> - * | | | R | | > >> | | > >> + * | R4 | REG_LB_IPV4 | X | | > >> | | > >> + * | | (>= IN_LB_AFF_CHECK && | R | | > >> | | > >> + * | | <= IN_LB_AFF_LEARN) | R | | > >> | | > >> * +-----+---------------------------+ E | UNUSED | X > >> | | > >> - * | R5 | SRC_IPV4 for ARP-REQ | G | | X > >> | | > >> - * | | (>= IP_INPUT) | 2 | | R > >> | LB_L3_AFF_BACKEND_IP6 | > >> - * +-----+---------------------------+---+-----------------+ E > >> | (<= IN_DNAT) | > >> + * | R5 | SRC_IPV4 for ARP-REQ | G | | X > >> | REG_LB_IPV6 | > >> + * | | (>= IP_INPUT) | 2 | | R > >> | (>= IN_LB_AFF_CHECK && | > >> + * +-----+---------------------------+---+-----------------+ E > >> | <= IN_LB_AFF_LEARN) | > >> * | R6 | UNUSED | X | | G > >> | | > >> * | | | R | | 1 > >> | | > >> * +-----+---------------------------+ E | UNUSED | > >> | | > >> @@ -282,7 +273,7 @@ BUILD_ASSERT_DECL(ACL_OBS_STAGE_MAX < (1 << 2)); > >> * > >> > +-----+---------------------------+---+-----------------+---+------------------------------------+ > >> * | R8 | ECMP_GROUP_ID | | | > >> * | | ECMP_MEMBER_ID | | | > >> - * | | LB_AFF_MATCH_PORT | X | | > >> + * | | | X | | > >> * +-----+---------------------------+ R | | > >> * | | REGBIT_{ | E | | > >> * | | EGRESS_LOOPBACK/ | G | UNUSED | > >> @@ -292,9 +283,6 @@ BUILD_ASSERT_DECL(ACL_OBS_STAGE_MAX < (1 << 2)); > >> * | |REGBIT_DHCP_RELAY_REQ_CHK/ | | | > >> * | |REGBIT_DHCP_RELAY_RESP_CHK | | | > >> * | |REGBIT_NEXTHOP_IS_IPV4} | | | > >> - * | | | | | > >> - * | | REG_ORIG_TP_DPORT_ROUTER | | | > >> - * | | | | | > >> * +-----+---------------------------+---+-----------------+ > >> * > >> */ > >> @@ -3621,6 +3609,16 @@ build_lb_vip_actions(const struct ovn_northd_lb > >> *lb, > >> bool reject = !lb_vip->n_backends && lb_vip->empty_backend_rej; > >> bool drop = !lb_vip->n_backends && !lb_vip->empty_backend_rej; > >> + if (ls_dp || lb->affinity_timeout) { > >> + const char *ip_reg = > >> + lb_vip->address_family == AF_INET ? REG_LB_IPV4 : > >> REG_LB_IPV6; > >> + ds_put_format(action, "%s = %s; ", ip_reg, lb_vip->vip_str); > >> + > >> + if (lb_vip->port_str) { > >> + ds_put_format(action, REG_LB_PORT" = %s; ", > >> lb_vip->port_str); > >> + } > >> + } > >> + > >> if (lb_vip_nb->lb_health_check) { > >> ds_put_cstr(action, "ct_lb_mark(backends="); > >> @@ -7867,29 +7865,19 @@ build_lb_rules_pre_stateful(struct lflow_table > >> *lflows, > >> */ > >> if (lb->vips[i].address_family == AF_INET) { > >> ip_match = "ip4"; > >> - ds_put_format(action, REG_ORIG_DIP_IPV4 " = %s; ", > >> + ds_put_format(action, REG_LB_IPV4 " = %s; ", > >> lb_vip->vip_str); > >> } else { > >> ip_match = "ip6"; > >> - ds_put_format(action, REG_ORIG_DIP_IPV6 " = %s; ", > >> + ds_put_format(action, REG_LB_IPV6 " = %s; ", > >> lb_vip->vip_str); > >> } > >> - const char *proto = NULL; > >> if (lb_vip->port_str) { > >> - proto = "tcp"; > >> - if (lb->nlb->protocol) { > >> - if (!strcmp(lb->nlb->protocol, "udp")) { > >> - proto = "udp"; > >> - } else if (!strcmp(lb->nlb->protocol, "sctp")) { > >> - proto = "sctp"; > >> - } > >> - } > >> - > >> /* Store the original destination port to be used when > >> generating > >> * hairpin flows. > >> */ > >> - ds_put_format(action, REG_ORIG_TP_DPORT " = %s; ", > >> + ds_put_format(action, REG_LB_PORT " = %s; ", > >> lb_vip->port_str); > >> } > >> ds_put_cstr(action, "ct_lb_mark;"); > >> @@ -7897,7 +7885,8 @@ build_lb_rules_pre_stateful(struct lflow_table > >> *lflows, > >> ds_put_format(match, REGBIT_CONNTRACK_NAT" == 1 && %s.dst == > >> %s", > >> ip_match, lb_vip->vip_str); > >> if (lb_vip->port_str) { > >> - ds_put_format(match, " && %s.dst == %s", proto, > >> lb_vip->port_str); > >> + ds_put_format(match, " && %s.dst == %s", lb->proto, > >> + lb_vip->port_str); > >> } > >> ovn_lflow_add_with_dp_group( > >> @@ -7913,34 +7902,30 @@ build_lb_rules_pre_stateful(struct lflow_table > >> *lflows, > >> * - load balancing affinity check: > >> * table=lr_in_lb_aff_check, priority=100 > >> * match=(new_lb_match) > >> - * action=(REG_NEXT_HOP_IPV4 = ip4.dst; > >> - * REG_ORIG_TP_DPORT_ROUTER = tcp.dst; > >> - * REGBIT_KNOWN_LB_SESSION = chk_lb_aff(); next;) > >> + * action=(REGBIT_KNOWN_LB_SESSION = chk_lb_aff(); next;) > >> * > >> * - load balancing: > >> * table=lr_in_dnat, priority=150 > >> * match=(REGBIT_KNOWN_LB_SESSION == 1 && ct.new && ip4.dst == V > >> - * && REG_LB_AFF_BACKEND_IP4 == B1 && > >> REG_LB_AFF_MATCH_PORT == BP1) > >> - * action=(REG_NEXT_HOP_IPV4 = V; lb_action; > >> - * ct_lb_mark(backends=B1:BP1; ct_flag);) > >> + * && REG_LB_IPV4 == B1 && REG_LB_PORT == BP1) > >> + * action=(lb_action; ct_lb_mark(backends=B1:BP1; ct_flag);) > >> * table=lr_in_dnat, priority=150 > >> * match=(REGBIT_KNOWN_LB_SESSION == 1 && ct.new && ip4.dst == V > >> - * && REG_LB_AFF_BACKEND_IP4 == B2 && > >> REG_LB_AFF_MATCH_PORT == BP2) > >> - * action=(REG_NEXT_HOP_IPV4 = V; lb_action; > >> - * ct_lb_mark(backends=B2:BP2; ct_flag);) > >> + * && REG_LB_IPV4 == B2 && REG_LB_PORT == BP2) > >> + * action=(lb_action; ct_lb_mark(backends=B2:BP2; ct_flag);) > >> * > >> * - load balancing affinity learn: > >> * table=lr_in_lb_aff_learn, priority=100 > >> * match=(REGBIT_KNOWN_LB_SESSION == 0 > >> * && ct.new && ip4 > >> - * && REG_NEXT_HOP_IPV4 == V && REG_ORIG_TP_DPORT_ROUTER > >> = VP > >> + * && REG_LB_IPV4 == V && REG_LB_PORT = VP > >> * && ip4.dst == B1 && tcp.dst == BP1) > >> * action=(commit_lb_aff(vip = "V:VP", backend = "B1:BP1", > >> * proto = tcp, timeout = T)); > >> * table=lr_in_lb_aff_learn, priority=100 > >> * match=(REGBIT_KNOWN_LB_SESSION == 0 > >> * && ct.new && ip4 > >> - * && REG_NEXT_HOP_IPV4 == V && REG_ORIG_TP_DPORT_ROUTER > >> = VP > >> + * && REG_LB_IPV4 == V && REG_LB_PORT = VP > >> * && ip4.dst == B2 && tcp.dst == BP2) > >> * action=(commit_lb_aff(vip = "V:VP", backend = "B2:BP2", > >> * proto = tcp, timeout = T)); > >> @@ -7963,14 +7948,11 @@ build_lb_affinity_lr_flows(struct lflow_table > >> *lflows, > >> struct ds aff_action_learn = DS_EMPTY_INITIALIZER; > >> struct ds aff_match = DS_EMPTY_INITIALIZER; > >> struct ds aff_match_learn = DS_EMPTY_INITIALIZER; > >> - struct ds aff_check_action = DS_EMPTY_INITIALIZER; > >> bool ipv6 = !IN6_IS_ADDR_V4MAPPED(&lb_vip->vip); > >> const char *ip_match = ipv6 ? "ip6" : "ip4"; > >> - const char *reg_vip = ipv6 ? REG_NEXT_HOP_IPV6 : REG_NEXT_HOP_IPV4; > >> - const char *reg_backend = > >> - ipv6 ? REG_LB_L3_AFF_BACKEND_IP6 : REG_LB_AFF_BACKEND_IP4; > >> + const char *reg_ip = ipv6 ? REG_LB_IPV6 : REG_LB_IPV4; > >> const char *ct_flag = NULL; > >> if (lb_action && !strcmp(lb_action, "flags.skip_snat_for_lb = 1; > >> ")) { > >> ct_flag = "; skip_snat"; > >> @@ -7980,22 +7962,12 @@ build_lb_affinity_lr_flows(struct lflow_table > >> *lflows, > >> } > >> /* Create affinity check flow. */ > >> - ds_put_format(&aff_check_action, "%s = %s.dst; ", reg_vip, > >> ip_match); > >> - > >> - if (lb_vip->port_str) { > >> - ds_put_format(&aff_check_action, REG_ORIG_TP_DPORT_ROUTER" = > >> %s.dst; ", > >> - lb->proto); > >> - } > >> - ds_put_cstr(&aff_check_action, REGBIT_KNOWN_LB_SESSION > >> - " = chk_lb_aff(); next;"); > >> - > >> ovn_lflow_add_with_dp_group( > >> lflows, dp_bitmap, ods_size(lr_datapaths), > >> S_ROUTER_IN_LB_AFF_CHECK, > >> - 100, new_lb_match, ds_cstr(&aff_check_action), > >> &lb->nlb->header_, > >> - lflow_ref); > >> + 100, new_lb_match, REGBIT_KNOWN_LB_SESSION" = chk_lb_aff(); > >> next;", > >> + &lb->nlb->header_, lflow_ref); > >> /* Prepare common part of affinity LB and affinity learn action. > */ > >> - ds_put_format(&aff_action, "%s = %s; ", reg_vip, lb_vip->vip_str); > >> ds_put_cstr(&aff_action_learn, "commit_lb_aff(vip = \""); > >> if (lb_vip->port_str) { > >> @@ -8015,19 +7987,19 @@ build_lb_affinity_lr_flows(struct lflow_table > >> *lflows, > >> if (lb_vip->port_str) { > >> ds_put_format(&aff_match_learn, REGBIT_KNOWN_LB_SESSION" == > >> 0 && " > >> "ct.new && %s && %s == %s && " > >> - REG_ORIG_TP_DPORT_ROUTER" == %s && " > >> - "%s.dst == ", ip_match, reg_vip, lb_vip->vip_str, > >> + REG_LB_PORT " == %s && " > >> + "%s.dst == ", ip_match, reg_ip, lb_vip->vip_str, > >> lb_vip->port_str, ip_match); > >> } else { > >> ds_put_format(&aff_match_learn, REGBIT_KNOWN_LB_SESSION" == > >> 0 && " > >> "ct.new && %s && %s == %s && %s.dst == ", > >> ip_match, > >> - reg_vip, lb_vip->vip_str, ip_match); > >> + reg_ip, lb_vip->vip_str, ip_match); > >> } > >> /* Prepare common part of affinity match. */ > >> ds_put_format(&aff_match, REGBIT_KNOWN_LB_SESSION" == 1 && " > >> "ct.new && %s.dst == %s && %s == ", ip_match, > >> - lb_vip->vip_str, reg_backend); > >> + lb_vip->vip_str, reg_ip); > >> /* Store the common part length. */ > >> size_t aff_action_len = aff_action.length; > >> @@ -8050,7 +8022,7 @@ build_lb_affinity_lr_flows(struct lflow_table > >> *lflows, > >> ds_put_format(&aff_match_learn, " && %s.dst == %d", > >> lb->proto, backend->port); > >> - ds_put_format(&aff_match, " && "REG_LB_AFF_MATCH_PORT" == > >> %d", > >> + ds_put_format(&aff_match, " && "REG_LB_PORT" == %d", > >> backend->port); > >> } else { > >> ds_put_cstr(&aff_action, backend->ip_str); > >> @@ -8094,7 +8066,6 @@ build_lb_affinity_lr_flows(struct lflow_table > >> *lflows, > >> ds_destroy(&aff_action_learn); > >> ds_destroy(&aff_match); > >> ds_destroy(&aff_match_learn); > >> - ds_destroy(&aff_check_action); > >> } > >> /* Builds the logical switch flows related to load balancer affinity. > >> @@ -8102,35 +8073,33 @@ build_lb_affinity_lr_flows(struct lflow_table > >> *lflows, > >> * affinity timeout set to T, it generates the following logical > flows: > >> * - load balancing affinity check: > >> * table=ls_in_lb_aff_check, priority=100 > >> - * match=(ct.new && ip4 > >> - * && REG_ORIG_DIP_IPV4 == V && REG_ORIG_TP_DPORT == VP) > >> + * match=(ct.new && ip4 && ip4.dst == V && PROTO && PROTO.dst == > >> VP) > >> * action=(REGBIT_KNOWN_LB_SESSION = chk_lb_aff(); next;) > >> * > >> * - load balancing: > >> * table=ls_in_lb, priority=150 > >> * match=(REGBIT_KNOWN_LB_SESSION == 1 && ct.new && ip4.dst == V > >> - * && REG_LB_AFF_BACKEND_IP4 == B1 && > >> REG_LB_AFF_MATCH_PORT == BP1) > >> - * action=(REG_ORIG_DIP_IPV4 = V; REG_ORIG_TP_DPORT = VP; > >> + * && PROTO && PROTO.dst == VP) > >> + * action=(REG_LB_IPV4 = V; REG_LB_PORT = VP; > >> * ct_lb_mark(backends=B1:BP1);) > >> * table=ls_in_lb, priority=150 > >> * match=(REGBIT_KNOWN_LB_SESSION == 1 && ct.new && ip4.dst == V > >> - * && REG_LB_AFF_BACKEND_IP4 == B2 && > >> REG_LB_AFF_MATCH_PORT == BP2) > >> - * action=(REG_ORIG_DIP_IPV4 = V; > >> - * REG_ORIG_TP_DPORT = VP; > >> + * && PROTO && PROTO.dst == VP) > >> + * action=(REG_LB_IPV4 = V; REG_LB_PORT = VP; > >> * ct_lb_mark(backends=B1:BP2);) > >> * > >> * - load balancing affinity learn: > >> * table=ls_in_lb_aff_learn, priority=100 > >> * match=(REGBIT_KNOWN_LB_SESSION == 0 > >> * && ct.new && ip4 > >> - * && REG_ORIG_DIP_IPV4 == V && REG_ORIG_TP_DPORT == VP > >> + * && REG_LB_IPV4 == V && REG_LB_PORT == VP > >> * && ip4.dst == B1 && tcp.dst == BP1) > >> * action=(commit_lb_aff(vip = "V:VP", backend = "B1:BP1", > >> * proto = tcp, timeout = T)); > >> * table=ls_in_lb_aff_learn, priority=100 > >> * match=(REGBIT_KNOWN_LB_SESSION == 0 > >> * && ct.new && ip4 > >> - * && REG_ORIG_DIP_IPV4 == V && REG_ORIG_TP_DPORT == VP > >> + * && REG_LB_IPV4 == V && REG_LB_PORT == VP > >> * && ip4.dst == B2 && tcp.dst == BP2) > >> * action=(commit_lb_aff(vip = "V:VP", backend = "B2:BP2", > >> * proto = tcp, timeout = T)); > >> @@ -8149,19 +8118,16 @@ build_lb_affinity_ls_flows(struct lflow_table > >> *lflows, > >> const struct ovn_northd_lb *lb = lb_dps->lb; > >> struct ds new_lb_match = DS_EMPTY_INITIALIZER; > >> - if (IN6_IS_ADDR_V4MAPPED(&lb_vip->vip)) { > >> - ds_put_format(&new_lb_match, > >> - "ct.new && ip4 && "REG_ORIG_DIP_IPV4 " == %s", > >> - lb_vip->vip_str); > >> - } else { > >> - ds_put_format(&new_lb_match, > >> - "ct.new && ip6 && "REG_ORIG_DIP_IPV6 " == %s", > >> - lb_vip->vip_str); > >> - } > >> + bool ipv6 = lb_vip->address_family == AF_INET6; > >> + const char *ip_match = ipv6 ? "ip6" : "ip4"; > >> + const char *reg_ip = ipv6 ? REG_LB_IPV6 : REG_LB_IPV4; > >> + > >> + ds_put_format(&new_lb_match, "ct.new && %s && %s.dst == %s", > >> + ip_match, ip_match, lb_vip->vip_str); > >> if (lb_vip->port_str) { > >> - ds_put_format(&new_lb_match, " && "REG_ORIG_TP_DPORT " == %s", > >> - lb_vip->port_str); > >> + ds_put_format(&new_lb_match, " && %s && %s.dst == %s", > >> + lb->proto, lb->proto, lb_vip->port_str); > >> } > >> static char *aff_check = REGBIT_KNOWN_LB_SESSION" = > >> chk_lb_aff(); next;"; > >> @@ -8177,19 +8143,12 @@ build_lb_affinity_ls_flows(struct lflow_table > >> *lflows, > >> struct ds aff_match = DS_EMPTY_INITIALIZER; > >> struct ds aff_match_learn = DS_EMPTY_INITIALIZER; > >> - bool ipv6 = !IN6_IS_ADDR_V4MAPPED(&lb_vip->vip); > >> - const char *ip_match = ipv6 ? "ip6" : "ip4"; > >> - > >> - const char *reg_vip = ipv6 ? REG_ORIG_DIP_IPV6 : REG_ORIG_DIP_IPV4; > >> - const char *reg_backend = > >> - ipv6 ? REG_LB_L2_AFF_BACKEND_IP6 : REG_LB_AFF_BACKEND_IP4; > >> - > >> /* Prepare common part of affinity LB and affinity learn action. > */ > >> - ds_put_format(&aff_action, "%s = %s; ", reg_vip, lb_vip->vip_str); > >> + ds_put_format(&aff_action, "%s = %s; ", reg_ip, lb_vip->vip_str); > >> ds_put_cstr(&aff_action_learn, "commit_lb_aff(vip = \""); > >> if (lb_vip->port_str) { > >> - ds_put_format(&aff_action, REG_ORIG_TP_DPORT" = %s; ", > >> + ds_put_format(&aff_action, REG_LB_PORT" = %s; ", > >> lb_vip->port_str); > >> ds_put_format(&aff_action_learn, ipv6 ? "[%s]:%s" : "%s:%s", > >> lb_vip->vip_str, lb_vip->port_str); > >> @@ -8204,19 +8163,19 @@ build_lb_affinity_ls_flows(struct lflow_table > >> *lflows, > >> if (lb_vip->port_str) { > >> ds_put_format(&aff_match_learn, REGBIT_KNOWN_LB_SESSION" == > >> 0 && " > >> "ct.new && %s && %s == %s && " > >> - REG_ORIG_TP_DPORT" == %s && %s.dst == ", > >> - ip_match, reg_vip, lb_vip->vip_str, > >> + REG_LB_PORT" == %s && %s.dst == ", > >> + ip_match, reg_ip, lb_vip->vip_str, > >> lb_vip->port_str, ip_match); > >> } else { > >> ds_put_format(&aff_match_learn, REGBIT_KNOWN_LB_SESSION" == > >> 0 && " > >> "ct.new && %s && %s == %s && %s.dst == ", > >> - ip_match, reg_vip, lb_vip->vip_str, ip_match); > >> + ip_match, reg_ip, lb_vip->vip_str, ip_match); > >> } > >> /* Prepare common part of affinity match. */ > >> ds_put_format(&aff_match, REGBIT_KNOWN_LB_SESSION" == 1 && " > >> "ct.new && %s.dst == %s && %s == ", ip_match, > >> - lb_vip->vip_str, reg_backend); > >> + lb_vip->vip_str, reg_ip); > >> /* Store the common part length. */ > >> size_t aff_action_len = aff_action.length; > >> @@ -8238,7 +8197,7 @@ build_lb_affinity_ls_flows(struct lflow_table > >> *lflows, > >> ds_put_format(&aff_match_learn, " && %s.dst == %d", > >> lb->proto, backend->port); > >> - ds_put_format(&aff_match, " && "REG_LB_AFF_MATCH_PORT" == > >> %d", > >> + ds_put_format(&aff_match, " && "REG_LB_PORT" == %d", > >> backend->port); > >> } else { > >> ds_put_cstr(&aff_action, backend->ip_str); > >> @@ -8315,33 +8274,10 @@ build_lb_rules(struct lflow_table *lflows, > >> struct ovn_lb_datapaths *lb_dps, > >> for (size_t i = 0; i < lb->n_vips; i++) { > >> struct ovn_lb_vip *lb_vip = &lb->vips[i]; > >> struct ovn_northd_lb_vip *lb_vip_nb = &lb->vips_nb[i]; > >> - const char *ip_match = NULL; > >> + const char *ip_match = > >> + lb_vip->address_family == AF_INET ? "ip4" : "ip6"; > >> ds_clear(action); > >> - > >> - /* Store the original destination IP to be used when generating > >> - * hairpin flows. > >> - * If the packet is fragmented, then the flow which saves the > >> - * original destination IP (and port) in the > >> "ls_in_pre_stateful" > >> - * stage will not be hit. > >> - */ > >> - if (lb_vip->address_family == AF_INET) { > >> - ip_match = "ip4"; > >> - ds_put_format(action, REG_ORIG_DIP_IPV4 " = %s; ", > >> - lb_vip->vip_str); > >> - } else { > >> - ip_match = "ip6"; > >> - ds_put_format(action, REG_ORIG_DIP_IPV6 " = %s; ", > >> - lb_vip->vip_str); > >> - } > >> - > >> - if (lb_vip->port_str) { > >> - /* Store the original destination port to be used when > >> generating > >> - * hairpin flows. > >> - */ > >> - ds_put_format(action, REG_ORIG_TP_DPORT " = %s; ", > >> - lb_vip->port_str); > >> - } > >> ds_clear(match); > >> /* New connections in Ingress table. */ > >> @@ -8489,13 +8425,13 @@ build_lb_hairpin(const struct > >> ls_stateful_record *ls_stateful_rec, > >> * */ > >> ovn_lflow_add(lflows, od, S_SWITCH_IN_LB, 110, > >> "ct.trk && !ct.rpl && "REGBIT_IP_FRAG" == 1 && > >> ip4", > >> - REG_ORIG_DIP_IPV4 " = ct_nw_dst(); " > >> - REG_ORIG_TP_DPORT " = ct_tp_dst(); next;", > >> + REG_LB_IPV4 " = ct_nw_dst(); " > >> + REG_LB_PORT " = ct_tp_dst(); next;", > >> lflow_ref); > >> ovn_lflow_add(lflows, od, S_SWITCH_IN_LB, 110, > >> "ct.trk && !ct.rpl && "REGBIT_IP_FRAG" == 1 && > >> ip6", > >> - REG_ORIG_DIP_IPV6 " = ct_ip6_dst(); " > >> - REG_ORIG_TP_DPORT " = ct_tp_dst(); next;", > >> + REG_LB_IPV6 " = ct_ip6_dst(); " > >> + REG_LB_PORT " = ct_tp_dst(); next;", > >> lflow_ref); > >> /* Set REGBIT_HAIRPIN in the original direction and > >> diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at > >> index edfd5764b..2b1791de0 100644 > >> --- a/tests/ovn-northd.at > >> +++ b/tests/ovn-northd.at > >> @@ -1425,7 +1425,7 @@ check ovn-nbctl --wait=sb ls-lb-add sw0 lb1 > >> AT_CAPTURE_FILE([sbflows]) > >> OVS_WAIT_FOR_OUTPUT( > >> [ovn-sbctl dump-flows sw0 | tee sbflows | grep > >> 'priority=120.*backends' | ovn_strip_lflows], 0, [dnl > >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > >> ]) > >> # disabled LSPs should not be a backend of Load Balancer > >> @@ -1434,7 +1434,7 @@ check ovn-nbctl lsp-set-enabled sw0-p1 disabled > >> AT_CAPTURE_FILE([sbflows]) > >> OVS_WAIT_FOR_OUTPUT( > >> [ovn-sbctl dump-flows sw0 | tee sbflows | grep > >> 'priority=120.*backends' | ovn_strip_lflows], 0, [dnl > >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=20.0.0.3:80);) > >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=20.0.0.3:80);) > >> ]) > >> wait_row_count Service_Monitor 1 > >> @@ -1443,7 +1443,7 @@ check ovn-nbctl lsp-set-enabled sw0-p1 enabled > >> AT_CAPTURE_FILE([sbflows]) > >> OVS_WAIT_FOR_OUTPUT( > >> [ovn-sbctl dump-flows sw0 | tee sbflows | grep > >> 'priority=120.*backends' | ovn_strip_lflows], 0, [dnl > >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > >> ]) > >> wait_row_count Service_Monitor 2 > >> @@ -1454,7 +1454,7 @@ wait_row_count Service_Monitor 0 > >> AT_CAPTURE_FILE([sbflows2]) > >> OVS_WAIT_FOR_OUTPUT( > >> [ovn-sbctl dump-flows sw0 | tee sbflows2 | grep > >> 'priority=120.*backends' | ovn_strip_lflows], [0], > >> -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > >> +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > >> ]) > >> AS_BOX([Create the Load_Balancer_Health_Check again.]) > >> @@ -1466,7 +1466,7 @@ check ovn-nbctl --wait=sb sync > >> ovn-sbctl dump-flows sw0 | grep backends | grep priority=120 > > >> lflows.txt > >> AT_CHECK([cat lflows.txt | ovn_strip_lflows], [0], [dnl > >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > >> ]) > >> AS_BOX([Get the uuid of both the service_monitor]) > >> @@ -1476,7 +1476,7 @@ sm_sw1_p1=$(fetch_column Service_Monitor _uuid > >> logical_port=sw1-p1) > >> AT_CAPTURE_FILE([sbflows3]) > >> OVS_WAIT_FOR_OUTPUT( > >> [ovn-sbctl dump-flows sw0 | tee sbflows 3 | grep > >> 'priority=120.*backends' | ovn_strip_lflows], [0], > >> -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > >> +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > >> ]) > >> AS_BOX([Set the service monitor for sw1-p1 to offline]) > >> @@ -1487,7 +1487,7 @@ check ovn-nbctl --wait=sb sync > >> AT_CAPTURE_FILE([sbflows4]) > >> OVS_WAIT_FOR_OUTPUT( > >> [ovn-sbctl dump-flows sw0 | tee sbflows4 | grep > >> 'priority=120.*backends' | ovn_strip_lflows], [0], > >> -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) > >> +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) > >> ]) > >> AS_BOX([Set the service monitor for sw0-p1 to offline]) > >> @@ -1516,7 +1516,7 @@ check ovn-nbctl --wait=sb sync > >> AT_CAPTURE_FILE([sbflows7]) > >> OVS_WAIT_FOR_OUTPUT( > >> [ovn-sbctl dump-flows sw0 | tee sbflows7 | grep backends | grep > >> priority=120 | ovn_strip_lflows], 0, > >> -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > >> +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > >> ]) > >> AS_BOX([Set the service monitor for sw1-p1 to error]) > >> @@ -1527,7 +1527,7 @@ check ovn-nbctl --wait=sb sync > >> ovn-sbctl dump-flows sw0 | grep "ip4.dst == 10.0.0.10 && tcp.dst == > >> 80" \ > >> | grep priority=120 > lflows.txt > >> AT_CHECK([cat lflows.txt | grep ls_in_lb | ovn_strip_lflows], [0], > [dnl > >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) > >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) > >> ]) > >> AS_BOX([Add one more vip to lb1]) > >> @@ -1553,8 +1553,8 @@ AT_CAPTURE_FILE([sbflows9]) > >> OVS_WAIT_FOR_OUTPUT( > >> [ovn-sbctl dump-flows sw0 | tee sbflows9 | grep backends | grep > >> priority=120 | ovn_strip_lflows], > >> 0, > >> -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) > >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg1 = 10.0.0.40; > >> reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000);) > >> +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) > >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg4 = 10.0.0.40; > >> reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000);) > >> ]) > >> AS_BOX([Set the service monitor for sw1-p1 to online]) > >> @@ -1567,8 +1567,8 @@ AT_CAPTURE_FILE([sbflows10]) > >> OVS_WAIT_FOR_OUTPUT( > >> [ovn-sbctl dump-flows sw0 | tee sbflows10 | grep backends | grep > >> priority=120 | ovn_strip_lflows], > >> 0, > >> -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg1 = 10.0.0.40; > >> reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000,20.0.0.3:80);) > >> +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg4 = 10.0.0.40; > >> reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000,20.0.0.3:80);) > >> ]) > >> AS_BOX([Associate lb1 to sw1]) > >> @@ -1577,8 +1577,8 @@ AT_CAPTURE_FILE([sbflows11]) > >> OVS_WAIT_FOR_OUTPUT( > >> [ovn-sbctl dump-flows sw1 | tee sbflows11 | grep backends | grep > >> priority=120 | ovn_strip_lflows], > >> 0, [dnl > >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg1 = 10.0.0.40; > >> reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000,20.0.0.3:80);) > >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) > >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg4 = 10.0.0.40; > >> reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000,20.0.0.3:80);) > >> ]) > >> AS_BOX([Now create lb2 same as lb1 but udp protocol.]) > >> @@ -4666,16 +4666,16 @@ check_stateful_flows() { > >> table=??(ls_in_pre_stateful ), priority=100 , match=(reg0[[0]] == > >> 1), action=(ct_next;) > >> table=??(ls_in_pre_stateful ), priority=110 , match=(reg0[[2]] == > >> 1), action=(ct_lb_mark;) > >> table=??(ls_in_pre_stateful ), priority=115 , match=(reg0[[2]] == > >> 1 && ip.is_frag), action=(reg0[[19]] = 1; ct_lb_mark;) > >> - table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == > >> 1 && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark;) > >> - table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == > >> 1 && ip4.dst == 10.0.0.20 && tcp.dst == 80), action=(reg1 = 10.0.0.20; > >> reg2[[0..15]] = 80; ct_lb_mark;) > >> + table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == > >> 1 && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark;) > >> + table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == > >> 1 && ip4.dst == 10.0.0.20 && tcp.dst == 80), action=(reg4 = 10.0.0.20; > >> reg2[[0..15]] = 80; ct_lb_mark;) > >> ]) > >> AT_CHECK([grep "ls_in_lb " sw0flows | ovn_strip_lflows], [0], [dnl > >> table=??(ls_in_lb ), priority=0 , match=(1), > >> action=(next;) > >> - table=??(ls_in_lb ), priority=110 , match=(ct.trk && > >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); > >> reg2[[0..15]] = ct_tp_dst(); next;) > >> + table=??(ls_in_lb ), priority=110 , match=(ct.trk && > >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); > >> reg2[[0..15]] = ct_tp_dst(); next;) > >> table=??(ls_in_lb ), priority=110 , match=(ct.trk && > >> !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); > >> reg2[[0..15]] = ct_tp_dst(); next;) > >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.4:8080);) > >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.20 && tcp.dst == 80), action=(reg1 = 10.0.0.20; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.40:8080);) > >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.4:8080);) > >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.20 && tcp.dst == 80), action=(reg4 = 10.0.0.20; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.40:8080);) > >> ]) > >> AT_CHECK([grep "ls_in_stateful" sw0flows | ovn_strip_lflows], > >> [0], [dnl > >> @@ -4780,7 +4780,7 @@ check ovn-nbctl --wait=sb ls-lb-add sw0 lb1 > >> AT_CHECK([ovn-sbctl dump-flows sw0 | grep "ls_in_lb " | > >> ovn_strip_lflows ], [0], [dnl > >> table=??(ls_in_lb ), priority=0 , match=(1), > >> action=(next;) > >> table=??(ls_in_lb ), priority=110 , match=(ct.new && > >> ip4.dst == 10.0.0.20), action=(drop;) > >> - table=??(ls_in_lb ), priority=110 , match=(ct.trk && > >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); > >> reg2[[0..15]] = ct_tp_dst(); next;) > >> + table=??(ls_in_lb ), priority=110 , match=(ct.trk && > >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); > >> reg2[[0..15]] = ct_tp_dst(); next;) > >> table=??(ls_in_lb ), priority=110 , match=(ct.trk && > >> !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); > >> reg2[[0..15]] = ct_tp_dst(); next;) > >> ]) > >> @@ -7842,8 +7842,8 @@ AT_CHECK([grep -e "ls_in_acl.*eval" -e > >> "ls_in_acl_hint" lsflows | ovn_strip_lflo > >> AT_CHECK([grep -e "ls_in_lb " lsflows | ovn_strip_lflows], [0], [dnl > >> table=??(ls_in_lb ), priority=0 , match=(1), > >> action=(next;) > >> - table=??(ls_in_lb ), priority=110 , match=(ct.new && > >> ip4.dst == 10.0.0.2), action=(reg1 = 10.0.0.2; > >> ct_lb_mark(backends=10.0.0.10);) > >> - table=??(ls_in_lb ), priority=110 , match=(ct.trk && > >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); > >> reg2[[0..15]] = ct_tp_dst(); next;) > >> + table=??(ls_in_lb ), priority=110 , match=(ct.new && > >> ip4.dst == 10.0.0.2), action=(reg4 = 10.0.0.2; > >> ct_lb_mark(backends=10.0.0.10);) > >> + table=??(ls_in_lb ), priority=110 , match=(ct.trk && > >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); > >> reg2[[0..15]] = ct_tp_dst(); next;) > >> table=??(ls_in_lb ), priority=110 , match=(ct.trk && > >> !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); > >> reg2[[0..15]] = ct_tp_dst(); next;) > >> ]) > >> @@ -7899,8 +7899,8 @@ AT_CHECK([grep -e "ls_in_acl.*eval" -e > >> "ls_in_acl_hint" lsflows | ovn_strip_lflo > >> AT_CHECK([grep -e "ls_in_lb " lsflows | ovn_strip_lflows], [0], [dnl > >> table=??(ls_in_lb ), priority=0 , match=(1), > >> action=(next;) > >> - table=??(ls_in_lb ), priority=110 , match=(ct.new && > >> ip4.dst == 10.0.0.2), action=(reg1 = 10.0.0.2; > >> ct_lb_mark(backends=10.0.0.10);) > >> - table=??(ls_in_lb ), priority=110 , match=(ct.trk && > >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); > >> reg2[[0..15]] = ct_tp_dst(); next;) > >> + table=??(ls_in_lb ), priority=110 , match=(ct.new && > >> ip4.dst == 10.0.0.2), action=(reg4 = 10.0.0.2; > >> ct_lb_mark(backends=10.0.0.10);) > >> + table=??(ls_in_lb ), priority=110 , match=(ct.trk && > >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); > >> reg2[[0..15]] = ct_tp_dst(); next;) > >> table=??(ls_in_lb ), priority=110 , match=(ct.trk && > >> !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); > >> reg2[[0..15]] = ct_tp_dst(); next;) > >> ]) > >> @@ -7956,8 +7956,8 @@ AT_CHECK([grep -e "ls_in_acl.*eval" -e > >> "ls_in_acl_hint" lsflows | ovn_strip_lflo > >> AT_CHECK([grep -e "ls_in_lb " lsflows | ovn_strip_lflows], [0], [dnl > >> table=??(ls_in_lb ), priority=0 , match=(1), > >> action=(next;) > >> - table=??(ls_in_lb ), priority=110 , match=(ct.new && > >> ip4.dst == 10.0.0.2), action=(reg1 = 10.0.0.2; > >> ct_lb_mark(backends=10.0.0.10);) > >> - table=??(ls_in_lb ), priority=110 , match=(ct.trk && > >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); > >> reg2[[0..15]] = ct_tp_dst(); next;) > >> + table=??(ls_in_lb ), priority=110 , match=(ct.new && > >> ip4.dst == 10.0.0.2), action=(reg4 = 10.0.0.2; > >> ct_lb_mark(backends=10.0.0.10);) > >> + table=??(ls_in_lb ), priority=110 , match=(ct.trk && > >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); > >> reg2[[0..15]] = ct_tp_dst(); next;) > >> table=??(ls_in_lb ), priority=110 , match=(ct.trk && > >> !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); > >> reg2[[0..15]] = ct_tp_dst(); next;) > >> ]) > >> @@ -9345,13 +9345,13 @@ AT_CAPTURE_FILE([S1flows]) > >> AT_CHECK([grep "ls_in_lb " S0flows | ovn_strip_lflows], [0], [dnl > >> table=??(ls_in_lb ), priority=0 , match=(1), > >> action=(next;) > >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg1 = 172.16.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80);) > >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 172.16.0.11 && tcp.dst == 8080), action=(reg1 = > >> 172.16.0.11; reg2[[0..15]] = 8080; ct_lb_mark(backends=10.0.0.2:8080);) > >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg4 = 172.16.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80);) > >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 172.16.0.11 && tcp.dst == 8080), action=(reg4 = > >> 172.16.0.11; reg2[[0..15]] = 8080; ct_lb_mark(backends=10.0.0.2:8080);) > >> ]) > >> AT_CHECK([grep "ls_in_lb " S1flows | ovn_strip_lflows], [0], [dnl > >> table=??(ls_in_lb ), priority=0 , match=(1), > >> action=(next;) > >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg1 = 172.16.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80);) > >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 172.16.0.11 && tcp.dst == 8080), action=(reg1 = > >> 172.16.0.11; reg2[[0..15]] = 8080; ct_lb_mark(backends=10.0.0.2:8080);) > >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg4 = 172.16.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80);) > >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 172.16.0.11 && tcp.dst == 8080), action=(reg4 = > >> 172.16.0.11; reg2[[0..15]] = 8080; ct_lb_mark(backends=10.0.0.2:8080);) > >> ]) > >> ovn-sbctl get datapath S0 _uuid > dp_uuids > >> @@ -9477,20 +9477,20 @@ AT_CAPTURE_FILE([S0flows]) > >> AT_CHECK([grep "ls_in_lb_aff_check" S0flows | ovn_strip_lflows], > >> [0], [dnl > >> table=??(ls_in_lb_aff_check ), priority=0 , match=(1), > >> action=(next;) > >> - table=??(ls_in_lb_aff_check ), priority=100 , match=(ct.new && ip4 > >> && reg1 == 172.16.0.10 && reg2[[0..15]] == 80), action=(reg9[[6]] = > >> chk_lb_aff(); next;) > >> + table=??(ls_in_lb_aff_check ), priority=100 , match=(ct.new && ip4 > >> && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(reg9[[6]] > >> = chk_lb_aff(); next;) > >> ]) > >> AT_CHECK([grep "ls_in_lb " S0flows | ovn_strip_lflows], [0], [dnl > >> table=??(ls_in_lb ), priority=0 , match=(1), > >> action=(next;) > >> - table=??(ls_in_lb ), priority=110 , match=(ct.trk && > >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); > >> reg2[[0..15]] = ct_tp_dst(); next;) > >> + table=??(ls_in_lb ), priority=110 , match=(ct.trk && > >> !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); > >> reg2[[0..15]] = ct_tp_dst(); next;) > >> table=??(ls_in_lb ), priority=110 , match=(ct.trk && > >> !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); > >> reg2[[0..15]] = ct_tp_dst(); next;) > >> - table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg1 = 172.16.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80);) > >> - table=??(ls_in_lb ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && > >> reg8[[0..15]] == 80), action=(reg1 = 172.16.0.10; reg2[[0..15]] = 80; > >> ct_lb_mark(backends=10.0.0.2:80);) > >> - table=??(ls_in_lb ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && > >> reg8[[0..15]] == 80), action=(reg1 = 172.16.0.10; reg2[[0..15]] = 80; > >> ct_lb_mark(backends=20.0.0.2:80);) > >> + table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg4 = 172.16.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80);) > >> + table=??(ls_in_lb ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && > >> reg2[[0..15]] == 80), action=(reg4 = 172.16.0.10; reg2[[0..15]] = 80; > >> ct_lb_mark(backends=10.0.0.2:80);) > >> + table=??(ls_in_lb ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && > >> reg2[[0..15]] == 80), action=(reg4 = 172.16.0.10; reg2[[0..15]] = 80; > >> ct_lb_mark(backends=20.0.0.2:80);) > >> ]) > >> AT_CHECK([grep "ls_in_lb_aff_learn" S0flows | ovn_strip_lflows], > >> [0], [dnl > >> table=??(ls_in_lb_aff_learn ), priority=0 , match=(1), > >> action=(next;) > >> - table=??(ls_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == > >> 0 && ct.new && ip4 && reg1 == 172.16.0.10 && reg2[[0..15]] == 80 && > >> ip4.dst == 10.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = > >> "172.16.0.10:80", backend = "10.0.0.2:80", proto = tcp, timeout = 60); > >> /* drop */) > >> - table=??(ls_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == > >> 0 && ct.new && ip4 && reg1 == 172.16.0.10 && reg2[[0..15]] == 80 && > >> ip4.dst == 20.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = > >> "172.16.0.10:80", backend = "20.0.0.2:80", proto = tcp, timeout = 60); > >> /* drop */) > >> + table=??(ls_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == > >> 0 && ct.new && ip4 && reg4 == 172.16.0.10 && reg2[[0..15]] == 80 && > >> ip4.dst == 10.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = > >> "172.16.0.10:80", backend = "10.0.0.2:80", proto = tcp, timeout = 60); > >> /* drop */) > >> + table=??(ls_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == > >> 0 && ct.new && ip4 && reg4 == 172.16.0.10 && reg2[[0..15]] == 80 && > >> ip4.dst == 20.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = > >> "172.16.0.10:80", backend = "20.0.0.2:80", proto = tcp, timeout = 60); > >> /* drop */) > >> ]) > >> AS_BOX([Test LR flows]) > >> @@ -9499,13 +9499,13 @@ AT_CAPTURE_FILE([R1flows]) > >> AT_CHECK([grep "lr_in_lb_aff_check" R1flows | ovn_strip_lflows], > >> [0], [dnl > >> table=??(lr_in_lb_aff_check ), priority=0 , match=(1), > >> action=(next;) > >> - table=??(lr_in_lb_aff_check ), priority=100 , match=(ct.new && > >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), > >> action=(reg0 = ip4.dst; reg9[[16..31]] = tcp.dst; reg9[[6]] = > >> chk_lb_aff(); next;) > >> + table=??(lr_in_lb_aff_check ), priority=100 , match=(ct.new && > >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), > >> action=(reg9[[6]] = chk_lb_aff(); next;) > >> ]) > >> AT_CHECK([grep "lr_in_dnat " R1flows | ovn_strip_lflows], [0], [dnl > >> table=??(lr_in_dnat ), priority=0 , match=(1), > >> action=(next;) > >> - table=??(lr_in_dnat ), priority=120 , match=(ct.new && > >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), > >> action=(ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80);) > >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && > >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; > >> ct_lb_mark(backends=10.0.0.2:80);) > >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && > >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; > >> ct_lb_mark(backends=20.0.0.2:80);) > >> + table=??(lr_in_dnat ), priority=120 , match=(ct.new && > >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), > >> action=(reg4 = 172.16.0.10; reg2[[0..15]] = 80; > >> ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80);) > >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && > >> reg2[[0..15]] == 80), action=(ct_lb_mark(backends=10.0.0.2:80);) > >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && > >> reg2[[0..15]] == 80), action=(ct_lb_mark(backends=20.0.0.2:80);) > >> table=??(lr_in_dnat ), priority=50 , match=(ct.est && > >> !ct.rel && !ct.new && !ct.rpl && ct_mark.natted), action=(next;) > >> table=??(lr_in_dnat ), priority=50 , match=(ct.rel && > >> !ct.est && !ct.new && !ct.rpl), action=(ct_commit_nat;) > >> table=??(lr_in_dnat ), priority=70 , match=(ct.est && > >> !ct.rel && !ct.new && !ct.rpl && ct_mark.natted && ct_mark.force_snat > >> == 1), action=(flags.force_snat_for_lb = 1; next;) > >> @@ -9515,8 +9515,8 @@ AT_CHECK([grep "lr_in_dnat " R1flows | > >> ovn_strip_lflows], [0], [dnl > >> ]) > >> AT_CHECK([grep "lr_in_lb_aff_learn" R1flows | ovn_strip_lflows], > >> [0], [dnl > >> table=??(lr_in_lb_aff_learn ), priority=0 , match=(1), > >> action=(next;) > >> - table=??(lr_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == > >> 0 && ct.new && ip4 && reg0 == 172.16.0.10 && reg9[[16..31]] == 80 && > >> ip4.dst == 10.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = > >> "172.16.0.10:80", backend = "10.0.0.2:80", proto = tcp, timeout = 60); > >> /* drop */) > >> - table=??(lr_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == > >> 0 && ct.new && ip4 && reg0 == 172.16.0.10 && reg9[[16..31]] == 80 && > >> ip4.dst == 20.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = > >> "172.16.0.10:80", backend = "20.0.0.2:80", proto = tcp, timeout = 60); > >> /* drop */) > >> + table=??(lr_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == > >> 0 && ct.new && ip4 && reg4 == 172.16.0.10 && reg2[[0..15]] == 80 && > >> ip4.dst == 10.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = > >> "172.16.0.10:80", backend = "10.0.0.2:80", proto = tcp, timeout = 60); > >> /* drop */) > >> + table=??(lr_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == > >> 0 && ct.new && ip4 && reg4 == 172.16.0.10 && reg2[[0..15]] == 80 && > >> ip4.dst == 20.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = > >> "172.16.0.10:80", backend = "20.0.0.2:80", proto = tcp, timeout = 60); > >> /* drop */) > >> ]) > >> AS_BOX([Test LR flows - skip_snat=true]) > >> @@ -9527,9 +9527,9 @@ AT_CAPTURE_FILE([R1flows_skip_snat]) > >> AT_CHECK([grep "lr_in_dnat " R1flows_skip_snat | ovn_strip_lflows], > >> [0], [dnl > >> table=??(lr_in_dnat ), priority=0 , match=(1), > >> action=(next;) > >> - table=??(lr_in_dnat ), priority=120 , match=(ct.new && > >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), > >> action=(flags.skip_snat_for_lb = 1; > >> ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) > >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && > >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; > >> flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; > skip_snat);) > >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && > >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; > >> flags.skip_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; > skip_snat);) > >> + table=??(lr_in_dnat ), priority=120 , match=(ct.new && > >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), > >> action=(flags.skip_snat_for_lb = 1; reg4 = 172.16.0.10; reg2[[0..15]] > >> = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) > >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && > >> reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; > >> ct_lb_mark(backends=10.0.0.2:80; skip_snat);) > >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && > >> reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; > >> ct_lb_mark(backends=20.0.0.2:80; skip_snat);) > >> table=??(lr_in_dnat ), priority=50 , match=(ct.est && > >> !ct.rel && !ct.new && !ct.rpl && ct_mark.natted), action=(next;) > >> table=??(lr_in_dnat ), priority=50 , match=(ct.rel && > >> !ct.est && !ct.new && !ct.rpl), action=(ct_commit_nat;) > >> table=??(lr_in_dnat ), priority=70 , match=(ct.est && > >> !ct.rel && !ct.new && !ct.rpl && ct_mark.natted && ct_mark.force_snat > >> == 1), action=(flags.force_snat_for_lb = 1; next;) > >> @@ -9548,9 +9548,9 @@ AT_CAPTURE_FILE([R1flows_force_snat]) > >> AT_CHECK([grep "lr_in_dnat " R1flows_force_snat | ovn_strip_lflows], > >> [0], [dnl > >> table=??(lr_in_dnat ), priority=0 , match=(1), > >> action=(next;) > >> - table=??(lr_in_dnat ), priority=120 , match=(ct.new && > >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), > >> action=(flags.force_snat_for_lb = 1; > >> ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; force_snat);) > >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && > >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; > >> flags.force_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; > >> force_snat);) > >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && > >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; > >> flags.force_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; > >> force_snat);) > >> + table=??(lr_in_dnat ), priority=120 , match=(ct.new && > >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), > >> action=(flags.force_snat_for_lb = 1; reg4 = 172.16.0.10; reg2[[0..15]] > >> = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; force_snat);) > >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && > >> reg2[[0..15]] == 80), action=(flags.force_snat_for_lb = 1; > >> ct_lb_mark(backends=10.0.0.2:80; force_snat);) > >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && > >> reg2[[0..15]] == 80), action=(flags.force_snat_for_lb = 1; > >> ct_lb_mark(backends=20.0.0.2:80; force_snat);) > >> table=??(lr_in_dnat ), priority=50 , match=(ct.est && > >> !ct.rel && !ct.new && !ct.rpl && ct_mark.natted), action=(next;) > >> table=??(lr_in_dnat ), priority=50 , match=(ct.rel && > >> !ct.est && !ct.new && !ct.rpl), action=(ct_commit_nat;) > >> table=??(lr_in_dnat ), priority=70 , match=(ct.est && > >> !ct.rel && !ct.new && !ct.rpl && ct_mark.natted && ct_mark.force_snat > >> == 1), action=(flags.force_snat_for_lb = 1; next;) > >> @@ -9568,9 +9568,9 @@ AT_CAPTURE_FILE([R1flows_force_skip_snat]) > >> AT_CHECK([grep "lr_in_dnat " R1flows_force_skip_snat | > >> ovn_strip_lflows], [0], [dnl > >> table=??(lr_in_dnat ), priority=0 , match=(1), > >> action=(next;) > >> - table=??(lr_in_dnat ), priority=120 , match=(ct.new && > >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), > >> action=(flags.skip_snat_for_lb = 1; > >> ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) > >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && > >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; > >> flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; > skip_snat);) > >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && > >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; > >> flags.skip_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; > skip_snat);) > >> + table=??(lr_in_dnat ), priority=120 , match=(ct.new && > >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), > >> action=(flags.skip_snat_for_lb = 1; reg4 = 172.16.0.10; reg2[[0..15]] > >> = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) > >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && > >> reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; > >> ct_lb_mark(backends=10.0.0.2:80; skip_snat);) > >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && > >> reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; > >> ct_lb_mark(backends=20.0.0.2:80; skip_snat);) > >> table=??(lr_in_dnat ), priority=50 , match=(ct.est && > >> !ct.rel && !ct.new && !ct.rpl && ct_mark.natted), action=(next;) > >> table=??(lr_in_dnat ), priority=50 , match=(ct.rel && > >> !ct.est && !ct.new && !ct.rpl), action=(ct_commit_nat;) > >> table=??(lr_in_dnat ), priority=70 , match=(ct.est && > >> !ct.rel && !ct.new && !ct.rpl && ct_mark.natted && ct_mark.force_snat > >> == 1), action=(flags.force_snat_for_lb = 1; next;) > >> @@ -9592,12 +9592,12 @@ AT_CAPTURE_FILE([R1flows_2lbs]) > >> AT_CHECK([grep "lr_in_dnat " R1flows_2lbs | ovn_strip_lflows], [0], > >> [dnl > >> table=??(lr_in_dnat ), priority=0 , match=(1), > >> action=(next;) > >> - table=??(lr_in_dnat ), priority=120 , match=(ct.new && > >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), > >> action=(flags.skip_snat_for_lb = 1; > >> ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) > >> - table=??(lr_in_dnat ), priority=120 , match=(ct.new && > >> !ct.rel && ip4 && ip4.dst == 172.16.0.20 && tcp && tcp.dst == 80), > >> action=(flags.force_snat_for_lb = 1; > >> ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; force_snat);) > >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && > >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; > >> flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; > skip_snat);) > >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && > >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; > >> flags.skip_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; > skip_snat);) > >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.20 && reg4 == 10.0.0.2 && > >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.20; > >> flags.force_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; > >> force_snat);) > >> - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.20 && reg4 == 20.0.0.2 && > >> reg8[[0..15]] == 80), action=(reg0 = 172.16.0.20; > >> flags.force_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; > >> force_snat);) > >> + table=??(lr_in_dnat ), priority=120 , match=(ct.new && > >> !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), > >> action=(flags.skip_snat_for_lb = 1; reg4 = 172.16.0.10; reg2[[0..15]] > >> = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) > >> + table=??(lr_in_dnat ), priority=120 , match=(ct.new && > >> !ct.rel && ip4 && ip4.dst == 172.16.0.20 && tcp && tcp.dst == 80), > >> action=(flags.force_snat_for_lb = 1; reg4 = 172.16.0.20; reg2[[0..15]] > >> = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; force_snat);) > >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && > >> reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; > >> ct_lb_mark(backends=10.0.0.2:80; skip_snat);) > >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && > >> reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; > >> ct_lb_mark(backends=20.0.0.2:80; skip_snat);) > >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.20 && reg4 == 10.0.0.2 && > >> reg2[[0..15]] == 80), action=(flags.force_snat_for_lb = 1; > >> ct_lb_mark(backends=10.0.0.2:80; force_snat);) > >> + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == > >> 1 && ct.new && ip4.dst == 172.16.0.20 && reg4 == 20.0.0.2 && > >> reg2[[0..15]] == 80), action=(flags.force_snat_for_lb = 1; > >> ct_lb_mark(backends=20.0.0.2:80; force_snat);) > >> table=??(lr_in_dnat ), priority=50 , match=(ct.est && > >> !ct.rel && !ct.new && !ct.rpl && ct_mark.natted), action=(next;) > >> table=??(lr_in_dnat ), priority=50 , match=(ct.rel && > >> !ct.est && !ct.new && !ct.rpl), action=(ct_commit_nat;) > >> table=??(lr_in_dnat ), priority=70 , match=(ct.est && > >> !ct.rel && !ct.new && !ct.rpl && ct_mark.natted && ct_mark.force_snat > >> == 1), action=(flags.force_snat_for_lb = 1; next;) > >> @@ -14058,10 +14058,10 @@ ovn-sbctl dump-flows s1 > s1flows > >> AT_CAPTURE_FILE([s1flows]) > >> AT_CHECK([grep "ls_in_pre_stateful" s1flows | ovn_strip_lflows | > >> grep "30.0.0.1"], [0], [dnl > >> - table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == > >> 1 && ip4.dst == 30.0.0.1), action=(reg1 = 30.0.0.1; ct_lb_mark;) > >> + table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == > >> 1 && ip4.dst == 30.0.0.1), action=(reg4 = 30.0.0.1; ct_lb_mark;) > >> ]) > >> AT_CHECK([grep "ls_in_lb" s1flows | ovn_strip_lflows | grep > >> "30.0.0.1"], [0], [dnl > >> - table=??(ls_in_lb ), priority=110 , match=(ct.new && > >> ip4.dst == 30.0.0.1), action=(reg1 = 30.0.0.1; > >> ct_lb_mark(backends=172.16.0.103,172.16.0.102,172.16.0.101);) > >> + table=??(ls_in_lb ), priority=110 , match=(ct.new && > >> ip4.dst == 30.0.0.1), action=(reg4 = 30.0.0.1; > >> ct_lb_mark(backends=172.16.0.103,172.16.0.102,172.16.0.101);) > >> ]) > >> # Associate load balancer to lr1 with DGP > >> @@ -14283,10 +14283,10 @@ ovn-sbctl dump-flows s1 > s1flows > >> AT_CAPTURE_FILE([s1flows]) > >> AT_CHECK([grep "ls_in_pre_stateful" s1flows | ovn_strip_lflows | > >> grep "30.0.0.1"], [0], [dnl > >> - table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == > >> 1 && ip4.dst == 30.0.0.1), action=(reg1 = 30.0.0.1; ct_lb_mark;) > >> + table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == > >> 1 && ip4.dst == 30.0.0.1), action=(reg4 = 30.0.0.1; ct_lb_mark;) > >> ]) > >> AT_CHECK([grep "ls_in_lb" s1flows | ovn_strip_lflows | grep > >> "30.0.0.1"], [0], [dnl > >> - table=??(ls_in_lb ), priority=110 , match=(ct.new && > >> ip4.dst == 30.0.0.1), action=(reg1 = 30.0.0.1; > >> ct_lb_mark(backends=172.16.0.103,172.16.0.102,172.16.0.101);) > >> + table=??(ls_in_lb ), priority=110 , match=(ct.new && > >> ip4.dst == 30.0.0.1), action=(reg4 = 30.0.0.1; > >> ct_lb_mark(backends=172.16.0.103,172.16.0.102,172.16.0.101);) > >> ]) > >> # Associate load balancer to lr1 with DGP > >> diff --git a/tests/ovn.at b/tests/ovn.at > >> index b49a63f3e..e9144b0cd 100644 > >> --- a/tests/ovn.at > >> +++ b/tests/ovn.at > >> @@ -2161,13 +2161,13 @@ reg9[[5]] = chk_ecmp_nh(); > >> # commit_lb_aff > >> commit_lb_aff(vip = "172.16.0.123:8080", backend = "10.0.0.3:8080", > >> proto = tcp, timeout = 30); > >> - encodes as > >> > learn(table=OFTABLE_CHK_LB_AFFINITY,idle_timeout=30,delete_learned,cookie=0xaaaaaaaa,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=172.16.0.123,nw_proto=6,tcp_dst=8080,load:0x1->NXM_NX_REG10[[14]],load:0xa000003->NXM_NX_REG4[[]],load:0x1f90->NXM_NX_REG8[[0..15]]) > >> + encodes as > >> > learn(table=OFTABLE_CHK_LB_AFFINITY,idle_timeout=30,delete_learned,cookie=0xaaaaaaaa,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=172.16.0.123,nw_proto=6,tcp_dst=8080,load:0x1->NXM_NX_REG10[[14]],load:0xa000003->NXM_NX_REG4[[]],load:0x1f90->NXM_NX_REG2[[0..15]]) > >> commit_lb_aff(vip = "172.16.0.123", backend = "10.0.0.3", timeout = > >> 30); > >> encodes as > >> > learn(table=OFTABLE_CHK_LB_AFFINITY,idle_timeout=30,delete_learned,cookie=0xaaaaaaaa,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=172.16.0.123,load:0x1->NXM_NX_REG10[[14]],load:0xa000003->NXM_NX_REG4[[]]) > >> commit_lb_aff(vip = "[[::1]]:8080", backend = "[[::2]]:8080", proto > >> = tcp, timeout = 30); > >> - encodes as > >> > learn(table=OFTABLE_CHK_LB_AFFINITY,idle_timeout=30,delete_learned,cookie=0xaaaaaaaa,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=::1,nw_proto=6,tcp_dst=8080,load:0x1->NXM_NX_REG10[[14]],load:0x2->NXM_NX_XXREG0[[]],load:0x1f90->NXM_NX_REG8[[0..15]]) > >> + encodes as > >> > learn(table=OFTABLE_CHK_LB_AFFINITY,idle_timeout=30,delete_learned,cookie=0xaaaaaaaa,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=::1,nw_proto=6,tcp_dst=8080,load:0x1->NXM_NX_REG10[[14]],load:0x2->NXM_NX_XXREG1[[]],load:0x1f90->NXM_NX_REG2[[0..15]]) > >> # chk_lb_aff() > >> reg9[[6]] = chk_lb_aff(); > >> @@ -25576,8 +25576,8 @@ OVS_WAIT_FOR_OUTPUT( > >> [ovn-sbctl dump-flows > sbflows > >> ovn-sbctl dump-flows sw0 | grep ct_lb_mark | grep priority=120 | > >> sed 's/table=..//'], 0, > >> [dnl > >> - (ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark;) > >> - (ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == > >> 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = > >> 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80; > >> hash_fields="ip_dst,ip_src,tcp_dst,tcp_src");) > >> + (ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark;) > >> + (ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == > >> 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = > >> 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80; > >> hash_fields="ip_dst,ip_src,tcp_dst,tcp_src");) > >> ]) > >> AT_CAPTURE_FILE([sbflows2]) > >> @@ -25621,7 +25621,7 @@ AT_CHECK( > >> [grep "ip4.dst == 10.0.0.10 && tcp.dst == 80" sbflows3 | grep > >> priority=120 |\ > >> ovn_strip_lflows], [0], [dnl > >> table=??(ls_in_lb ), priority=120 , match=(ct.new && > >> ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(drop;) > >> - table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == > >> 1 && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark;) > >> + table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == > >> 1 && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; > >> reg2[[0..15]] = 80; ct_lb_mark;) > >> ]) > >> AT_CAPTURE_FILE([sbflows4]) > >> @@ -30627,7 +30627,7 @@ OVS_WAIT_UNTIL( > >> ) > >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > [dnl > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> ]) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY], [0], [dnl > >> @@ -30635,7 +30635,7 @@ NXST_FLOW reply (xid=0x8): > >> ]) > >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > >> [dnl > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> ]) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN | grep -v NXST], [1], [dnl > >> @@ -30654,9 +30654,9 @@ OVS_WAIT_UNTIL( > >> ) > >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > [dnl > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> ]) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY], [0], [dnl > >> @@ -30664,8 +30664,8 @@ NXST_FLOW reply (xid=0x8): > >> ]) > >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > >> [dnl > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> ]) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN | grep -v NXST], [1], [dnl > >> @@ -30687,17 +30687,17 @@ OVS_WAIT_UNTIL( > >> ) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > [dnl > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> ]) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY | grep -v NXST], [1], [dnl > >> ]) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > >> [dnl > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> ]) > >> check ovn-nbctl --wait=hv ls-lb-add sw0 lb-ipv4-udp > >> @@ -30711,35 +30711,35 @@ OVS_WAIT_UNTIL( > >> ) > >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > [dnl > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> ]) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY | grep -v NXST], [1], [dnl > >> ]) > >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > >> [dnl > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> ]) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > [dnl > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> ]) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY | grep -v NXST], [1], [dnl > >> ]) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > >> [dnl > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> ]) > >> check ovn-nbctl --wait=hv ls-lb-add sw0 lb-ipv6-tcp > >> @@ -30753,39 +30753,39 @@ OVS_WAIT_UNTIL( > >> ) > >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > [dnl > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> ]) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY | grep -v NXST], [1], [dnl > >> ]) > >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > >> [dnl > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> table=OFTABLE_CT_SNAT_HAIRPIN, > >> > priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 > actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> ]) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > [dnl > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> ]) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY | grep -v NXST], [1], [dnl > >> ]) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > >> [dnl > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> table=OFTABLE_CT_SNAT_HAIRPIN, > >> > priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 > actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> ]) > >> check ovn-nbctl --wait=hv ls-lb-add sw0 lb-ipv6-udp > >> @@ -30799,11 +30799,11 @@ OVS_WAIT_UNTIL( > >> ) > >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > [dnl > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> ]) > >> @@ -30811,19 +30811,19 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY > >> ]) > >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > >> [dnl > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> table=OFTABLE_CT_SNAT_HAIRPIN, > >> > priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 > actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> table=OFTABLE_CT_SNAT_HAIRPIN, > >> > priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 > actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > >> ]) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > [dnl > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> ]) > >> @@ -30831,10 +30831,10 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY > >> ]) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > >> [dnl > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> table=OFTABLE_CT_SNAT_HAIRPIN, > >> > priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 > actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> table=OFTABLE_CT_SNAT_HAIRPIN, > >> > priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 > actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > >> ]) > >> @@ -30851,11 +30851,11 @@ OVS_WAIT_UNTIL( > >> ) > >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > [dnl > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> ]) > >> @@ -30863,19 +30863,19 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY > >> ]) > >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > >> [dnl > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> table=OFTABLE_CT_SNAT_HAIRPIN, > >> > priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 > actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> table=OFTABLE_CT_SNAT_HAIRPIN, > >> > priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 > actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > >> ]) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > [dnl > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> ]) > >> @@ -30883,10 +30883,10 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY > >> ]) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > >> [dnl > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> table=OFTABLE_CT_SNAT_HAIRPIN, > >> > priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 > actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> table=OFTABLE_CT_SNAT_HAIRPIN, > >> > priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 > actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > >> ]) > >> @@ -30900,12 +30900,12 @@ OVS_WAIT_UNTIL( > >> ) > >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > [dnl > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,ip,reg1=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,ip,reg4=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> ]) > >> @@ -30913,21 +30913,21 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY > >> ]) > >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > >> [dnl > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> table=OFTABLE_CT_SNAT_HAIRPIN, > >> > priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 > actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> table=OFTABLE_CT_SNAT_HAIRPIN, > >> > priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 > actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg1=0x58585859 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg4=0x58585859 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) > >> ]) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > [dnl > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,ip,reg1=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,ip,reg4=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> ]) > >> @@ -30935,12 +30935,12 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY > >> ]) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > >> [dnl > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> table=OFTABLE_CT_SNAT_HAIRPIN, > >> > priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 > actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> table=OFTABLE_CT_SNAT_HAIRPIN, > >> > priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 > actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg1=0x58585859 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg4=0x58585859 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) > >> ]) > >> check ovn-nbctl --wait=hv ls-lb-add sw0 lb-ipv6 > >> @@ -30953,13 +30953,13 @@ OVS_WAIT_UNTIL( > >> ) > >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > [dnl > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,ip,reg1=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,ip,reg4=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) > >> table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,ipv6,reg4=0x88000000,reg5=0,reg6=0,reg7=0x89,ipv6_src=4200::2,ipv6_dst=4200::2 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> ]) > >> @@ -30967,23 +30967,23 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY > >> ]) > >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > >> [dnl > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> table=OFTABLE_CT_SNAT_HAIRPIN, > >> > priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 > actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> table=OFTABLE_CT_SNAT_HAIRPIN, > >> > priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 > actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg1=0x58585859 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg4=0x58585859 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) > >> table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=90,ipv6,reg4=0x88000000,reg5=0,reg6=0,reg7=0x89 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::89)) > >> ]) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > [dnl > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,ip,reg1=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,ip,reg4=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) > >> table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,ipv6,reg4=0x88000000,reg5=0,reg6=0,reg7=0x89,ipv6_src=4200::2,ipv6_dst=4200::2 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> ]) > >> @@ -30991,12 +30991,12 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN_REPLY > >> ]) > >> AT_CHECK([as hv2 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > >> [dnl > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) > >> table=OFTABLE_CT_SNAT_HAIRPIN, > >> > priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 > actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> table=OFTABLE_CT_SNAT_HAIRPIN, > >> > priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 > actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg1=0x58585859 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg4=0x58585859 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) > >> table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=90,ipv6,reg4=0x88000000,reg5=0,reg6=0,reg7=0x89 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::89)) > >> ]) > >> @@ -31093,7 +31093,7 @@ OVS_WAIT_UNTIL( > >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > [dnl > >> table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> ]) > >> @@ -31103,7 +31103,7 @@ NXST_FLOW reply (xid=0x8): > >> AT_CHECK([as hv1 ovs-ofctl dump-flows br-int > >> table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], > >> [dnl > >> table=OFTABLE_CT_SNAT_HAIRPIN, > >> > priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 > actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > >> - table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> + table=OFTABLE_CT_SNAT_HAIRPIN, > >> priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 > >> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) > >> table=OFTABLE_CT_SNAT_HAIRPIN, > >> > priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 > actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) > >> ]) > >> @@ -36078,15 +36078,15 @@ AT_CHECK([ovs-ofctl dump-groups br-int | > >> grep 'nat(dst=85.85.85.44:8504)' -c], [ > >> dnl Ensure hairpin flows are correct. > >> as hv1 > >> AT_CHECK([ovs-ofctl dump-flows br-int | grep > >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all], [0], [dnl > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b01,reg2=0x10cd/0xffff,nw_src=85.85.85.1,nw_dst=85.85.85.1,tp_dst=8501 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.1,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b02,reg2=0x10ce/0xffff,nw_src=85.85.85.21,nw_dst=85.85.85.21,tp_dst=8502 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b02,reg2=0x10ce/0xffff,nw_src=85.85.85.22,nw_dst=85.85.85.22,tp_dst=8502 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b03,reg2=0x10cf/0xffff,nw_src=85.85.85.31,nw_dst=85.85.85.31,tp_dst=8503 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b03,reg2=0x10cf/0xffff,nw_src=85.85.85.32,nw_dst=85.85.85.32,tp_dst=8503 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b04,reg2=0x10d0/0xffff,nw_src=85.85.85.41,nw_dst=85.85.85.41,tp_dst=8504 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b04,reg2=0x10d0/0xffff,nw_src=85.85.85.42,nw_dst=85.85.85.42,tp_dst=8504 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b04,reg2=0x10d0/0xffff,nw_src=85.85.85.43,nw_dst=85.85.85.43,tp_dst=8504 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b04,reg2=0x10d0/0xffff,nw_src=85.85.85.44,nw_dst=85.85.85.44,tp_dst=8504 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10cd/0xffff,reg4=0x2b2b2b01,nw_src=85.85.85.1,nw_dst=85.85.85.1,tp_dst=8501 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.1,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=68, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10ce/0xffff,reg4=0x2b2b2b02,nw_src=85.85.85.21,nw_dst=85.85.85.21,tp_dst=8502 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=68, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10ce/0xffff,reg4=0x2b2b2b02,nw_src=85.85.85.22,nw_dst=85.85.85.22,tp_dst=8502 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=68, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10cf/0xffff,reg4=0x2b2b2b03,nw_src=85.85.85.31,nw_dst=85.85.85.31,tp_dst=8503 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=68, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10cf/0xffff,reg4=0x2b2b2b03,nw_src=85.85.85.32,nw_dst=85.85.85.32,tp_dst=8503 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=68, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10d0/0xffff,reg4=0x2b2b2b04,nw_src=85.85.85.41,nw_dst=85.85.85.41,tp_dst=8504 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=68, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10d0/0xffff,reg4=0x2b2b2b04,nw_src=85.85.85.42,nw_dst=85.85.85.42,tp_dst=8504 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=68, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10d0/0xffff,reg4=0x2b2b2b04,nw_src=85.85.85.43,nw_dst=85.85.85.43,tp_dst=8504 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=68, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10d0/0xffff,reg4=0x2b2b2b04,nw_src=85.85.85.44,nw_dst=85.85.85.44,tp_dst=8504 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> ]) > >> dnl Change Chassis_Template_Var mappings > >> @@ -36137,15 +36137,15 @@ AT_CHECK([ovs-ofctl dump-groups br-int | > >> grep 'nat(dst=84.84.84.44:8404)' -c], [ > >> dnl Ensure hairpin flows are correct. > >> as hv1 > >> AT_CHECK([ovs-ofctl dump-flows br-int | grep > >> table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all], [0], [dnl > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a01,reg2=0x1069/0xffff,nw_src=84.84.84.1,nw_dst=84.84.84.1,tp_dst=8401 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.1,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a02,reg2=0x106a/0xffff,nw_src=84.84.84.21,nw_dst=84.84.84.21,tp_dst=8402 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a02,reg2=0x106a/0xffff,nw_src=84.84.84.22,nw_dst=84.84.84.22,tp_dst=8402 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a03,reg2=0x106b/0xffff,nw_src=84.84.84.31,nw_dst=84.84.84.31,tp_dst=8403 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a03,reg2=0x106b/0xffff,nw_src=84.84.84.32,nw_dst=84.84.84.32,tp_dst=8403 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a04,reg2=0x106c/0xffff,nw_src=84.84.84.41,nw_dst=84.84.84.41,tp_dst=8404 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a04,reg2=0x106c/0xffff,nw_src=84.84.84.42,nw_dst=84.84.84.42,tp_dst=8404 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a04,reg2=0x106c/0xffff,nw_src=84.84.84.43,nw_dst=84.84.84.43,tp_dst=8404 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> - table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a04,reg2=0x106c/0xffff,nw_src=84.84.84.44,nw_dst=84.84.84.44,tp_dst=8404 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1069/0xffff,reg4=0x2a2a2a01,nw_src=84.84.84.1,nw_dst=84.84.84.1,tp_dst=8401 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.1,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106a/0xffff,reg4=0x2a2a2a02,nw_src=84.84.84.21,nw_dst=84.84.84.21,tp_dst=8402 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106a/0xffff,reg4=0x2a2a2a02,nw_src=84.84.84.22,nw_dst=84.84.84.22,tp_dst=8402 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106b/0xffff,reg4=0x2a2a2a03,nw_src=84.84.84.31,nw_dst=84.84.84.31,tp_dst=8403 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106b/0xffff,reg4=0x2a2a2a03,nw_src=84.84.84.32,nw_dst=84.84.84.32,tp_dst=8403 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106c/0xffff,reg4=0x2a2a2a04,nw_src=84.84.84.41,nw_dst=84.84.84.41,tp_dst=8404 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106c/0xffff,reg4=0x2a2a2a04,nw_src=84.84.84.42,nw_dst=84.84.84.42,tp_dst=8404 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106c/0xffff,reg4=0x2a2a2a04,nw_src=84.84.84.43,nw_dst=84.84.84.43,tp_dst=8404 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> + table=OFTABLE_CHK_LB_HAIRPIN, > >> > priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106c/0xffff,reg4=0x2a2a2a04,nw_src=84.84.84.44,nw_dst=84.84.84.44,tp_dst=8404 > actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) > >> ]) > >> dnl Remove Chassis_Template_Variables and check that everything is > >> diff --git a/tests/system-ovn-kmod.at b/tests/system-ovn-kmod.at > >> index 170024a61..f7745b979 100644 > >> --- a/tests/system-ovn-kmod.at > >> +++ b/tests/system-ovn-kmod.at > >> @@ -151,12 +151,12 @@ > >> > tcp,orig=(src=172.16.1.2,dst=172.16.1.100,sport=<cleared>,dport=<cleared>),reply > >> dp_key=$(printf "0x%x" $(fetch_column datapath tunnel_key > >> external_ids:name=R2)) > >> AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_AFFINITY --no-stats | strip_cookie | sed -e > >> 's/load:0xc0a80[[0-9]]02/load:0xc0a80<cleared>02/'], [0], [dnl > >> - table=OFTABLE_CHK_LB_AFFINITY, idle_timeout=60, > >> tcp,metadata=$dp_key,nw_src=172.16.1.2,nw_dst=172.16.1.100,tp_dst=8080 > >> > actions=load:0x1->NXM_NX_REG10[[14]],load:0xc0a80<cleared>02->NXM_NX_REG4[[]],load:0x50->NXM_NX_REG8[[0..15]] > >> + table=OFTABLE_CHK_LB_AFFINITY, idle_timeout=60, > >> tcp,metadata=$dp_key,nw_src=172.16.1.2,nw_dst=172.16.1.100,tp_dst=8080 > >> > actions=load:0x1->NXM_NX_REG10[[14]],load:0xc0a80<cleared>02->NXM_NX_REG4[[]],load:0x50->NXM_NX_REG2[[0..15]] > >> ]) > >> check_affinity_flows () { > >> -n1=$(ovs-ofctl dump-flows br-int table=$dnat |awk > >> '/priority=150,ct_state=\+new\+trk,ip,reg4=0xc0a80102,.*nw_dst= > 172.16.1.100/{print <http://172.16.1.100/%7Bprint> > substr($4,11,length($4)-11)}') > >> -n2=$(ovs-ofctl dump-flows br-int table=$dnat |awk > >> '/priority=150,ct_state=\+new\+trk,ip,reg4=0xc0a80202,.*nw_dst= > 172.16.1.100/{print <http://172.16.1.100/%7Bprint> > substr($4,11,length($4)-11)}') > >> +n1=$(ovs-ofctl dump-flows br-int table=$dnat |awk > >> > '/priority=150,ct_state=\+new\+trk,ip,reg2=0x50\/0xffff,reg4=0xc0a80102,.*nw_dst= > 172.16.1.100/{print <http://172.16.1.100/%7Bprint> > substr($4,11,length($4)-11)}') > >> +n2=$(ovs-ofctl dump-flows br-int table=$dnat |awk > >> > '/priority=150,ct_state=\+new\+trk,ip,reg2=0x50\/0xffff,reg4=0xc0a80202,.*nw_dst= > 172.16.1.100/{print <http://172.16.1.100/%7Bprint> > substr($4,11,length($4)-11)}') > >> [[ $n1 -gt 0 -a $n2 -eq 0 ]] || [[ $n1 -eq 0 -a $n2 -gt 0 ]] > >> echo $? > >> } > >> @@ -452,12 +452,12 @@ > >> > tcp,orig=(src=fd72::2,dst=fd30::1,sport=<cleared>,dport=<cleared>),reply=(src=fd > >> dp_key=$(printf "0x%x" $(fetch_column datapath tunnel_key > >> external_ids:name=R2)) > >> AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int > >> table=OFTABLE_CHK_LB_AFFINITY --no-stats | strip_cookie | sed -e > >> 's/load:0xfd1[[0-9]]000000000000/load:0xfd1<cleared>000000000000/'], > >> [0], [dnl > >> - table=OFTABLE_CHK_LB_AFFINITY, idle_timeout=60, > >> tcp6,metadata=$dp_key,ipv6_src=fd72::2,ipv6_dst=fd30::1,tp_dst=8080 > >> > actions=load:0x1->NXM_NX_REG10[[14]],load:0x2->NXM_NX_XXREG1[[0..63]],load:0xfd1<cleared>000000000000->NXM_NX_XXREG1[[64..127]],load:0x50->NXM_NX_REG8[[0..15]] > >> + table=OFTABLE_CHK_LB_AFFINITY, idle_timeout=60, > >> tcp6,metadata=$dp_key,ipv6_src=fd72::2,ipv6_dst=fd30::1,tp_dst=8080 > >> > actions=load:0x1->NXM_NX_REG10[[14]],load:0x2->NXM_NX_XXREG1[[0..63]],load:0xfd1<cleared>000000000000->NXM_NX_XXREG1[[64..127]],load:0x50->NXM_NX_REG2[[0..15]] > >> ]) > >> check_affinity_flows () { > >> -n1=$(ovs-ofctl dump-flows br-int table=$dnat |awk > >> > '/priority=150,ct_state=\+new\+trk,ipv6,reg4=0xfd110000,.*ipv6_dst=fd30::1\s/{print > substr($4,11,length($4)-11)}') > >> -n2=$(ovs-ofctl dump-flows br-int table=$dnat |awk > >> > '/priority=150,ct_state=\+new\+trk,ipv6,reg4=0xfd120000,.*ipv6_dst=fd30::1\s/{print > substr($4,11,length($4)-11)}') > >> +n1=$(ovs-ofctl dump-flows br-int table=$dnat |awk > >> > '/priority=150,ct_state=\+new\+trk,ipv6,reg2=0x50\/0xffff,reg4=0xfd110000,.*ipv6_dst=fd30::1\s/{print > substr($4,11,length($4)-11)}') > >> +n2=$(ovs-ofctl dump-flows br-int table=$dnat |awk > >> > '/priority=150,ct_state=\+new\+trk,ipv6,reg2=0x50\/0xffff,reg4=0xfd120000,.*ipv6_dst=fd30::1\s/{print > substr($4,11,length($4)-11)}') > >> [[ $n1 -gt 0 -a $n2 -eq 0 ]] || [[ $n1 -eq 0 -a $n2 -gt 0 ]] > >> echo $? > >> } > > > > _______________________________________________ > dev mailing list > dev@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev >
diff --git a/include/ovn/logical-fields.h b/include/ovn/logical-fields.h index 59e4ac3da..6a87fc386 100644 --- a/include/ovn/logical-fields.h +++ b/include/ovn/logical-fields.h @@ -47,7 +47,7 @@ enum ovn_controller_event { * * Make sure these don't overlap with the logical fields! */ #define MFF_LOG_REG0 MFF_REG0 -#define MFF_LOG_LB_ORIG_DIP_IPV4 MFF_REG1 +#define MFF_LOG_LB_ORIG_DIP_IPV4 MFF_REG4 #define MFF_LOG_LB_ORIG_TP_DPORT MFF_REG2 #define MFF_LOG_XXREG0 MFF_XXREG0 @@ -56,9 +56,8 @@ enum ovn_controller_event { #define MFF_N_LOG_REGS 10 #define MFF_LOG_LB_AFF_MATCH_IP4_ADDR MFF_REG4 -#define MFF_LOG_LB_AFF_MATCH_LS_IP6_ADDR MFF_XXREG0 -#define MFF_LOG_LB_AFF_MATCH_LR_IP6_ADDR MFF_XXREG1 -#define MFF_LOG_LB_AFF_MATCH_PORT MFF_REG8 +#define MFF_LOG_LB_AFF_MATCH_IP6_ADDR MFF_XXREG1 +#define MFF_LOG_LB_AFF_MATCH_PORT MFF_REG2 #define MFF_LOG_CT_ORIG_NW_DST_ADDR MFF_REG1 /* REG_ORIG_DIP_IPV4 */ #define MFF_LOG_CT_ORIG_IP6_DST_ADDR MFF_XXREG1 /* REG_ORIG_DIP_IPV6 */ diff --git a/lib/actions.c b/lib/actions.c index ea30be767..62e73b2c5 100644 --- a/lib/actions.c +++ b/lib/actions.c @@ -5371,11 +5371,7 @@ encode_COMMIT_LB_AFF(const struct ovnact_commit_lb_aff *lb_aff, imm_backend_ip = (union mf_value) { .ipv6 = lb_aff->backend, }; - if (ep->is_switch) { - ol_spec->dst.field = mf_from_id(MFF_LOG_LB_AFF_MATCH_LS_IP6_ADDR); - } else { - ol_spec->dst.field = mf_from_id(MFF_LOG_LB_AFF_MATCH_LR_IP6_ADDR); - } + ol_spec->dst.field = mf_from_id(MFF_LOG_LB_AFF_MATCH_IP6_ADDR); } else { ovs_be32 ip4 = in6_addr_get_mapped_ipv4(&lb_aff->backend); imm_backend_ip = (union mf_value) { diff --git a/northd/northd.c b/northd/northd.c index c41a7591b..2385c3b5e 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -125,20 +125,12 @@ static bool vxlan_mode; #define REGBIT_FROM_ROUTER_PORT "reg0[18]" #define REGBIT_IP_FRAG "reg0[19]" -#define REG_ORIG_DIP_IPV4 "reg1" -#define REG_ORIG_DIP_IPV6 "xxreg1" -#define REG_ORIG_TP_DPORT "reg2[0..15]" - -/* Register used to store backend ipv6 address - * for load balancer affinity. */ -#define REG_LB_L2_AFF_BACKEND_IP6 "xxreg0" - /* Register definitions for switches and routers. */ -/* Register used to store backend ipv4 address - * for load balancer affinity. */ -#define REG_LB_AFF_BACKEND_IP4 "reg4" -#define REG_LB_AFF_MATCH_PORT "reg8[0..15]" +/* Register used for LB. */ +#define REG_LB_IPV4 "reg4" +#define REG_LB_IPV6 "xxreg1" +#define REG_LB_PORT "reg2[0..15]" /* Registers for ACL evaluation */ #define REGBIT_ACL_VERDICT_ALLOW "reg8[16]" @@ -192,12 +184,6 @@ BUILD_ASSERT_DECL(ACL_OBS_STAGE_MAX < (1 << 2)); #define REG_DHCP_RELAY_DIP_IPV4 "reg2" #define REG_ROUTE_TABLE_ID "reg7" -/* Register used to store backend ipv6 address - * for load balancer affinity. */ -#define REG_LB_L3_AFF_BACKEND_IP6 "xxreg1" - -#define REG_ORIG_TP_DPORT_ROUTER "reg9[16..31]" - /* Registers used for pasing observability information for switches: * domain and point ID. */ #define REG_OBS_POINT_ID_NEW "reg3" @@ -227,25 +213,27 @@ BUILD_ASSERT_DECL(ACL_OBS_STAGE_MAX < (1 << 2)); * | | REGBIT_{HAIRPIN/HAIRPIN_REPLY} | | | * | | REGBIT_ACL_HINT_{ALLOW_NEW/ALLOW/DROP/BLOCK} | | | * | | REGBIT_ACL_{LABEL/STATELESS} | X | | - * +----+----------------------------------------------+ X | LB_L2_AFF_BACKEND_IP6 | - * | R1 | ORIG_DIP_IPV4 (>= IN_PRE_STATEFUL) | R | (>= IN_LB_AFF_CHECK && | - * +----+----------------------------------------------+ E | <= IN_LB_AFF_LEARN) | - * | R2 | ORIG_TP_DPORT (>= IN_PRE_STATEFUL) | G | | - * +----+----------------------------------------------+ 0 | | + * +----+----------------------------------------------+ X | | + * | R1 | UNUSED | R | | + * +----+----------------------------------------------+ E | | + * | R2 | REG_LB_PORT | G | | + * | | (>= IN_PRE_STATEFUL && <= IN_LB_AFF_LEARN) | 0 | | + * +----+----------------------------------------------+ | | * | R3 | OBS_POINT_ID_NEW | | | * | | (>= ACL_EVAL* && <= ACL_ACTION*) | | | * +----+----------------------------------------------+---+-----------------------------------+ - * | R4 | REG_LB_AFF_BACKEND_IP4 | | | - * +----+----------------------------------------------+ X | | - * | R5 | UNUSED | X | ORIG_DIP_IPV6(>= IN_PRE_STATEFUL) | - * +----+----------------------------------------------+ R | | - * | R6 | UNUSED | E | | - * +----+----------------------------------------------+ G | | - * | R7 | UNUSED | 1 | | + * | R4 | REG_LB_IPV4 | | | + * | R4 | (>= IN_PRE_STATEFUL && <= IN_HAIRPIN) | X | | + * +----+----------------------------------------------+ X | REG_LB_IPV6 | + * | R5 | UNUSED | R | (>= IN_PRE_STATEFUL && | + * +----+----------------------------------------------+ E | <= IN_HAIRPIN) | + * | R6 | UNUSED | G | | + * +----+----------------------------------------------+ 1 | | + * | R7 | UNUSED | | | * +----+----------------------------------------------+---+-----------------------------------+ - * | R8 | LB_AFF_MATCH_PORT | X | REG_OBS_COLLECTOR_ID_NEW | - * | | (>= IN_LB_AFF_CHECK && <= IN_LB_AFF_LEARN) | R | REG_OBS_COLLECTOR_ID_EST | - * | | | E | (>= ACL_EVAL* && <= ACL_ACTION*) | + * | R8 | REG_OBS_COLLECTOR_ID_NEW | X | | + * | | REG_OBS_COLLECTOR_ID_EST | R | | + * | | (>= ACL_EVAL* && <= ACL_ACTION*) | E | | * +----+----------------------------------------------+ G +-----------------------------------+ * | R9 | OBS_POINT_ID_EST | 4 | | * | | (>= ACL_EVAL* && <= ACL_ACTION*) | | | @@ -256,23 +244,26 @@ BUILD_ASSERT_DECL(ACL_OBS_STAGE_MAX < (1 << 2)); * | R0 | REGBIT_ND_RA_OPTS_RESULT | | | | | * | | (= IN_ND_RA_OPTIONS) | X | | | | * | | NEXT_HOP_IPV4 | R | | | | - * | | (>= IP_INPUT) | E | INPORT_ETH_ADDR | X | | + * | | (>= IN_IP_ROUTING) | E | INPORT_ETH_ADDR | X | | * +-----+---------------------------+ G | (< IP_INPUT) | X | | * | R1 | UNUSED | 0 | | R | | - * | | | | | E | NEXT_HOP_IPV6 (>= DEFRAG ) | + * | | | | | E | NEXT_HOP_IPV6 (>= IN_IP_ROUTING) | * +-----+---------------------------+---+-----------------+ G | | - * | R2 REG_DHCP_RELAY_DIP_IPV4 | X | | 0 | | - * | | | R | | | | - * +-----+---------------------------+ E | UNUSED | | | - * | R3 | UNUSED | G | | | | - * | | | 1 | | | | + * | R2 | REG_DHCP_RELAY_DIP_IPV4 | | | 0 | | + * | | REG_LB_PORT | X | | 0 | | + * | | (>= IN_LB_AFF_CHECK | R | | | | + * | | <= IN_LB_AFF_LEARN) | E | | | | + * +-----+---------------------------+ G | UNUSED | | | + * | R3 | UNUSED | 1 | | | | + * | | | | | | | * +-----+---------------------------+---+-----------------+---+------------------------------------+ - * | R4 | REG_LB_AFF_BACKEND_IP4 | X | | | | - * | | | R | | | | + * | R4 | REG_LB_IPV4 | X | | | | + * | | (>= IN_LB_AFF_CHECK && | R | | | | + * | | <= IN_LB_AFF_LEARN) | R | | | | * +-----+---------------------------+ E | UNUSED | X | | - * | R5 | SRC_IPV4 for ARP-REQ | G | | X | | - * | | (>= IP_INPUT) | 2 | | R | LB_L3_AFF_BACKEND_IP6 | - * +-----+---------------------------+---+-----------------+ E | (<= IN_DNAT) | + * | R5 | SRC_IPV4 for ARP-REQ | G | | X | REG_LB_IPV6 | + * | | (>= IP_INPUT) | 2 | | R | (>= IN_LB_AFF_CHECK && | + * +-----+---------------------------+---+-----------------+ E | <= IN_LB_AFF_LEARN) | * | R6 | UNUSED | X | | G | | * | | | R | | 1 | | * +-----+---------------------------+ E | UNUSED | | | @@ -282,7 +273,7 @@ BUILD_ASSERT_DECL(ACL_OBS_STAGE_MAX < (1 << 2)); * +-----+---------------------------+---+-----------------+---+------------------------------------+ * | R8 | ECMP_GROUP_ID | | | * | | ECMP_MEMBER_ID | | | - * | | LB_AFF_MATCH_PORT | X | | + * | | | X | | * +-----+---------------------------+ R | | * | | REGBIT_{ | E | | * | | EGRESS_LOOPBACK/ | G | UNUSED | @@ -292,9 +283,6 @@ BUILD_ASSERT_DECL(ACL_OBS_STAGE_MAX < (1 << 2)); * | |REGBIT_DHCP_RELAY_REQ_CHK/ | | | * | |REGBIT_DHCP_RELAY_RESP_CHK | | | * | |REGBIT_NEXTHOP_IS_IPV4} | | | - * | | | | | - * | | REG_ORIG_TP_DPORT_ROUTER | | | - * | | | | | * +-----+---------------------------+---+-----------------+ * */ @@ -3621,6 +3609,16 @@ build_lb_vip_actions(const struct ovn_northd_lb *lb, bool reject = !lb_vip->n_backends && lb_vip->empty_backend_rej; bool drop = !lb_vip->n_backends && !lb_vip->empty_backend_rej; + if (ls_dp || lb->affinity_timeout) { + const char *ip_reg = + lb_vip->address_family == AF_INET ? REG_LB_IPV4 : REG_LB_IPV6; + ds_put_format(action, "%s = %s; ", ip_reg, lb_vip->vip_str); + + if (lb_vip->port_str) { + ds_put_format(action, REG_LB_PORT" = %s; ", lb_vip->port_str); + } + } + if (lb_vip_nb->lb_health_check) { ds_put_cstr(action, "ct_lb_mark(backends="); @@ -7867,29 +7865,19 @@ build_lb_rules_pre_stateful(struct lflow_table *lflows, */ if (lb->vips[i].address_family == AF_INET) { ip_match = "ip4"; - ds_put_format(action, REG_ORIG_DIP_IPV4 " = %s; ", + ds_put_format(action, REG_LB_IPV4 " = %s; ", lb_vip->vip_str); } else { ip_match = "ip6"; - ds_put_format(action, REG_ORIG_DIP_IPV6 " = %s; ", + ds_put_format(action, REG_LB_IPV6 " = %s; ", lb_vip->vip_str); } - const char *proto = NULL; if (lb_vip->port_str) { - proto = "tcp"; - if (lb->nlb->protocol) { - if (!strcmp(lb->nlb->protocol, "udp")) { - proto = "udp"; - } else if (!strcmp(lb->nlb->protocol, "sctp")) { - proto = "sctp"; - } - } - /* Store the original destination port to be used when generating * hairpin flows. */ - ds_put_format(action, REG_ORIG_TP_DPORT " = %s; ", + ds_put_format(action, REG_LB_PORT " = %s; ", lb_vip->port_str); } ds_put_cstr(action, "ct_lb_mark;"); @@ -7897,7 +7885,8 @@ build_lb_rules_pre_stateful(struct lflow_table *lflows, ds_put_format(match, REGBIT_CONNTRACK_NAT" == 1 && %s.dst == %s", ip_match, lb_vip->vip_str); if (lb_vip->port_str) { - ds_put_format(match, " && %s.dst == %s", proto, lb_vip->port_str); + ds_put_format(match, " && %s.dst == %s", lb->proto, + lb_vip->port_str); } ovn_lflow_add_with_dp_group( @@ -7913,34 +7902,30 @@ build_lb_rules_pre_stateful(struct lflow_table *lflows, * - load balancing affinity check: * table=lr_in_lb_aff_check, priority=100 * match=(new_lb_match) - * action=(REG_NEXT_HOP_IPV4 = ip4.dst; - * REG_ORIG_TP_DPORT_ROUTER = tcp.dst; - * REGBIT_KNOWN_LB_SESSION = chk_lb_aff(); next;) + * action=(REGBIT_KNOWN_LB_SESSION = chk_lb_aff(); next;) * * - load balancing: * table=lr_in_dnat, priority=150 * match=(REGBIT_KNOWN_LB_SESSION == 1 && ct.new && ip4.dst == V - * && REG_LB_AFF_BACKEND_IP4 == B1 && REG_LB_AFF_MATCH_PORT == BP1) - * action=(REG_NEXT_HOP_IPV4 = V; lb_action; - * ct_lb_mark(backends=B1:BP1; ct_flag);) + * && REG_LB_IPV4 == B1 && REG_LB_PORT == BP1) + * action=(lb_action; ct_lb_mark(backends=B1:BP1; ct_flag);) * table=lr_in_dnat, priority=150 * match=(REGBIT_KNOWN_LB_SESSION == 1 && ct.new && ip4.dst == V - * && REG_LB_AFF_BACKEND_IP4 == B2 && REG_LB_AFF_MATCH_PORT == BP2) - * action=(REG_NEXT_HOP_IPV4 = V; lb_action; - * ct_lb_mark(backends=B2:BP2; ct_flag);) + * && REG_LB_IPV4 == B2 && REG_LB_PORT == BP2) + * action=(lb_action; ct_lb_mark(backends=B2:BP2; ct_flag);) * * - load balancing affinity learn: * table=lr_in_lb_aff_learn, priority=100 * match=(REGBIT_KNOWN_LB_SESSION == 0 * && ct.new && ip4 - * && REG_NEXT_HOP_IPV4 == V && REG_ORIG_TP_DPORT_ROUTER = VP + * && REG_LB_IPV4 == V && REG_LB_PORT = VP * && ip4.dst == B1 && tcp.dst == BP1) * action=(commit_lb_aff(vip = "V:VP", backend = "B1:BP1", * proto = tcp, timeout = T)); * table=lr_in_lb_aff_learn, priority=100 * match=(REGBIT_KNOWN_LB_SESSION == 0 * && ct.new && ip4 - * && REG_NEXT_HOP_IPV4 == V && REG_ORIG_TP_DPORT_ROUTER = VP + * && REG_LB_IPV4 == V && REG_LB_PORT = VP * && ip4.dst == B2 && tcp.dst == BP2) * action=(commit_lb_aff(vip = "V:VP", backend = "B2:BP2", * proto = tcp, timeout = T)); @@ -7963,14 +7948,11 @@ build_lb_affinity_lr_flows(struct lflow_table *lflows, struct ds aff_action_learn = DS_EMPTY_INITIALIZER; struct ds aff_match = DS_EMPTY_INITIALIZER; struct ds aff_match_learn = DS_EMPTY_INITIALIZER; - struct ds aff_check_action = DS_EMPTY_INITIALIZER; bool ipv6 = !IN6_IS_ADDR_V4MAPPED(&lb_vip->vip); const char *ip_match = ipv6 ? "ip6" : "ip4"; - const char *reg_vip = ipv6 ? REG_NEXT_HOP_IPV6 : REG_NEXT_HOP_IPV4; - const char *reg_backend = - ipv6 ? REG_LB_L3_AFF_BACKEND_IP6 : REG_LB_AFF_BACKEND_IP4; + const char *reg_ip = ipv6 ? REG_LB_IPV6 : REG_LB_IPV4; const char *ct_flag = NULL; if (lb_action && !strcmp(lb_action, "flags.skip_snat_for_lb = 1; ")) { ct_flag = "; skip_snat"; @@ -7980,22 +7962,12 @@ build_lb_affinity_lr_flows(struct lflow_table *lflows, } /* Create affinity check flow. */ - ds_put_format(&aff_check_action, "%s = %s.dst; ", reg_vip, ip_match); - - if (lb_vip->port_str) { - ds_put_format(&aff_check_action, REG_ORIG_TP_DPORT_ROUTER" = %s.dst; ", - lb->proto); - } - ds_put_cstr(&aff_check_action, REGBIT_KNOWN_LB_SESSION - " = chk_lb_aff(); next;"); - ovn_lflow_add_with_dp_group( lflows, dp_bitmap, ods_size(lr_datapaths), S_ROUTER_IN_LB_AFF_CHECK, - 100, new_lb_match, ds_cstr(&aff_check_action), &lb->nlb->header_, - lflow_ref); + 100, new_lb_match, REGBIT_KNOWN_LB_SESSION" = chk_lb_aff(); next;", + &lb->nlb->header_, lflow_ref); /* Prepare common part of affinity LB and affinity learn action. */ - ds_put_format(&aff_action, "%s = %s; ", reg_vip, lb_vip->vip_str); ds_put_cstr(&aff_action_learn, "commit_lb_aff(vip = \""); if (lb_vip->port_str) { @@ -8015,19 +7987,19 @@ build_lb_affinity_lr_flows(struct lflow_table *lflows, if (lb_vip->port_str) { ds_put_format(&aff_match_learn, REGBIT_KNOWN_LB_SESSION" == 0 && " "ct.new && %s && %s == %s && " - REG_ORIG_TP_DPORT_ROUTER" == %s && " - "%s.dst == ", ip_match, reg_vip, lb_vip->vip_str, + REG_LB_PORT " == %s && " + "%s.dst == ", ip_match, reg_ip, lb_vip->vip_str, lb_vip->port_str, ip_match); } else { ds_put_format(&aff_match_learn, REGBIT_KNOWN_LB_SESSION" == 0 && " "ct.new && %s && %s == %s && %s.dst == ", ip_match, - reg_vip, lb_vip->vip_str, ip_match); + reg_ip, lb_vip->vip_str, ip_match); } /* Prepare common part of affinity match. */ ds_put_format(&aff_match, REGBIT_KNOWN_LB_SESSION" == 1 && " "ct.new && %s.dst == %s && %s == ", ip_match, - lb_vip->vip_str, reg_backend); + lb_vip->vip_str, reg_ip); /* Store the common part length. */ size_t aff_action_len = aff_action.length; @@ -8050,7 +8022,7 @@ build_lb_affinity_lr_flows(struct lflow_table *lflows, ds_put_format(&aff_match_learn, " && %s.dst == %d", lb->proto, backend->port); - ds_put_format(&aff_match, " && "REG_LB_AFF_MATCH_PORT" == %d", + ds_put_format(&aff_match, " && "REG_LB_PORT" == %d", backend->port); } else { ds_put_cstr(&aff_action, backend->ip_str); @@ -8094,7 +8066,6 @@ build_lb_affinity_lr_flows(struct lflow_table *lflows, ds_destroy(&aff_action_learn); ds_destroy(&aff_match); ds_destroy(&aff_match_learn); - ds_destroy(&aff_check_action); } /* Builds the logical switch flows related to load balancer affinity. @@ -8102,35 +8073,33 @@ build_lb_affinity_lr_flows(struct lflow_table *lflows, * affinity timeout set to T, it generates the following logical flows: * - load balancing affinity check: * table=ls_in_lb_aff_check, priority=100 - * match=(ct.new && ip4 - * && REG_ORIG_DIP_IPV4 == V && REG_ORIG_TP_DPORT == VP) + * match=(ct.new && ip4 && ip4.dst == V && PROTO && PROTO.dst == VP) * action=(REGBIT_KNOWN_LB_SESSION = chk_lb_aff(); next;) * * - load balancing: * table=ls_in_lb, priority=150 * match=(REGBIT_KNOWN_LB_SESSION == 1 && ct.new && ip4.dst == V - * && REG_LB_AFF_BACKEND_IP4 == B1 && REG_LB_AFF_MATCH_PORT == BP1) - * action=(REG_ORIG_DIP_IPV4 = V; REG_ORIG_TP_DPORT = VP; + * && PROTO && PROTO.dst == VP) + * action=(REG_LB_IPV4 = V; REG_LB_PORT = VP; * ct_lb_mark(backends=B1:BP1);) * table=ls_in_lb, priority=150 * match=(REGBIT_KNOWN_LB_SESSION == 1 && ct.new && ip4.dst == V - * && REG_LB_AFF_BACKEND_IP4 == B2 && REG_LB_AFF_MATCH_PORT == BP2) - * action=(REG_ORIG_DIP_IPV4 = V; - * REG_ORIG_TP_DPORT = VP; + * && PROTO && PROTO.dst == VP) + * action=(REG_LB_IPV4 = V; REG_LB_PORT = VP; * ct_lb_mark(backends=B1:BP2);) * * - load balancing affinity learn: * table=ls_in_lb_aff_learn, priority=100 * match=(REGBIT_KNOWN_LB_SESSION == 0 * && ct.new && ip4 - * && REG_ORIG_DIP_IPV4 == V && REG_ORIG_TP_DPORT == VP + * && REG_LB_IPV4 == V && REG_LB_PORT == VP * && ip4.dst == B1 && tcp.dst == BP1) * action=(commit_lb_aff(vip = "V:VP", backend = "B1:BP1", * proto = tcp, timeout = T)); * table=ls_in_lb_aff_learn, priority=100 * match=(REGBIT_KNOWN_LB_SESSION == 0 * && ct.new && ip4 - * && REG_ORIG_DIP_IPV4 == V && REG_ORIG_TP_DPORT == VP + * && REG_LB_IPV4 == V && REG_LB_PORT == VP * && ip4.dst == B2 && tcp.dst == BP2) * action=(commit_lb_aff(vip = "V:VP", backend = "B2:BP2", * proto = tcp, timeout = T)); @@ -8149,19 +8118,16 @@ build_lb_affinity_ls_flows(struct lflow_table *lflows, const struct ovn_northd_lb *lb = lb_dps->lb; struct ds new_lb_match = DS_EMPTY_INITIALIZER; - if (IN6_IS_ADDR_V4MAPPED(&lb_vip->vip)) { - ds_put_format(&new_lb_match, - "ct.new && ip4 && "REG_ORIG_DIP_IPV4 " == %s", - lb_vip->vip_str); - } else { - ds_put_format(&new_lb_match, - "ct.new && ip6 && "REG_ORIG_DIP_IPV6 " == %s", - lb_vip->vip_str); - } + bool ipv6 = lb_vip->address_family == AF_INET6; + const char *ip_match = ipv6 ? "ip6" : "ip4"; + const char *reg_ip = ipv6 ? REG_LB_IPV6 : REG_LB_IPV4; + + ds_put_format(&new_lb_match, "ct.new && %s && %s.dst == %s", + ip_match, ip_match, lb_vip->vip_str); if (lb_vip->port_str) { - ds_put_format(&new_lb_match, " && "REG_ORIG_TP_DPORT " == %s", - lb_vip->port_str); + ds_put_format(&new_lb_match, " && %s && %s.dst == %s", + lb->proto, lb->proto, lb_vip->port_str); } static char *aff_check = REGBIT_KNOWN_LB_SESSION" = chk_lb_aff(); next;"; @@ -8177,19 +8143,12 @@ build_lb_affinity_ls_flows(struct lflow_table *lflows, struct ds aff_match = DS_EMPTY_INITIALIZER; struct ds aff_match_learn = DS_EMPTY_INITIALIZER; - bool ipv6 = !IN6_IS_ADDR_V4MAPPED(&lb_vip->vip); - const char *ip_match = ipv6 ? "ip6" : "ip4"; - - const char *reg_vip = ipv6 ? REG_ORIG_DIP_IPV6 : REG_ORIG_DIP_IPV4; - const char *reg_backend = - ipv6 ? REG_LB_L2_AFF_BACKEND_IP6 : REG_LB_AFF_BACKEND_IP4; - /* Prepare common part of affinity LB and affinity learn action. */ - ds_put_format(&aff_action, "%s = %s; ", reg_vip, lb_vip->vip_str); + ds_put_format(&aff_action, "%s = %s; ", reg_ip, lb_vip->vip_str); ds_put_cstr(&aff_action_learn, "commit_lb_aff(vip = \""); if (lb_vip->port_str) { - ds_put_format(&aff_action, REG_ORIG_TP_DPORT" = %s; ", + ds_put_format(&aff_action, REG_LB_PORT" = %s; ", lb_vip->port_str); ds_put_format(&aff_action_learn, ipv6 ? "[%s]:%s" : "%s:%s", lb_vip->vip_str, lb_vip->port_str); @@ -8204,19 +8163,19 @@ build_lb_affinity_ls_flows(struct lflow_table *lflows, if (lb_vip->port_str) { ds_put_format(&aff_match_learn, REGBIT_KNOWN_LB_SESSION" == 0 && " "ct.new && %s && %s == %s && " - REG_ORIG_TP_DPORT" == %s && %s.dst == ", - ip_match, reg_vip, lb_vip->vip_str, + REG_LB_PORT" == %s && %s.dst == ", + ip_match, reg_ip, lb_vip->vip_str, lb_vip->port_str, ip_match); } else { ds_put_format(&aff_match_learn, REGBIT_KNOWN_LB_SESSION" == 0 && " "ct.new && %s && %s == %s && %s.dst == ", - ip_match, reg_vip, lb_vip->vip_str, ip_match); + ip_match, reg_ip, lb_vip->vip_str, ip_match); } /* Prepare common part of affinity match. */ ds_put_format(&aff_match, REGBIT_KNOWN_LB_SESSION" == 1 && " "ct.new && %s.dst == %s && %s == ", ip_match, - lb_vip->vip_str, reg_backend); + lb_vip->vip_str, reg_ip); /* Store the common part length. */ size_t aff_action_len = aff_action.length; @@ -8238,7 +8197,7 @@ build_lb_affinity_ls_flows(struct lflow_table *lflows, ds_put_format(&aff_match_learn, " && %s.dst == %d", lb->proto, backend->port); - ds_put_format(&aff_match, " && "REG_LB_AFF_MATCH_PORT" == %d", + ds_put_format(&aff_match, " && "REG_LB_PORT" == %d", backend->port); } else { ds_put_cstr(&aff_action, backend->ip_str); @@ -8315,33 +8274,10 @@ build_lb_rules(struct lflow_table *lflows, struct ovn_lb_datapaths *lb_dps, for (size_t i = 0; i < lb->n_vips; i++) { struct ovn_lb_vip *lb_vip = &lb->vips[i]; struct ovn_northd_lb_vip *lb_vip_nb = &lb->vips_nb[i]; - const char *ip_match = NULL; + const char *ip_match = + lb_vip->address_family == AF_INET ? "ip4" : "ip6"; ds_clear(action); - - /* Store the original destination IP to be used when generating - * hairpin flows. - * If the packet is fragmented, then the flow which saves the - * original destination IP (and port) in the "ls_in_pre_stateful" - * stage will not be hit. - */ - if (lb_vip->address_family == AF_INET) { - ip_match = "ip4"; - ds_put_format(action, REG_ORIG_DIP_IPV4 " = %s; ", - lb_vip->vip_str); - } else { - ip_match = "ip6"; - ds_put_format(action, REG_ORIG_DIP_IPV6 " = %s; ", - lb_vip->vip_str); - } - - if (lb_vip->port_str) { - /* Store the original destination port to be used when generating - * hairpin flows. - */ - ds_put_format(action, REG_ORIG_TP_DPORT " = %s; ", - lb_vip->port_str); - } ds_clear(match); /* New connections in Ingress table. */ @@ -8489,13 +8425,13 @@ build_lb_hairpin(const struct ls_stateful_record *ls_stateful_rec, * */ ovn_lflow_add(lflows, od, S_SWITCH_IN_LB, 110, "ct.trk && !ct.rpl && "REGBIT_IP_FRAG" == 1 && ip4", - REG_ORIG_DIP_IPV4 " = ct_nw_dst(); " - REG_ORIG_TP_DPORT " = ct_tp_dst(); next;", + REG_LB_IPV4 " = ct_nw_dst(); " + REG_LB_PORT " = ct_tp_dst(); next;", lflow_ref); ovn_lflow_add(lflows, od, S_SWITCH_IN_LB, 110, "ct.trk && !ct.rpl && "REGBIT_IP_FRAG" == 1 && ip6", - REG_ORIG_DIP_IPV6 " = ct_ip6_dst(); " - REG_ORIG_TP_DPORT " = ct_tp_dst(); next;", + REG_LB_IPV6 " = ct_ip6_dst(); " + REG_LB_PORT " = ct_tp_dst(); next;", lflow_ref); /* Set REGBIT_HAIRPIN in the original direction and diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at index edfd5764b..2b1791de0 100644 --- a/tests/ovn-northd.at +++ b/tests/ovn-northd.at @@ -1425,7 +1425,7 @@ check ovn-nbctl --wait=sb ls-lb-add sw0 lb1 AT_CAPTURE_FILE([sbflows]) OVS_WAIT_FOR_OUTPUT( [ovn-sbctl dump-flows sw0 | tee sbflows | grep 'priority=120.*backends' | ovn_strip_lflows], 0, [dnl - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) ]) # disabled LSPs should not be a backend of Load Balancer @@ -1434,7 +1434,7 @@ check ovn-nbctl lsp-set-enabled sw0-p1 disabled AT_CAPTURE_FILE([sbflows]) OVS_WAIT_FOR_OUTPUT( [ovn-sbctl dump-flows sw0 | tee sbflows | grep 'priority=120.*backends' | ovn_strip_lflows], 0, [dnl - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=20.0.0.3:80);) + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=20.0.0.3:80);) ]) wait_row_count Service_Monitor 1 @@ -1443,7 +1443,7 @@ check ovn-nbctl lsp-set-enabled sw0-p1 enabled AT_CAPTURE_FILE([sbflows]) OVS_WAIT_FOR_OUTPUT( [ovn-sbctl dump-flows sw0 | tee sbflows | grep 'priority=120.*backends' | ovn_strip_lflows], 0, [dnl - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) ]) wait_row_count Service_Monitor 2 @@ -1454,7 +1454,7 @@ wait_row_count Service_Monitor 0 AT_CAPTURE_FILE([sbflows2]) OVS_WAIT_FOR_OUTPUT( [ovn-sbctl dump-flows sw0 | tee sbflows2 | grep 'priority=120.*backends' | ovn_strip_lflows], [0], -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) ]) AS_BOX([Create the Load_Balancer_Health_Check again.]) @@ -1466,7 +1466,7 @@ check ovn-nbctl --wait=sb sync ovn-sbctl dump-flows sw0 | grep backends | grep priority=120 > lflows.txt AT_CHECK([cat lflows.txt | ovn_strip_lflows], [0], [dnl - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) ]) AS_BOX([Get the uuid of both the service_monitor]) @@ -1476,7 +1476,7 @@ sm_sw1_p1=$(fetch_column Service_Monitor _uuid logical_port=sw1-p1) AT_CAPTURE_FILE([sbflows3]) OVS_WAIT_FOR_OUTPUT( [ovn-sbctl dump-flows sw0 | tee sbflows 3 | grep 'priority=120.*backends' | ovn_strip_lflows], [0], -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) ]) AS_BOX([Set the service monitor for sw1-p1 to offline]) @@ -1487,7 +1487,7 @@ check ovn-nbctl --wait=sb sync AT_CAPTURE_FILE([sbflows4]) OVS_WAIT_FOR_OUTPUT( [ovn-sbctl dump-flows sw0 | tee sbflows4 | grep 'priority=120.*backends' | ovn_strip_lflows], [0], -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) ]) AS_BOX([Set the service monitor for sw0-p1 to offline]) @@ -1516,7 +1516,7 @@ check ovn-nbctl --wait=sb sync AT_CAPTURE_FILE([sbflows7]) OVS_WAIT_FOR_OUTPUT( [ovn-sbctl dump-flows sw0 | tee sbflows7 | grep backends | grep priority=120 | ovn_strip_lflows], 0, -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) ]) AS_BOX([Set the service monitor for sw1-p1 to error]) @@ -1527,7 +1527,7 @@ check ovn-nbctl --wait=sb sync ovn-sbctl dump-flows sw0 | grep "ip4.dst == 10.0.0.10 && tcp.dst == 80" \ | grep priority=120 > lflows.txt AT_CHECK([cat lflows.txt | grep ls_in_lb | ovn_strip_lflows], [0], [dnl - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) ]) AS_BOX([Add one more vip to lb1]) @@ -1553,8 +1553,8 @@ AT_CAPTURE_FILE([sbflows9]) OVS_WAIT_FOR_OUTPUT( [ovn-sbctl dump-flows sw0 | tee sbflows9 | grep backends | grep priority=120 | ovn_strip_lflows], 0, -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg1 = 10.0.0.40; reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000);) +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80);) + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg4 = 10.0.0.40; reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000);) ]) AS_BOX([Set the service monitor for sw1-p1 to online]) @@ -1567,8 +1567,8 @@ AT_CAPTURE_FILE([sbflows10]) OVS_WAIT_FOR_OUTPUT( [ovn-sbctl dump-flows sw0 | tee sbflows10 | grep backends | grep priority=120 | ovn_strip_lflows], 0, -[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg1 = 10.0.0.40; reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000,20.0.0.3:80);) +[ table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg4 = 10.0.0.40; reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000,20.0.0.3:80);) ]) AS_BOX([Associate lb1 to sw1]) @@ -1577,8 +1577,8 @@ AT_CAPTURE_FILE([sbflows11]) OVS_WAIT_FOR_OUTPUT( [ovn-sbctl dump-flows sw1 | tee sbflows11 | grep backends | grep priority=120 | ovn_strip_lflows], 0, [dnl - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg1 = 10.0.0.40; reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000,20.0.0.3:80);) + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80);) + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.40 && tcp.dst == 1000), action=(reg4 = 10.0.0.40; reg2[[0..15]] = 1000; ct_lb_mark(backends=10.0.0.3:1000,20.0.0.3:80);) ]) AS_BOX([Now create lb2 same as lb1 but udp protocol.]) @@ -4666,16 +4666,16 @@ check_stateful_flows() { table=??(ls_in_pre_stateful ), priority=100 , match=(reg0[[0]] == 1), action=(ct_next;) table=??(ls_in_pre_stateful ), priority=110 , match=(reg0[[2]] == 1), action=(ct_lb_mark;) table=??(ls_in_pre_stateful ), priority=115 , match=(reg0[[2]] == 1 && ip.is_frag), action=(reg0[[19]] = 1; ct_lb_mark;) - table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark;) - table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 10.0.0.20 && tcp.dst == 80), action=(reg1 = 10.0.0.20; reg2[[0..15]] = 80; ct_lb_mark;) + table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark;) + table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 10.0.0.20 && tcp.dst == 80), action=(reg4 = 10.0.0.20; reg2[[0..15]] = 80; ct_lb_mark;) ]) AT_CHECK([grep "ls_in_lb " sw0flows | ovn_strip_lflows], [0], [dnl table=??(ls_in_lb ), priority=0 , match=(1), action=(next;) - table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) + table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); reg2[[0..15]] = ct_tp_dst(); next;) - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.4:8080);) - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.20 && tcp.dst == 80), action=(reg1 = 10.0.0.20; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.40:8080);) + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.4:8080);) + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.20 && tcp.dst == 80), action=(reg4 = 10.0.0.20; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.40:8080);) ]) AT_CHECK([grep "ls_in_stateful" sw0flows | ovn_strip_lflows], [0], [dnl @@ -4780,7 +4780,7 @@ check ovn-nbctl --wait=sb ls-lb-add sw0 lb1 AT_CHECK([ovn-sbctl dump-flows sw0 | grep "ls_in_lb " | ovn_strip_lflows ], [0], [dnl table=??(ls_in_lb ), priority=0 , match=(1), action=(next;) table=??(ls_in_lb ), priority=110 , match=(ct.new && ip4.dst == 10.0.0.20), action=(drop;) - table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) + table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); reg2[[0..15]] = ct_tp_dst(); next;) ]) @@ -7842,8 +7842,8 @@ AT_CHECK([grep -e "ls_in_acl.*eval" -e "ls_in_acl_hint" lsflows | ovn_strip_lflo AT_CHECK([grep -e "ls_in_lb " lsflows | ovn_strip_lflows], [0], [dnl table=??(ls_in_lb ), priority=0 , match=(1), action=(next;) - table=??(ls_in_lb ), priority=110 , match=(ct.new && ip4.dst == 10.0.0.2), action=(reg1 = 10.0.0.2; ct_lb_mark(backends=10.0.0.10);) - table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) + table=??(ls_in_lb ), priority=110 , match=(ct.new && ip4.dst == 10.0.0.2), action=(reg4 = 10.0.0.2; ct_lb_mark(backends=10.0.0.10);) + table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); reg2[[0..15]] = ct_tp_dst(); next;) ]) @@ -7899,8 +7899,8 @@ AT_CHECK([grep -e "ls_in_acl.*eval" -e "ls_in_acl_hint" lsflows | ovn_strip_lflo AT_CHECK([grep -e "ls_in_lb " lsflows | ovn_strip_lflows], [0], [dnl table=??(ls_in_lb ), priority=0 , match=(1), action=(next;) - table=??(ls_in_lb ), priority=110 , match=(ct.new && ip4.dst == 10.0.0.2), action=(reg1 = 10.0.0.2; ct_lb_mark(backends=10.0.0.10);) - table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) + table=??(ls_in_lb ), priority=110 , match=(ct.new && ip4.dst == 10.0.0.2), action=(reg4 = 10.0.0.2; ct_lb_mark(backends=10.0.0.10);) + table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); reg2[[0..15]] = ct_tp_dst(); next;) ]) @@ -7956,8 +7956,8 @@ AT_CHECK([grep -e "ls_in_acl.*eval" -e "ls_in_acl_hint" lsflows | ovn_strip_lflo AT_CHECK([grep -e "ls_in_lb " lsflows | ovn_strip_lflows], [0], [dnl table=??(ls_in_lb ), priority=0 , match=(1), action=(next;) - table=??(ls_in_lb ), priority=110 , match=(ct.new && ip4.dst == 10.0.0.2), action=(reg1 = 10.0.0.2; ct_lb_mark(backends=10.0.0.10);) - table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) + table=??(ls_in_lb ), priority=110 , match=(ct.new && ip4.dst == 10.0.0.2), action=(reg4 = 10.0.0.2; ct_lb_mark(backends=10.0.0.10);) + table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); reg2[[0..15]] = ct_tp_dst(); next;) ]) @@ -9345,13 +9345,13 @@ AT_CAPTURE_FILE([S1flows]) AT_CHECK([grep "ls_in_lb " S0flows | ovn_strip_lflows], [0], [dnl table=??(ls_in_lb ), priority=0 , match=(1), action=(next;) - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg1 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80);) - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 172.16.0.11 && tcp.dst == 8080), action=(reg1 = 172.16.0.11; reg2[[0..15]] = 8080; ct_lb_mark(backends=10.0.0.2:8080);) + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg4 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80);) + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 172.16.0.11 && tcp.dst == 8080), action=(reg4 = 172.16.0.11; reg2[[0..15]] = 8080; ct_lb_mark(backends=10.0.0.2:8080);) ]) AT_CHECK([grep "ls_in_lb " S1flows | ovn_strip_lflows], [0], [dnl table=??(ls_in_lb ), priority=0 , match=(1), action=(next;) - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg1 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80);) - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 172.16.0.11 && tcp.dst == 8080), action=(reg1 = 172.16.0.11; reg2[[0..15]] = 8080; ct_lb_mark(backends=10.0.0.2:8080);) + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg4 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80);) + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 172.16.0.11 && tcp.dst == 8080), action=(reg4 = 172.16.0.11; reg2[[0..15]] = 8080; ct_lb_mark(backends=10.0.0.2:8080);) ]) ovn-sbctl get datapath S0 _uuid > dp_uuids @@ -9477,20 +9477,20 @@ AT_CAPTURE_FILE([S0flows]) AT_CHECK([grep "ls_in_lb_aff_check" S0flows | ovn_strip_lflows], [0], [dnl table=??(ls_in_lb_aff_check ), priority=0 , match=(1), action=(next;) - table=??(ls_in_lb_aff_check ), priority=100 , match=(ct.new && ip4 && reg1 == 172.16.0.10 && reg2[[0..15]] == 80), action=(reg9[[6]] = chk_lb_aff(); next;) + table=??(ls_in_lb_aff_check ), priority=100 , match=(ct.new && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(reg9[[6]] = chk_lb_aff(); next;) ]) AT_CHECK([grep "ls_in_lb " S0flows | ovn_strip_lflows], [0], [dnl table=??(ls_in_lb ), priority=0 , match=(1), action=(next;) - table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg1 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) + table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip4), action=(reg4 = ct_nw_dst(); reg2[[0..15]] = ct_tp_dst(); next;) table=??(ls_in_lb ), priority=110 , match=(ct.trk && !ct.rpl && reg0[[19]] == 1 && ip6), action=(xxreg1 = ct_ip6_dst(); reg2[[0..15]] = ct_tp_dst(); next;) - table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg1 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80);) - table=??(ls_in_lb ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg8[[0..15]] == 80), action=(reg1 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80);) - table=??(ls_in_lb ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg8[[0..15]] == 80), action=(reg1 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=20.0.0.2:80);) + table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 172.16.0.10 && tcp.dst == 80), action=(reg4 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80);) + table=??(ls_in_lb ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg2[[0..15]] == 80), action=(reg4 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80);) + table=??(ls_in_lb ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg2[[0..15]] == 80), action=(reg4 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=20.0.0.2:80);) ]) AT_CHECK([grep "ls_in_lb_aff_learn" S0flows | ovn_strip_lflows], [0], [dnl table=??(ls_in_lb_aff_learn ), priority=0 , match=(1), action=(next;) - table=??(ls_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == 0 && ct.new && ip4 && reg1 == 172.16.0.10 && reg2[[0..15]] == 80 && ip4.dst == 10.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = "172.16.0.10:80", backend = "10.0.0.2:80", proto = tcp, timeout = 60); /* drop */) - table=??(ls_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == 0 && ct.new && ip4 && reg1 == 172.16.0.10 && reg2[[0..15]] == 80 && ip4.dst == 20.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = "172.16.0.10:80", backend = "20.0.0.2:80", proto = tcp, timeout = 60); /* drop */) + table=??(ls_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == 0 && ct.new && ip4 && reg4 == 172.16.0.10 && reg2[[0..15]] == 80 && ip4.dst == 10.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = "172.16.0.10:80", backend = "10.0.0.2:80", proto = tcp, timeout = 60); /* drop */) + table=??(ls_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == 0 && ct.new && ip4 && reg4 == 172.16.0.10 && reg2[[0..15]] == 80 && ip4.dst == 20.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = "172.16.0.10:80", backend = "20.0.0.2:80", proto = tcp, timeout = 60); /* drop */) ]) AS_BOX([Test LR flows]) @@ -9499,13 +9499,13 @@ AT_CAPTURE_FILE([R1flows]) AT_CHECK([grep "lr_in_lb_aff_check" R1flows | ovn_strip_lflows], [0], [dnl table=??(lr_in_lb_aff_check ), priority=0 , match=(1), action=(next;) - table=??(lr_in_lb_aff_check ), priority=100 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(reg0 = ip4.dst; reg9[[16..31]] = tcp.dst; reg9[[6]] = chk_lb_aff(); next;) + table=??(lr_in_lb_aff_check ), priority=100 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(reg9[[6]] = chk_lb_aff(); next;) ]) AT_CHECK([grep "lr_in_dnat " R1flows | ovn_strip_lflows], [0], [dnl table=??(lr_in_dnat ), priority=0 , match=(1), action=(next;) - table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80);) - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; ct_lb_mark(backends=10.0.0.2:80);) - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; ct_lb_mark(backends=20.0.0.2:80);) + table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(reg4 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80);) + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg2[[0..15]] == 80), action=(ct_lb_mark(backends=10.0.0.2:80);) + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg2[[0..15]] == 80), action=(ct_lb_mark(backends=20.0.0.2:80);) table=??(lr_in_dnat ), priority=50 , match=(ct.est && !ct.rel && !ct.new && !ct.rpl && ct_mark.natted), action=(next;) table=??(lr_in_dnat ), priority=50 , match=(ct.rel && !ct.est && !ct.new && !ct.rpl), action=(ct_commit_nat;) table=??(lr_in_dnat ), priority=70 , match=(ct.est && !ct.rel && !ct.new && !ct.rpl && ct_mark.natted && ct_mark.force_snat == 1), action=(flags.force_snat_for_lb = 1; next;) @@ -9515,8 +9515,8 @@ AT_CHECK([grep "lr_in_dnat " R1flows | ovn_strip_lflows], [0], [dnl ]) AT_CHECK([grep "lr_in_lb_aff_learn" R1flows | ovn_strip_lflows], [0], [dnl table=??(lr_in_lb_aff_learn ), priority=0 , match=(1), action=(next;) - table=??(lr_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == 0 && ct.new && ip4 && reg0 == 172.16.0.10 && reg9[[16..31]] == 80 && ip4.dst == 10.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = "172.16.0.10:80", backend = "10.0.0.2:80", proto = tcp, timeout = 60); /* drop */) - table=??(lr_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == 0 && ct.new && ip4 && reg0 == 172.16.0.10 && reg9[[16..31]] == 80 && ip4.dst == 20.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = "172.16.0.10:80", backend = "20.0.0.2:80", proto = tcp, timeout = 60); /* drop */) + table=??(lr_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == 0 && ct.new && ip4 && reg4 == 172.16.0.10 && reg2[[0..15]] == 80 && ip4.dst == 10.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = "172.16.0.10:80", backend = "10.0.0.2:80", proto = tcp, timeout = 60); /* drop */) + table=??(lr_in_lb_aff_learn ), priority=100 , match=(reg9[[6]] == 0 && ct.new && ip4 && reg4 == 172.16.0.10 && reg2[[0..15]] == 80 && ip4.dst == 20.0.0.2 && tcp.dst == 80), action=(commit_lb_aff(vip = "172.16.0.10:80", backend = "20.0.0.2:80", proto = tcp, timeout = 60); /* drop */) ]) AS_BOX([Test LR flows - skip_snat=true]) @@ -9527,9 +9527,9 @@ AT_CAPTURE_FILE([R1flows_skip_snat]) AT_CHECK([grep "lr_in_dnat " R1flows_skip_snat | ovn_strip_lflows], [0], [dnl table=??(lr_in_dnat ), priority=0 , match=(1), action=(next;) - table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; skip_snat);) - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; flags.skip_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; skip_snat);) + table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(flags.skip_snat_for_lb = 1; reg4 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; skip_snat);) + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; skip_snat);) table=??(lr_in_dnat ), priority=50 , match=(ct.est && !ct.rel && !ct.new && !ct.rpl && ct_mark.natted), action=(next;) table=??(lr_in_dnat ), priority=50 , match=(ct.rel && !ct.est && !ct.new && !ct.rpl), action=(ct_commit_nat;) table=??(lr_in_dnat ), priority=70 , match=(ct.est && !ct.rel && !ct.new && !ct.rpl && ct_mark.natted && ct_mark.force_snat == 1), action=(flags.force_snat_for_lb = 1; next;) @@ -9548,9 +9548,9 @@ AT_CAPTURE_FILE([R1flows_force_snat]) AT_CHECK([grep "lr_in_dnat " R1flows_force_snat | ovn_strip_lflows], [0], [dnl table=??(lr_in_dnat ), priority=0 , match=(1), action=(next;) - table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(flags.force_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; force_snat);) - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; flags.force_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; force_snat);) - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; flags.force_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; force_snat);) + table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(flags.force_snat_for_lb = 1; reg4 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; force_snat);) + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg2[[0..15]] == 80), action=(flags.force_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; force_snat);) + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg2[[0..15]] == 80), action=(flags.force_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; force_snat);) table=??(lr_in_dnat ), priority=50 , match=(ct.est && !ct.rel && !ct.new && !ct.rpl && ct_mark.natted), action=(next;) table=??(lr_in_dnat ), priority=50 , match=(ct.rel && !ct.est && !ct.new && !ct.rpl), action=(ct_commit_nat;) table=??(lr_in_dnat ), priority=70 , match=(ct.est && !ct.rel && !ct.new && !ct.rpl && ct_mark.natted && ct_mark.force_snat == 1), action=(flags.force_snat_for_lb = 1; next;) @@ -9568,9 +9568,9 @@ AT_CAPTURE_FILE([R1flows_force_skip_snat]) AT_CHECK([grep "lr_in_dnat " R1flows_force_skip_snat | ovn_strip_lflows], [0], [dnl table=??(lr_in_dnat ), priority=0 , match=(1), action=(next;) - table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; skip_snat);) - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; flags.skip_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; skip_snat);) + table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(flags.skip_snat_for_lb = 1; reg4 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; skip_snat);) + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; skip_snat);) table=??(lr_in_dnat ), priority=50 , match=(ct.est && !ct.rel && !ct.new && !ct.rpl && ct_mark.natted), action=(next;) table=??(lr_in_dnat ), priority=50 , match=(ct.rel && !ct.est && !ct.new && !ct.rpl), action=(ct_commit_nat;) table=??(lr_in_dnat ), priority=70 , match=(ct.est && !ct.rel && !ct.new && !ct.rpl && ct_mark.natted && ct_mark.force_snat == 1), action=(flags.force_snat_for_lb = 1; next;) @@ -9592,12 +9592,12 @@ AT_CAPTURE_FILE([R1flows_2lbs]) AT_CHECK([grep "lr_in_dnat " R1flows_2lbs | ovn_strip_lflows], [0], [dnl table=??(lr_in_dnat ), priority=0 , match=(1), action=(next;) - table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) - table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.20 && tcp && tcp.dst == 80), action=(flags.force_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; force_snat);) - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; skip_snat);) - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.10; flags.skip_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; skip_snat);) - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.20 && reg4 == 10.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.20; flags.force_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; force_snat);) - table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.20 && reg4 == 20.0.0.2 && reg8[[0..15]] == 80), action=(reg0 = 172.16.0.20; flags.force_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; force_snat);) + table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.10 && tcp && tcp.dst == 80), action=(flags.skip_snat_for_lb = 1; reg4 = 172.16.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; skip_snat);) + table=??(lr_in_dnat ), priority=120 , match=(ct.new && !ct.rel && ip4 && ip4.dst == 172.16.0.20 && tcp && tcp.dst == 80), action=(flags.force_snat_for_lb = 1; reg4 = 172.16.0.20; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.2:80,20.0.0.2:80; force_snat);) + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 10.0.0.2 && reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; skip_snat);) + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.10 && reg4 == 20.0.0.2 && reg2[[0..15]] == 80), action=(flags.skip_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; skip_snat);) + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.20 && reg4 == 10.0.0.2 && reg2[[0..15]] == 80), action=(flags.force_snat_for_lb = 1; ct_lb_mark(backends=10.0.0.2:80; force_snat);) + table=??(lr_in_dnat ), priority=150 , match=(reg9[[6]] == 1 && ct.new && ip4.dst == 172.16.0.20 && reg4 == 20.0.0.2 && reg2[[0..15]] == 80), action=(flags.force_snat_for_lb = 1; ct_lb_mark(backends=20.0.0.2:80; force_snat);) table=??(lr_in_dnat ), priority=50 , match=(ct.est && !ct.rel && !ct.new && !ct.rpl && ct_mark.natted), action=(next;) table=??(lr_in_dnat ), priority=50 , match=(ct.rel && !ct.est && !ct.new && !ct.rpl), action=(ct_commit_nat;) table=??(lr_in_dnat ), priority=70 , match=(ct.est && !ct.rel && !ct.new && !ct.rpl && ct_mark.natted && ct_mark.force_snat == 1), action=(flags.force_snat_for_lb = 1; next;) @@ -14058,10 +14058,10 @@ ovn-sbctl dump-flows s1 > s1flows AT_CAPTURE_FILE([s1flows]) AT_CHECK([grep "ls_in_pre_stateful" s1flows | ovn_strip_lflows | grep "30.0.0.1"], [0], [dnl - table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 30.0.0.1), action=(reg1 = 30.0.0.1; ct_lb_mark;) + table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 30.0.0.1), action=(reg4 = 30.0.0.1; ct_lb_mark;) ]) AT_CHECK([grep "ls_in_lb" s1flows | ovn_strip_lflows | grep "30.0.0.1"], [0], [dnl - table=??(ls_in_lb ), priority=110 , match=(ct.new && ip4.dst == 30.0.0.1), action=(reg1 = 30.0.0.1; ct_lb_mark(backends=172.16.0.103,172.16.0.102,172.16.0.101);) + table=??(ls_in_lb ), priority=110 , match=(ct.new && ip4.dst == 30.0.0.1), action=(reg4 = 30.0.0.1; ct_lb_mark(backends=172.16.0.103,172.16.0.102,172.16.0.101);) ]) # Associate load balancer to lr1 with DGP @@ -14283,10 +14283,10 @@ ovn-sbctl dump-flows s1 > s1flows AT_CAPTURE_FILE([s1flows]) AT_CHECK([grep "ls_in_pre_stateful" s1flows | ovn_strip_lflows | grep "30.0.0.1"], [0], [dnl - table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 30.0.0.1), action=(reg1 = 30.0.0.1; ct_lb_mark;) + table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 30.0.0.1), action=(reg4 = 30.0.0.1; ct_lb_mark;) ]) AT_CHECK([grep "ls_in_lb" s1flows | ovn_strip_lflows | grep "30.0.0.1"], [0], [dnl - table=??(ls_in_lb ), priority=110 , match=(ct.new && ip4.dst == 30.0.0.1), action=(reg1 = 30.0.0.1; ct_lb_mark(backends=172.16.0.103,172.16.0.102,172.16.0.101);) + table=??(ls_in_lb ), priority=110 , match=(ct.new && ip4.dst == 30.0.0.1), action=(reg4 = 30.0.0.1; ct_lb_mark(backends=172.16.0.103,172.16.0.102,172.16.0.101);) ]) # Associate load balancer to lr1 with DGP diff --git a/tests/ovn.at b/tests/ovn.at index b49a63f3e..e9144b0cd 100644 --- a/tests/ovn.at +++ b/tests/ovn.at @@ -2161,13 +2161,13 @@ reg9[[5]] = chk_ecmp_nh(); # commit_lb_aff commit_lb_aff(vip = "172.16.0.123:8080", backend = "10.0.0.3:8080", proto = tcp, timeout = 30); - encodes as learn(table=OFTABLE_CHK_LB_AFFINITY,idle_timeout=30,delete_learned,cookie=0xaaaaaaaa,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=172.16.0.123,nw_proto=6,tcp_dst=8080,load:0x1->NXM_NX_REG10[[14]],load:0xa000003->NXM_NX_REG4[[]],load:0x1f90->NXM_NX_REG8[[0..15]]) + encodes as learn(table=OFTABLE_CHK_LB_AFFINITY,idle_timeout=30,delete_learned,cookie=0xaaaaaaaa,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=172.16.0.123,nw_proto=6,tcp_dst=8080,load:0x1->NXM_NX_REG10[[14]],load:0xa000003->NXM_NX_REG4[[]],load:0x1f90->NXM_NX_REG2[[0..15]]) commit_lb_aff(vip = "172.16.0.123", backend = "10.0.0.3", timeout = 30); encodes as learn(table=OFTABLE_CHK_LB_AFFINITY,idle_timeout=30,delete_learned,cookie=0xaaaaaaaa,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=172.16.0.123,load:0x1->NXM_NX_REG10[[14]],load:0xa000003->NXM_NX_REG4[[]]) commit_lb_aff(vip = "[[::1]]:8080", backend = "[[::2]]:8080", proto = tcp, timeout = 30); - encodes as learn(table=OFTABLE_CHK_LB_AFFINITY,idle_timeout=30,delete_learned,cookie=0xaaaaaaaa,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=::1,nw_proto=6,tcp_dst=8080,load:0x1->NXM_NX_REG10[[14]],load:0x2->NXM_NX_XXREG0[[]],load:0x1f90->NXM_NX_REG8[[0..15]]) + encodes as learn(table=OFTABLE_CHK_LB_AFFINITY,idle_timeout=30,delete_learned,cookie=0xaaaaaaaa,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=::1,nw_proto=6,tcp_dst=8080,load:0x1->NXM_NX_REG10[[14]],load:0x2->NXM_NX_XXREG1[[]],load:0x1f90->NXM_NX_REG2[[0..15]]) # chk_lb_aff() reg9[[6]] = chk_lb_aff(); @@ -25576,8 +25576,8 @@ OVS_WAIT_FOR_OUTPUT( [ovn-sbctl dump-flows > sbflows ovn-sbctl dump-flows sw0 | grep ct_lb_mark | grep priority=120 | sed 's/table=..//'], 0, [dnl - (ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark;) - (ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80; hash_fields="ip_dst,ip_src,tcp_dst,tcp_src");) + (ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark;) + (ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark(backends=10.0.0.3:80,20.0.0.3:80; hash_fields="ip_dst,ip_src,tcp_dst,tcp_src");) ]) AT_CAPTURE_FILE([sbflows2]) @@ -25621,7 +25621,7 @@ AT_CHECK( [grep "ip4.dst == 10.0.0.10 && tcp.dst == 80" sbflows3 | grep priority=120 |\ ovn_strip_lflows], [0], [dnl table=??(ls_in_lb ), priority=120 , match=(ct.new && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(drop;) - table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg1 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark;) + table=??(ls_in_pre_stateful ), priority=120 , match=(reg0[[2]] == 1 && ip4.dst == 10.0.0.10 && tcp.dst == 80), action=(reg4 = 10.0.0.10; reg2[[0..15]] = 80; ct_lb_mark;) ]) AT_CAPTURE_FILE([sbflows4]) @@ -30627,7 +30627,7 @@ OVS_WAIT_UNTIL( ) AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) ]) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY], [0], [dnl @@ -30635,7 +30635,7 @@ NXST_FLOW reply (xid=0x8): ]) AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) ]) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | grep -v NXST], [1], [dnl @@ -30654,9 +30654,9 @@ OVS_WAIT_UNTIL( ) AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) ]) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY], [0], [dnl @@ -30664,8 +30664,8 @@ NXST_FLOW reply (xid=0x8): ]) AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) ]) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | grep -v NXST], [1], [dnl @@ -30687,17 +30687,17 @@ OVS_WAIT_UNTIL( ) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) ]) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY | grep -v NXST], [1], [dnl ]) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) ]) check ovn-nbctl --wait=hv ls-lb-add sw0 lb-ipv4-udp @@ -30711,35 +30711,35 @@ OVS_WAIT_UNTIL( ) AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) ]) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY | grep -v NXST], [1], [dnl ]) AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) ]) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) ]) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY | grep -v NXST], [1], [dnl ]) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) ]) check ovn-nbctl --wait=hv ls-lb-add sw0 lb-ipv6-tcp @@ -30753,39 +30753,39 @@ OVS_WAIT_UNTIL( ) AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) ]) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY | grep -v NXST], [1], [dnl ]) AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) ]) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) ]) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY | grep -v NXST], [1], [dnl ]) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) ]) check ovn-nbctl --wait=hv ls-lb-add sw0 lb-ipv6-udp @@ -30799,11 +30799,11 @@ OVS_WAIT_UNTIL( ) AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) ]) @@ -30811,19 +30811,19 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY ]) AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) ]) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) ]) @@ -30831,10 +30831,10 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY ]) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) ]) @@ -30851,11 +30851,11 @@ OVS_WAIT_UNTIL( ) AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) ]) @@ -30863,19 +30863,19 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY ]) AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) ]) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) ]) @@ -30883,10 +30883,10 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY ]) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) ]) @@ -30900,12 +30900,12 @@ OVS_WAIT_UNTIL( ) AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,ip,reg1=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,ip,reg4=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) ]) @@ -30913,21 +30913,21 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY ]) AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg1=0x58585859 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg4=0x58585859 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) ]) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,ip,reg1=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,ip,reg4=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) ]) @@ -30935,12 +30935,12 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY ]) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg1=0x58585859 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg4=0x58585859 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) ]) check ovn-nbctl --wait=hv ls-lb-add sw0 lb-ipv6 @@ -30953,13 +30953,13 @@ OVS_WAIT_UNTIL( ) AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,ip,reg1=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,ip,reg4=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,ipv6,reg4=0x88000000,reg5=0,reg6=0,reg7=0x89,ipv6_src=4200::2,ipv6_dst=4200::2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) ]) @@ -30967,23 +30967,23 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY ]) AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg1=0x58585859 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg4=0x58585859 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ipv6,reg4=0x88000000,reg5=0,reg6=0,reg7=0x89 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::89)) ]) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,ip,reg1=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,ip,reg4=0x58585859,nw_src=42.42.42.2,nw_dst=42.42.42.2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,ipv6,reg4=0x88000000,reg5=0,reg6=0,reg7=0x89,ipv6_src=4200::2,ipv6_dst=4200::2 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::89,NXM_OF_IP_PROTO[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x58585858,reg2=0x1f90/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=42.42.42.42,nw_dst=42.42.42.42,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a,nw_src=52.52.52.52,nw_dst=52.52.52.52,tp_dst=4042 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.90,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) ]) @@ -30991,12 +30991,12 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN_REPLY ]) AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp,reg2=0x1f90/0xffff,reg4=0x5858585a actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90)) table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg1=0x58585859 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ip,reg4=0x58585859 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89)) table=OFTABLE_CT_SNAT_HAIRPIN, priority=90,ipv6,reg4=0x88000000,reg5=0,reg6=0,reg7=0x89 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::89)) ]) @@ -31093,7 +31093,7 @@ OVS_WAIT_UNTIL( AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=4041 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg1=0x58585858,reg2=0xfc8/0xffff,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp,reg2=0xfc8/0xffff,reg4=0x58585858,nw_src=42.42.42.1,nw_dst=42.42.42.1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=88.88.88.88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88,ipv6_src=4200::1,ipv6_dst=4200::1,tp_dst=2021 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x86dd,NXM_NX_IPV6_SRC[[]],ipv6_dst=8800::88,nw_proto=17,NXM_OF_UDP_SRC[[]]=NXM_OF_UDP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) ]) @@ -31103,7 +31103,7 @@ NXST_FLOW reply (xid=0x8): AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_CT_SNAT_HAIRPIN | ofctl_strip_all | grep -v NXST], [0], [dnl table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,tcp6,reg2=0x1f90/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) - table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) + table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp,reg2=0xfc8/0xffff,reg4=0x58585858 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88)) table=OFTABLE_CT_SNAT_HAIRPIN, priority=100,udp6,reg2=0xfc8/0xffff,reg4=0x88000000,reg5=0,reg6=0,reg7=0x88 actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::88)) ]) @@ -36078,15 +36078,15 @@ AT_CHECK([ovs-ofctl dump-groups br-int | grep 'nat(dst=85.85.85.44:8504)' -c], [ dnl Ensure hairpin flows are correct. as hv1 AT_CHECK([ovs-ofctl dump-flows br-int | grep table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all], [0], [dnl - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b01,reg2=0x10cd/0xffff,nw_src=85.85.85.1,nw_dst=85.85.85.1,tp_dst=8501 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.1,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b02,reg2=0x10ce/0xffff,nw_src=85.85.85.21,nw_dst=85.85.85.21,tp_dst=8502 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b02,reg2=0x10ce/0xffff,nw_src=85.85.85.22,nw_dst=85.85.85.22,tp_dst=8502 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b03,reg2=0x10cf/0xffff,nw_src=85.85.85.31,nw_dst=85.85.85.31,tp_dst=8503 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b03,reg2=0x10cf/0xffff,nw_src=85.85.85.32,nw_dst=85.85.85.32,tp_dst=8503 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b04,reg2=0x10d0/0xffff,nw_src=85.85.85.41,nw_dst=85.85.85.41,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b04,reg2=0x10d0/0xffff,nw_src=85.85.85.42,nw_dst=85.85.85.42,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b04,reg2=0x10d0/0xffff,nw_src=85.85.85.43,nw_dst=85.85.85.43,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2b2b2b04,reg2=0x10d0/0xffff,nw_src=85.85.85.44,nw_dst=85.85.85.44,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10cd/0xffff,reg4=0x2b2b2b01,nw_src=85.85.85.1,nw_dst=85.85.85.1,tp_dst=8501 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.1,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=68, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10ce/0xffff,reg4=0x2b2b2b02,nw_src=85.85.85.21,nw_dst=85.85.85.21,tp_dst=8502 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=68, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10ce/0xffff,reg4=0x2b2b2b02,nw_src=85.85.85.22,nw_dst=85.85.85.22,tp_dst=8502 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=68, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10cf/0xffff,reg4=0x2b2b2b03,nw_src=85.85.85.31,nw_dst=85.85.85.31,tp_dst=8503 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=68, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10cf/0xffff,reg4=0x2b2b2b03,nw_src=85.85.85.32,nw_dst=85.85.85.32,tp_dst=8503 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=68, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10d0/0xffff,reg4=0x2b2b2b04,nw_src=85.85.85.41,nw_dst=85.85.85.41,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=68, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10d0/0xffff,reg4=0x2b2b2b04,nw_src=85.85.85.42,nw_dst=85.85.85.42,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=68, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10d0/0xffff,reg4=0x2b2b2b04,nw_src=85.85.85.43,nw_dst=85.85.85.43,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=68, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x10d0/0xffff,reg4=0x2b2b2b04,nw_src=85.85.85.44,nw_dst=85.85.85.44,tp_dst=8504 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=69,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=43.43.43.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) ]) dnl Change Chassis_Template_Var mappings @@ -36137,15 +36137,15 @@ AT_CHECK([ovs-ofctl dump-groups br-int | grep 'nat(dst=84.84.84.44:8404)' -c], [ dnl Ensure hairpin flows are correct. as hv1 AT_CHECK([ovs-ofctl dump-flows br-int | grep table=OFTABLE_CHK_LB_HAIRPIN | ofctl_strip_all], [0], [dnl - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a01,reg2=0x1069/0xffff,nw_src=84.84.84.1,nw_dst=84.84.84.1,tp_dst=8401 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.1,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a02,reg2=0x106a/0xffff,nw_src=84.84.84.21,nw_dst=84.84.84.21,tp_dst=8402 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a02,reg2=0x106a/0xffff,nw_src=84.84.84.22,nw_dst=84.84.84.22,tp_dst=8402 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a03,reg2=0x106b/0xffff,nw_src=84.84.84.31,nw_dst=84.84.84.31,tp_dst=8403 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a03,reg2=0x106b/0xffff,nw_src=84.84.84.32,nw_dst=84.84.84.32,tp_dst=8403 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a04,reg2=0x106c/0xffff,nw_src=84.84.84.41,nw_dst=84.84.84.41,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a04,reg2=0x106c/0xffff,nw_src=84.84.84.42,nw_dst=84.84.84.42,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a04,reg2=0x106c/0xffff,nw_src=84.84.84.43,nw_dst=84.84.84.43,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) - table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg1=0x2a2a2a04,reg2=0x106c/0xffff,nw_src=84.84.84.44,nw_dst=84.84.84.44,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x1069/0xffff,reg4=0x2a2a2a01,nw_src=84.84.84.1,nw_dst=84.84.84.1,tp_dst=8401 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.1,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106a/0xffff,reg4=0x2a2a2a02,nw_src=84.84.84.21,nw_dst=84.84.84.21,tp_dst=8402 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106a/0xffff,reg4=0x2a2a2a02,nw_src=84.84.84.22,nw_dst=84.84.84.22,tp_dst=8402 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.2,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106b/0xffff,reg4=0x2a2a2a03,nw_src=84.84.84.31,nw_dst=84.84.84.31,tp_dst=8403 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106b/0xffff,reg4=0x2a2a2a03,nw_src=84.84.84.32,nw_dst=84.84.84.32,tp_dst=8403 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.3,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106c/0xffff,reg4=0x2a2a2a04,nw_src=84.84.84.41,nw_dst=84.84.84.41,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106c/0xffff,reg4=0x2a2a2a04,nw_src=84.84.84.42,nw_dst=84.84.84.42,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106c/0xffff,reg4=0x2a2a2a04,nw_src=84.84.84.43,nw_dst=84.84.84.43,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) + table=OFTABLE_CHK_LB_HAIRPIN, priority=100,ct_mark=0x2/0x2,tcp,reg2=0x106c/0xffff,reg4=0x2a2a2a04,nw_src=84.84.84.44,nw_dst=84.84.84.44,tp_dst=8404 actions=load:0x1->NXM_NX_REG10[[7]],learn(table=OFTABLE_CHK_LB_HAIRPIN_REPLY,delete_learned,OXM_OF_METADATA[[]],eth_type=0x800,NXM_OF_IP_SRC[[]],ip_dst=42.42.42.4,nw_proto=6,NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],load:0x1->NXM_NX_REG10[[7]]) ]) dnl Remove Chassis_Template_Variables and check that everything is diff --git a/tests/system-ovn-kmod.at b/tests/system-ovn-kmod.at index 170024a61..f7745b979 100644 --- a/tests/system-ovn-kmod.at +++ b/tests/system-ovn-kmod.at @@ -151,12 +151,12 @@ tcp,orig=(src=172.16.1.2,dst=172.16.1.100,sport=<cleared>,dport=<cleared>),reply dp_key=$(printf "0x%x" $(fetch_column datapath tunnel_key external_ids:name=R2)) AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_AFFINITY --no-stats | strip_cookie | sed -e 's/load:0xc0a80[[0-9]]02/load:0xc0a80<cleared>02/'], [0], [dnl - table=OFTABLE_CHK_LB_AFFINITY, idle_timeout=60, tcp,metadata=$dp_key,nw_src=172.16.1.2,nw_dst=172.16.1.100,tp_dst=8080 actions=load:0x1->NXM_NX_REG10[[14]],load:0xc0a80<cleared>02->NXM_NX_REG4[[]],load:0x50->NXM_NX_REG8[[0..15]] + table=OFTABLE_CHK_LB_AFFINITY, idle_timeout=60, tcp,metadata=$dp_key,nw_src=172.16.1.2,nw_dst=172.16.1.100,tp_dst=8080 actions=load:0x1->NXM_NX_REG10[[14]],load:0xc0a80<cleared>02->NXM_NX_REG4[[]],load:0x50->NXM_NX_REG2[[0..15]] ]) check_affinity_flows () { -n1=$(ovs-ofctl dump-flows br-int table=$dnat |awk '/priority=150,ct_state=\+new\+trk,ip,reg4=0xc0a80102,.*nw_dst=172.16.1.100/{print substr($4,11,length($4)-11)}') -n2=$(ovs-ofctl dump-flows br-int table=$dnat |awk '/priority=150,ct_state=\+new\+trk,ip,reg4=0xc0a80202,.*nw_dst=172.16.1.100/{print substr($4,11,length($4)-11)}') +n1=$(ovs-ofctl dump-flows br-int table=$dnat |awk '/priority=150,ct_state=\+new\+trk,ip,reg2=0x50\/0xffff,reg4=0xc0a80102,.*nw_dst=172.16.1.100/{print substr($4,11,length($4)-11)}') +n2=$(ovs-ofctl dump-flows br-int table=$dnat |awk '/priority=150,ct_state=\+new\+trk,ip,reg2=0x50\/0xffff,reg4=0xc0a80202,.*nw_dst=172.16.1.100/{print substr($4,11,length($4)-11)}') [[ $n1 -gt 0 -a $n2 -eq 0 ]] || [[ $n1 -eq 0 -a $n2 -gt 0 ]] echo $? } @@ -452,12 +452,12 @@ tcp,orig=(src=fd72::2,dst=fd30::1,sport=<cleared>,dport=<cleared>),reply=(src=fd dp_key=$(printf "0x%x" $(fetch_column datapath tunnel_key external_ids:name=R2)) AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_CHK_LB_AFFINITY --no-stats | strip_cookie | sed -e 's/load:0xfd1[[0-9]]000000000000/load:0xfd1<cleared>000000000000/'], [0], [dnl - table=OFTABLE_CHK_LB_AFFINITY, idle_timeout=60, tcp6,metadata=$dp_key,ipv6_src=fd72::2,ipv6_dst=fd30::1,tp_dst=8080 actions=load:0x1->NXM_NX_REG10[[14]],load:0x2->NXM_NX_XXREG1[[0..63]],load:0xfd1<cleared>000000000000->NXM_NX_XXREG1[[64..127]],load:0x50->NXM_NX_REG8[[0..15]] + table=OFTABLE_CHK_LB_AFFINITY, idle_timeout=60, tcp6,metadata=$dp_key,ipv6_src=fd72::2,ipv6_dst=fd30::1,tp_dst=8080 actions=load:0x1->NXM_NX_REG10[[14]],load:0x2->NXM_NX_XXREG1[[0..63]],load:0xfd1<cleared>000000000000->NXM_NX_XXREG1[[64..127]],load:0x50->NXM_NX_REG2[[0..15]] ]) check_affinity_flows () { -n1=$(ovs-ofctl dump-flows br-int table=$dnat |awk '/priority=150,ct_state=\+new\+trk,ipv6,reg4=0xfd110000,.*ipv6_dst=fd30::1\s/{print substr($4,11,length($4)-11)}') -n2=$(ovs-ofctl dump-flows br-int table=$dnat |awk '/priority=150,ct_state=\+new\+trk,ipv6,reg4=0xfd120000,.*ipv6_dst=fd30::1\s/{print substr($4,11,length($4)-11)}') +n1=$(ovs-ofctl dump-flows br-int table=$dnat |awk '/priority=150,ct_state=\+new\+trk,ipv6,reg2=0x50\/0xffff,reg4=0xfd110000,.*ipv6_dst=fd30::1\s/{print substr($4,11,length($4)-11)}') +n2=$(ovs-ofctl dump-flows br-int table=$dnat |awk '/priority=150,ct_state=\+new\+trk,ipv6,reg2=0x50\/0xffff,reg4=0xfd120000,.*ipv6_dst=fd30::1\s/{print substr($4,11,length($4)-11)}') [[ $n1 -gt 0 -a $n2 -eq 0 ]] || [[ $n1 -eq 0 -a $n2 -gt 0 ]] echo $? }
We were running out of space in registers. After the consolidation there are several registers are free to use once again. The consolidation is mainly done by reusing single register for LB affinity flows. Signed-off-by: Ales Musil <amusil@redhat.com> --- include/ovn/logical-fields.h | 7 +- lib/actions.c | 6 +- northd/northd.c | 254 +++++++++++++--------------------- tests/ovn-northd.at | 126 ++++++++--------- tests/ovn.at | 258 +++++++++++++++++------------------ tests/system-ovn-kmod.at | 12 +- 6 files changed, 297 insertions(+), 366 deletions(-)