diff mbox series

[ovs-dev] northd: Fix network_id computation for IPv6 LRP networks.

Message ID 20250402104605.720034-1-dceara@redhat.com
State Accepted
Headers show
Series [ovs-dev] northd: Fix network_id computation for IPv6 LRP networks. | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_Build_and_Test success github build: passed
ovsrobot/github-robot-_ovn-kubernetes success github build: passed

Commit Message

Dumitru Ceara April 2, 2025, 10:46 a.m. UTC
If a router port has more than 16 networks configured we should set the
flags.network_id to 0 for network whose index is greater than 16.

This issue has been reported by coverity.  Trimmed report:

  *** CID 459645:  Code maintainability issues  (UNUSED_VALUE)
  /northd/northd.c: 15062 in build_lrouter_network_id_flows()
  15056                               "flags.network_id = 0.", op->json_key,
  15057                               OVN_MAX_NETWORK_ID + 1,
  15058                               op->lrp_networks.ipv6_addrs[i].addr_s,
  15059                               op->lrp_networks.ipv6_addrs[i].plen);
  15060             network_id = 0;
  15061         } else {
  >>>     CID 459645:  Code maintainability issues  (UNUSED_VALUE)
  >>>     Assigning value from "i" to "network_id" here, but that stored
  >>      value is overwritten before it can be used.
  15062             network_id = i;
  15063         }
  15064
  15065         ds_clear(match);
  15066         ds_clear(actions);
  15067

Fixes: af6e83707568 ("northd: Use next-hop network for SNAT when lb_force_snat_ip=router_ip.")
Signed-off-by: Dumitru Ceara <dceara@redhat.com>
---
 northd/northd.c     |  3 ++-
 tests/ovn-northd.at | 35 ++++++++++++++++++++++++++++++++---
 2 files changed, 34 insertions(+), 4 deletions(-)

Comments

Rosemarie O'Riorden April 2, 2025, 2:22 p.m. UTC | #1
On 4/2/25 6:46 AM, Dumitru Ceara wrote:
> If a router port has more than 16 networks configured we should set the
> flags.network_id to 0 for network whose index is greater than 16.
> 
> This issue has been reported by coverity.  Trimmed report:
> 
>   *** CID 459645:  Code maintainability issues  (UNUSED_VALUE)
>   /northd/northd.c: 15062 in build_lrouter_network_id_flows()
>   15056                               "flags.network_id = 0.", op->json_key,
>   15057                               OVN_MAX_NETWORK_ID + 1,
>   15058                               op->lrp_networks.ipv6_addrs[i].addr_s,
>   15059                               op->lrp_networks.ipv6_addrs[i].plen);
>   15060             network_id = 0;
>   15061         } else {
>   >>>     CID 459645:  Code maintainability issues  (UNUSED_VALUE)
>   >>>     Assigning value from "i" to "network_id" here, but that stored
>   >>      value is overwritten before it can be used.
>   15062             network_id = i;
>   15063         }
>   15064
>   15065         ds_clear(match);
>   15066         ds_clear(actions);
>   15067
> 
> Fixes: af6e83707568 ("northd: Use next-hop network for SNAT when lb_force_snat_ip=router_ip.")
> Signed-off-by: Dumitru Ceara <dceara@redhat.com>
> ---
>  northd/northd.c     |  3 ++-
>  tests/ovn-northd.at | 35 ++++++++++++++++++++++++++++++++---
>  2 files changed, 34 insertions(+), 4 deletions(-)
> 
> diff --git a/northd/northd.c b/northd/northd.c
> index 471d9969bf..00bb738b3c 100644
> --- a/northd/northd.c
> +++ b/northd/northd.c
> @@ -15070,7 +15070,8 @@ build_lrouter_network_id_flows(
>                            op->lrp_networks.ipv6_addrs[i].addr_s,
>                            op->lrp_networks.ipv6_addrs[i].plen);
>  
> -            ds_put_format(actions, "flags.network_id = %"PRIuSIZE"; next;", i);
> +            ds_put_format(actions, "flags.network_id = %"PRIuSIZE"; next;",
> +                          network_id);
>  
>              ovn_lflow_add(lflows, op->od, S_ROUTER_IN_NETWORK_ID, 110,
>                            ds_cstr(match), ds_cstr(actions), lflow_ref);
> diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at
> index 95993e454c..8652e5574b 100644
> --- a/tests/ovn-northd.at
> +++ b/tests/ovn-northd.at
> @@ -16781,7 +16781,9 @@ check ovn-nbctl lrp-add lr lrp-server 02:00:00:00:00:03 1.1.2.1/24 7.7.7.1/24 \
>              8.8.8.1/24 1.2.1.1/24 1.2.2.1/24 3.3.3.1/24 4.4.4.1/24 5.5.5.1/24 \
>              6.6.6.1/24 6.2.1.1/24 6.3.1.1/24 6.4.1.1/24 6.5.1.1/24 6.6.1.1/24 \
>                                    6.7.1.1/24 6.8.1.1/24 6.9.1.1/24 7.2.1.1/24 \
> -                                                   ff01::02 ff01::03 ff01::06
> +                        ff01::02 ff01::03 ff01::04 ff01::05 ff01::06 ff01::07 \
> +                        ff01::08 ff01::09 ff01::0a ff01::0b ff01::0c ff01::0d \
> +                                 ff01::0e ff01::0f ff01::a1 ff01::a2 ff01::a3
>  check ovn-nbctl ls-add ls-client
>  check ovn-nbctl ls-add ls-server
>  check ovn-nbctl lsp-add ls-client lsp-client-router
> @@ -16827,7 +16829,21 @@ AT_CHECK([grep -E flags.network_id lrflows | ovn_strip_lflows], [0], [dnl
>    table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip4 && reg0 == 8.8.8.1/24), action=(flags.network_id = 0; next;)
>    table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::2/128), action=(flags.network_id = 0; next;)
>    table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::3/128), action=(flags.network_id = 1; next;)
> -  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::6/128), action=(flags.network_id = 2; next;)
> +  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::4/128), action=(flags.network_id = 2; next;)
> +  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::5/128), action=(flags.network_id = 3; next;)
> +  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::6/128), action=(flags.network_id = 4; next;)
> +  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::7/128), action=(flags.network_id = 5; next;)
> +  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::8/128), action=(flags.network_id = 6; next;)
> +  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::9/128), action=(flags.network_id = 7; next;)
> +  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::a/128), action=(flags.network_id = 8; next;)
> +  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::a1/128), action=(flags.network_id = 14; next;)
> +  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::a2/128), action=(flags.network_id = 15; next;)
> +  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::a3/128), action=(flags.network_id = 0; next;)
> +  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::b/128), action=(flags.network_id = 9; next;)
> +  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::c/128), action=(flags.network_id = 10; next;)
> +  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::d/128), action=(flags.network_id = 11; next;)
> +  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::e/128), action=(flags.network_id = 12; next;)
> +  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::f/128), action=(flags.network_id = 13; next;)
>    table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 0 && ip4 && outport == "lrp-client"), action=(ct_snat(1.1.1.1);)
>    table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 0 && ip4 && outport == "lrp-server"), action=(ct_snat(1.1.2.1);)
>    table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 0 && ip6 && outport == "lrp-client"), action=(ct_snat(ff01::1);)
> @@ -16835,20 +16851,33 @@ AT_CHECK([grep -E flags.network_id lrflows | ovn_strip_lflows], [0], [dnl
>    table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 1 && ip4 && outport == "lrp-server"), action=(ct_snat(1.2.1.1);)
>    table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 1 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::3);)
>    table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 10 && ip4 && outport == "lrp-server"), action=(ct_snat(6.6.1.1);)
> +  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 10 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::c);)
>    table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 11 && ip4 && outport == "lrp-server"), action=(ct_snat(6.6.6.1);)
> +  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 11 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::d);)
>    table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 12 && ip4 && outport == "lrp-server"), action=(ct_snat(6.7.1.1);)
> +  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 12 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::e);)
>    table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 13 && ip4 && outport == "lrp-server"), action=(ct_snat(6.8.1.1);)
> +  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 13 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::f);)
>    table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 14 && ip4 && outport == "lrp-server"), action=(ct_snat(6.9.1.1);)
> +  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 14 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::a1);)
>    table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 15 && ip4 && outport == "lrp-server"), action=(ct_snat(7.2.1.1);)
> +  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 15 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::a2);)
>    table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 2 && ip4 && outport == "lrp-server"), action=(ct_snat(1.2.2.1);)
> -  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 2 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::6);)
> +  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 2 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::4);)
>    table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 3 && ip4 && outport == "lrp-server"), action=(ct_snat(3.3.3.1);)
> +  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 3 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::5);)
>    table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 4 && ip4 && outport == "lrp-server"), action=(ct_snat(4.4.4.1);)
> +  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 4 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::6);)
>    table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 5 && ip4 && outport == "lrp-server"), action=(ct_snat(5.5.5.1);)
> +  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 5 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::7);)
>    table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 6 && ip4 && outport == "lrp-server"), action=(ct_snat(6.2.1.1);)
> +  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 6 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::8);)
>    table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 7 && ip4 && outport == "lrp-server"), action=(ct_snat(6.3.1.1);)
> +  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 7 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::9);)
>    table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 8 && ip4 && outport == "lrp-server"), action=(ct_snat(6.4.1.1);)
> +  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 8 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::a);)
>    table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 9 && ip4 && outport == "lrp-server"), action=(ct_snat(6.5.1.1);)
> +  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 9 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::b);)
>  ])
>  AT_CLEANUP
>  ])

This corrects the IPv6 behavior and makes it consistent with that of
IPv4. Looks good to me. Thanks!

Acked-by: Rosemarie O'Riorden <rosemarie@redhat.com>
Dumitru Ceara April 3, 2025, 12:21 p.m. UTC | #2
On 4/2/25 4:22 PM, Rosemarie O'Riorden wrote:
> On 4/2/25 6:46 AM, Dumitru Ceara wrote:
>> If a router port has more than 16 networks configured we should set the
>> flags.network_id to 0 for network whose index is greater than 16.
>>
>> This issue has been reported by coverity.  Trimmed report:
>>
>>   *** CID 459645:  Code maintainability issues  (UNUSED_VALUE)
>>   /northd/northd.c: 15062 in build_lrouter_network_id_flows()
>>   15056                               "flags.network_id = 0.", op->json_key,
>>   15057                               OVN_MAX_NETWORK_ID + 1,
>>   15058                               op->lrp_networks.ipv6_addrs[i].addr_s,
>>   15059                               op->lrp_networks.ipv6_addrs[i].plen);
>>   15060             network_id = 0;
>>   15061         } else {
>>   >>>     CID 459645:  Code maintainability issues  (UNUSED_VALUE)
>>   >>>     Assigning value from "i" to "network_id" here, but that stored
>>   >>      value is overwritten before it can be used.
>>   15062             network_id = i;
>>   15063         }
>>   15064
>>   15065         ds_clear(match);
>>   15066         ds_clear(actions);
>>   15067
>>
>> Fixes: af6e83707568 ("northd: Use next-hop network for SNAT when lb_force_snat_ip=router_ip.")
>> Signed-off-by: Dumitru Ceara <dceara@redhat.com>
>> ---

> 
> This corrects the IPv6 behavior and makes it consistent with that of
> IPv4. Looks good to me. Thanks!
> 
> Acked-by: Rosemarie O'Riorden <rosemarie@redhat.com>
> 

Hi Rosemarie,

Thanks for the review!  Applied to main, 25.03, 24.09 and 24.03.

Regards,
Dumitru
diff mbox series

Patch

diff --git a/northd/northd.c b/northd/northd.c
index 471d9969bf..00bb738b3c 100644
--- a/northd/northd.c
+++ b/northd/northd.c
@@ -15070,7 +15070,8 @@  build_lrouter_network_id_flows(
                           op->lrp_networks.ipv6_addrs[i].addr_s,
                           op->lrp_networks.ipv6_addrs[i].plen);
 
-            ds_put_format(actions, "flags.network_id = %"PRIuSIZE"; next;", i);
+            ds_put_format(actions, "flags.network_id = %"PRIuSIZE"; next;",
+                          network_id);
 
             ovn_lflow_add(lflows, op->od, S_ROUTER_IN_NETWORK_ID, 110,
                           ds_cstr(match), ds_cstr(actions), lflow_ref);
diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at
index 95993e454c..8652e5574b 100644
--- a/tests/ovn-northd.at
+++ b/tests/ovn-northd.at
@@ -16781,7 +16781,9 @@  check ovn-nbctl lrp-add lr lrp-server 02:00:00:00:00:03 1.1.2.1/24 7.7.7.1/24 \
             8.8.8.1/24 1.2.1.1/24 1.2.2.1/24 3.3.3.1/24 4.4.4.1/24 5.5.5.1/24 \
             6.6.6.1/24 6.2.1.1/24 6.3.1.1/24 6.4.1.1/24 6.5.1.1/24 6.6.1.1/24 \
                                   6.7.1.1/24 6.8.1.1/24 6.9.1.1/24 7.2.1.1/24 \
-                                                   ff01::02 ff01::03 ff01::06
+                        ff01::02 ff01::03 ff01::04 ff01::05 ff01::06 ff01::07 \
+                        ff01::08 ff01::09 ff01::0a ff01::0b ff01::0c ff01::0d \
+                                 ff01::0e ff01::0f ff01::a1 ff01::a2 ff01::a3
 check ovn-nbctl ls-add ls-client
 check ovn-nbctl ls-add ls-server
 check ovn-nbctl lsp-add ls-client lsp-client-router
@@ -16827,7 +16829,21 @@  AT_CHECK([grep -E flags.network_id lrflows | ovn_strip_lflows], [0], [dnl
   table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip4 && reg0 == 8.8.8.1/24), action=(flags.network_id = 0; next;)
   table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::2/128), action=(flags.network_id = 0; next;)
   table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::3/128), action=(flags.network_id = 1; next;)
-  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::6/128), action=(flags.network_id = 2; next;)
+  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::4/128), action=(flags.network_id = 2; next;)
+  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::5/128), action=(flags.network_id = 3; next;)
+  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::6/128), action=(flags.network_id = 4; next;)
+  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::7/128), action=(flags.network_id = 5; next;)
+  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::8/128), action=(flags.network_id = 6; next;)
+  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::9/128), action=(flags.network_id = 7; next;)
+  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::a/128), action=(flags.network_id = 8; next;)
+  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::a1/128), action=(flags.network_id = 14; next;)
+  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::a2/128), action=(flags.network_id = 15; next;)
+  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::a3/128), action=(flags.network_id = 0; next;)
+  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::b/128), action=(flags.network_id = 9; next;)
+  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::c/128), action=(flags.network_id = 10; next;)
+  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::d/128), action=(flags.network_id = 11; next;)
+  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::e/128), action=(flags.network_id = 12; next;)
+  table=??(lr_in_network_id   ), priority=110  , match=(outport == "lrp-server" && ip6 && xxreg0 == ff01::f/128), action=(flags.network_id = 13; next;)
   table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 0 && ip4 && outport == "lrp-client"), action=(ct_snat(1.1.1.1);)
   table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 0 && ip4 && outport == "lrp-server"), action=(ct_snat(1.1.2.1);)
   table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 0 && ip6 && outport == "lrp-client"), action=(ct_snat(ff01::1);)
@@ -16835,20 +16851,33 @@  AT_CHECK([grep -E flags.network_id lrflows | ovn_strip_lflows], [0], [dnl
   table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 1 && ip4 && outport == "lrp-server"), action=(ct_snat(1.2.1.1);)
   table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 1 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::3);)
   table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 10 && ip4 && outport == "lrp-server"), action=(ct_snat(6.6.1.1);)
+  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 10 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::c);)
   table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 11 && ip4 && outport == "lrp-server"), action=(ct_snat(6.6.6.1);)
+  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 11 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::d);)
   table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 12 && ip4 && outport == "lrp-server"), action=(ct_snat(6.7.1.1);)
+  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 12 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::e);)
   table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 13 && ip4 && outport == "lrp-server"), action=(ct_snat(6.8.1.1);)
+  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 13 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::f);)
   table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 14 && ip4 && outport == "lrp-server"), action=(ct_snat(6.9.1.1);)
+  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 14 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::a1);)
   table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 15 && ip4 && outport == "lrp-server"), action=(ct_snat(7.2.1.1);)
+  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 15 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::a2);)
   table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 2 && ip4 && outport == "lrp-server"), action=(ct_snat(1.2.2.1);)
-  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 2 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::6);)
+  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 2 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::4);)
   table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 3 && ip4 && outport == "lrp-server"), action=(ct_snat(3.3.3.1);)
+  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 3 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::5);)
   table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 4 && ip4 && outport == "lrp-server"), action=(ct_snat(4.4.4.1);)
+  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 4 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::6);)
   table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 5 && ip4 && outport == "lrp-server"), action=(ct_snat(5.5.5.1);)
+  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 5 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::7);)
   table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 6 && ip4 && outport == "lrp-server"), action=(ct_snat(6.2.1.1);)
+  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 6 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::8);)
   table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 7 && ip4 && outport == "lrp-server"), action=(ct_snat(6.3.1.1);)
+  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 7 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::9);)
   table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 8 && ip4 && outport == "lrp-server"), action=(ct_snat(6.4.1.1);)
+  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 8 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::a);)
   table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 9 && ip4 && outport == "lrp-server"), action=(ct_snat(6.5.1.1);)
+  table=??(lr_out_snat        ), priority=110  , match=(flags.force_snat_for_lb == 1 && flags.network_id == 9 && ip6 && outport == "lrp-server"), action=(ct_snat(ff01::b);)
 ])
 AT_CLEANUP
 ])