On 3/24/23 09:49, Ales Musil wrote:
> On Mon, Mar 20, 2023 at 11:57 PM Lorenzo Bianconi <
> lorenzo.bianc...@redhat.com> wrote:
> 
>> Fix non-tcp haripin use-case if the load-balancer is configured without
>> ports.
>>
>> Fixes: 022ea339c8e2 ("lflow: Use learn() action to generate LB hairpin
>> reply flows.")
>> Tested-by: Ying Xu <yi...@redhat.com>
>> Reviewed-by: Simon Horman <simon.hor...@corigine.com>
>> Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=2157846
>> Signed-off-by: Lorenzo Bianconi <lorenzo.bianc...@redhat.com>
>> ---
>> Change since v1:
>> - pass has_vip_port istead of lb_vip pointer in
>> add_lb_ct_snat_hairpin_for_dp()
>>   routine
>> ---
>>  controller/lflow.c |  25 +++++++---
>>  tests/ovn.at       | 115 +++++++++++++++++++++++++++++++++++++++++++++
>>  2 files changed, 133 insertions(+), 7 deletions(-)
>>
>> diff --git a/controller/lflow.c b/controller/lflow.c
>> index 003195ae4..0b071138d 100644
>> --- a/controller/lflow.c
>> +++ b/controller/lflow.c
>> @@ -1729,6 +1729,7 @@ add_lb_vip_hairpin_flows(const struct
>> ovn_controller_lb *lb,
>>
>>  static void
>>  add_lb_ct_snat_hairpin_for_dp(const struct ovn_controller_lb *lb,
>> +                              bool has_vip_port,
>>                                const struct sbrec_datapath_binding
>> *datapath,
>>                                const struct hmap *local_datapaths,
>>                                struct match *dp_match,
>> @@ -1742,12 +1743,20 @@ add_lb_ct_snat_hairpin_for_dp(const struct
>> ovn_controller_lb *lb,
>>          match_set_metadata(dp_match, htonll(datapath->tunnel_key));
>>      }
>>
>> +    uint16_t priority = datapath ? 200 : 100;
>> +    if (!has_vip_port) {
>> +        /* If L4 ports are not specified for the current LB, we will
>> decrease
>> +         * the flow priority in order to not collide with other LBs with
>> more
>> +         * fine-grained configuration.
>> +         */
>> +        priority -= 10;
>> +    }
>>      /* A flow added for the "hairpin_snat_ip" case will have an extra
>>       * datapath match, but it will also match on the less restrictive
>>       * general case.  Therefore, we set the priority in the
>>       * "hairpin_snat_ip" case to be higher than the general case. */
>>      ofctrl_add_flow(flow_table, OFTABLE_CT_SNAT_HAIRPIN,
>> -                    datapath ? 200 : 100, lb->slb->header_.uuid.parts[0],
>> +                    priority, lb->slb->header_.uuid.parts[0],
>>                      dp_match, dp_acts, &lb->slb->header_.uuid);
>>  }
>>
>> @@ -1834,8 +1843,8 @@ add_lb_ct_snat_hairpin_vip_flow(const struct
>> ovn_controller_lb *lb,
>>          }
>>      }
>>
>> -    match_set_nw_proto(&match, lb->proto);
>>      if (lb_vip->vip_port) {
>> +        match_set_nw_proto(&match, lb->proto);
>>          if (!lb->hairpin_orig_tuple) {
>>              match_set_ct_nw_proto(&match, lb->proto);
>>              match_set_ct_tp_dst(&match, htons(lb_vip->vip_port));
>> @@ -1852,18 +1861,20 @@ add_lb_ct_snat_hairpin_vip_flow(const struct
>> ovn_controller_lb *lb,
>>      }
>>
>>      if (!use_hairpin_snat_ip) {
>> -        add_lb_ct_snat_hairpin_for_dp(lb, NULL, NULL,
>> +        add_lb_ct_snat_hairpin_for_dp(lb, !!lb_vip->vip_port, NULL, NULL,
>>                                        &match, &ofpacts, flow_table);
>>      } else {
>>          for (size_t i = 0; i < lb->slb->n_datapaths; i++) {
>> -            add_lb_ct_snat_hairpin_for_dp(lb, lb->slb->datapaths[i],
>> -                                          local_datapaths,
>> -                                          &match, &ofpacts, flow_table);
>> +            add_lb_ct_snat_hairpin_for_dp(lb, !!lb_vip->vip_port,
>> +                                          lb->slb->datapaths[i],
>> +                                          local_datapaths, &match,
>> +                                          &ofpacts, flow_table);
>>          }
>>          if (lb->slb->datapath_group) {
>>              for (size_t i = 0; i < lb->slb->datapath_group->n_datapaths;
>> i++) {
>>                  add_lb_ct_snat_hairpin_for_dp(
>> -                    lb, lb->slb->datapath_group->datapaths[i],
>> +                    lb, !!lb_vip->vip_port,
>> +                    lb->slb->datapath_group->datapaths[i],
>>                      local_datapaths, &match, &ofpacts, flow_table);
>>              }
>>          }
>> diff --git a/tests/ovn.at b/tests/ovn.at
>> index c2883ffca..207c16295 100644
>> --- a/tests/ovn.at
>> +++ b/tests/ovn.at
>> @@ -29500,7 +29500,9 @@ OVS_WAIT_UNTIL([test x$(ovn-nbctl lsp-get-up
>> sw1-p1) = xup])
>>
>>  check ovn-nbctl lb-add lb-ipv4-tcp 88.88.88.88:8080 42.42.42.1:4041 tcp
>>  check ovn-nbctl lb-add lb-ipv4-udp 88.88.88.88:4040 42.42.42.1:2021 udp
>> +check ovn-nbctl lb-add lb-ipv4 88.88.88.89 42.42.42.2
>>  check ovn-nbctl lb-add lb-ipv6-tcp [[8800::0088]]:8080 [[4200::1]]:4041
>> tcp
>> +check ovn-nbctl lb-add lb-ipv6 8800::0089 4200::2
>>  check ovn-nbctl --wait=hv lb-add lb-ipv6-udp [[8800::0088]]:4040
>> [[4200::1]]:2021 udp
>>
>>  AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=68 | grep -v NXST],
>> [1], [dnl
>> @@ -29791,6 +29793,119 @@ AT_CHECK([as hv2 ovs-ofctl dump-flows br-int
>> table=70 | ofctl_strip_all | grep -
>>   table=70,
>> 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))
>>  ])
>>
>> +check ovn-nbctl --wait=hv ls-lb-add sw0 lb-ipv4
>> +OVS_WAIT_UNTIL(
>> +    [test $(as hv1 ovs-ofctl dump-flows br-int table=68 | grep -c -v
>> NXST) -eq 7]
>> +)
>> +
>> +OVS_WAIT_UNTIL(
>> +    [test $(as hv2 ovs-ofctl dump-flows br-int table=68 | grep -c -v
>> NXST) -eq 7]
>> +)
>> +
>> +AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=68 | ofctl_strip_all |
>> grep -v NXST], [0], [dnl
>> + table=68,
>> 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=69,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=68,
>> 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=69,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=68,
>> 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=69,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=68,
>> 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=69,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=68,
>> 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=69,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=68,
>> 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=69,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=68,
>> 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=69,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]])
>> +])
>> +
>> +AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=69 | grep -v NXST],
>> [1], [dnl
>> +])
>> +
>> +AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=70 | ofctl_strip_all |
>> grep -v NXST], [0], [dnl
>> + table=70, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff
>> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88))
>> + table=70, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff
>> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90))
>> + table=70,
>> 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=70, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff
>> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88))
>> + table=70,
>> 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=70, priority=90,ip,reg1=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=68 | ofctl_strip_all |
>> grep -v NXST], [0], [dnl
>> + table=68,
>> 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=69,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=68,
>> 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=69,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=68,
>> 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=69,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=68,
>> 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=69,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=68,
>> 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=69,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=68,
>> 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=69,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=68,
>> 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=69,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]])
>> +])
>> +
>> +AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=69 | grep -v NXST],
>> [1], [dnl
>> +])
>> +
>> +AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=70 | ofctl_strip_all |
>> grep -v NXST], [0], [dnl
>> + table=70, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff
>> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88))
>> + table=70, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff
>> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90))
>> + table=70,
>> 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=70, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff
>> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88))
>> + table=70,
>> 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=70, priority=90,ip,reg1=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
>> +OVS_WAIT_UNTIL(
>> +    [test $(as hv1 ovs-ofctl dump-flows br-int table=68 | grep -c -v
>> NXST) -eq 8]
>> +)
>> +
>> +OVS_WAIT_UNTIL(
>> +    [test $(as hv2 ovs-ofctl dump-flows br-int table=68 | grep -c -v
>> NXST) -eq 8]
>> +)
>> +
>> +AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=68 | ofctl_strip_all |
>> grep -v NXST], [0], [dnl
>> + table=68,
>> 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=69,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=68,
>> 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=69,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=68,
>> 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=69,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=68,
>> 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=69,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=68,
>> 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=69,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=68,
>> 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=69,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=68,
>> 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=69,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=68,
>> 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=69,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]])
>> +])
>> +
>> +AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=69 | grep -v NXST],
>> [1], [dnl
>> +])
>> +
>> +AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=70 | ofctl_strip_all |
>> grep -v NXST], [0], [dnl
>> + table=70, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff
>> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88))
>> + table=70, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff
>> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90))
>> + table=70,
>> 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=70, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff
>> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88))
>> + table=70,
>> 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=70, priority=90,ip,reg1=0x58585859
>> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89))
>> + table=70, 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=68 | ofctl_strip_all |
>> grep -v NXST], [0], [dnl
>> + table=68,
>> 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=69,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=68,
>> 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=69,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=68,
>> 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=69,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=68,
>> 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=69,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=68,
>> 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=69,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=68,
>> 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=69,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=68,
>> 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=69,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=68,
>> 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=69,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]])
>> +])
>> +
>> +AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=69 | grep -v NXST],
>> [1], [dnl
>> +])
>> +
>> +AT_CHECK([as hv2 ovs-ofctl dump-flows br-int table=70 | ofctl_strip_all |
>> grep -v NXST], [0], [dnl
>> + table=70, priority=100,tcp,reg1=0x58585858,reg2=0x1f90/0xffff
>> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88))
>> + table=70, priority=100,tcp,reg1=0x5858585a,reg2=0x1f90/0xffff
>> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.90))
>> + table=70,
>> 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=70, priority=100,udp,reg1=0x58585858,reg2=0xfc8/0xffff
>> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.88))
>> + table=70,
>> 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=70, priority=90,ip,reg1=0x58585859
>> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=88.88.88.89))
>> + table=70, priority=90,ipv6,reg4=0x88000000,reg5=0,reg6=0,reg7=0x89
>> actions=ct(commit,zone=NXM_NX_REG12[[0..15]],nat(src=8800::89))
>> +])
>> +
>> +check ovn-nbctl --wait=hv ls-lb-del sw0 lb-ipv4
>> +check ovn-nbctl --wait=hv ls-lb-del sw0 lb-ipv6
>> +
>>  # Check backwards compatibility with ovn-northd versions that don't store
>> the
>>  # original destination tuple.
>>  #
>> --
>> 2.39.2
>>
>>
> Looks good to me, thanks.
> 
> Acked-by: Ales Musil <amu...@redhat.com>
> 

Thanks, Lorenzo, Ales and Simon!

I applied this to the main branch and backported it to 23.03.  Do we
need it on older branches too?  If so, please send a backport patch as
this one doesn't apply cleanly.

Regards,
Dumitru

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to