diff mbox series

[ovs-dev,branch-20.09] pinctrl: Honor always_learn_from_arp_request for self created MAC_Bindings.

Message ID 1606837724-23775-1-git-send-email-dceara@redhat.com
State Accepted
Headers show
Series [ovs-dev,branch-20.09] pinctrl: Honor always_learn_from_arp_request for self created MAC_Bindings. | expand

Commit Message

Dumitru Ceara Dec. 1, 2020, 3:48 p.m. UTC
Reported-at: https://mail.openvswitch.org/pipermail/ovs-dev/2020-November/377876.html
Reported-by: Renat Nurgaliyev <impleman@gmail.com>
Suggested-by: Han Zhou <hzhou@ovn.org>
Fixes: a2b88dc51365 ("pinctrl: Directly update MAC_Bindings created by self originated GARPs.")
Signed-off-by: Dumitru Ceara <dceara@redhat.com>

(cherry-picked from master commit fdf295d5eb3af74ffb0c5ef950d6b1ad3902599a)
---
 controller/pinctrl.c |  7 +++++++
 northd/ovn-northd.c  | 10 ++++++++++
 tests/ovn.at         | 19 +++++++++++++++++++
 3 files changed, 36 insertions(+)

Comments

0-day Robot Dec. 1, 2020, 3:59 p.m. UTC | #1
Bleep bloop.  Greetings Dumitru Ceara, I am a robot and I have tried out your patch.
Thanks for your contribution.

I encountered some error that I wasn't expecting.  See the details below.


build:
gcc -std=gnu99 -DHAVE_CONFIG_H -I.   -I ./include  -I ./include -I ./ovn -I ./include -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR/include -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR/include -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR/lib -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR/lib -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR -I ./lib -I ./lib    -Wstrict-prototypes -Wall -Wextra -Wno-sign-compare -Wpointer-arith -Wformat -Wformat-security -Wswitch-enum -Wunused-parameter -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-field-initializers -fno-strict-aliasing -Wshadow -Werror -Werror  -g -O2 -MT controller/pinctrl.o -MD -MP -MF $depbase.Tpo -c -o controller/pinctrl.o controller/pinctrl.c &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo controller/patch.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
gcc -std=gnu99 -DHAVE_CONFIG_H -I.   -I ./include  -I ./include -I ./ovn -I ./include -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR/include -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR/include -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR/lib -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR/lib -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR -I ./lib -I ./lib    -Wstrict-prototypes -Wall -Wextra -Wno-sign-compare -Wpointer-arith -Wformat -Wformat-security -Wswitch-enum -Wunused-parameter -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-field-initializers -fno-strict-aliasing -Wshadow -Werror -Werror  -g -O2 -MT controller/patch.o -MD -MP -MF $depbase.Tpo -c -o controller/patch.o controller/patch.c &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo controller/ovn-controller.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
gcc -std=gnu99 -DHAVE_CONFIG_H -I.   -I ./include  -I ./include -I ./ovn -I ./include -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR/include -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR/include -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR/lib -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR/lib -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR -I ./lib -I ./lib    -Wstrict-prototypes -Wall -Wextra -Wno-sign-compare -Wpointer-arith -Wformat -Wformat-security -Wswitch-enum -Wunused-parameter -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-field-initializers -fno-strict-aliasing -Wshadow -Werror -Werror  -g -O2 -MT controller/ovn-controller.o -MD -MP -MF $depbase.Tpo -c -o controller/ovn-controller.o controller/ovn-controller.c &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo controller/physical.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
gcc -std=gnu99 -DHAVE_CONFIG_H -I.   -I ./include  -I ./include -I ./ovn -I ./include -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR/include -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR/include -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR/lib -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR/lib -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR -I /var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace/OVSDIR -I ./lib -I ./lib    -Wstrict-prototypes -Wall -Wextra -Wno-sign-compare -Wpointer-arith -Wformat -Wformat-security -Wswitch-enum -Wunused-parameter -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-field-initializers -fno-strict-aliasing -Wshadow -Werror -Werror  -g -O2 -MT controller/physical.o -MD -MP -MF $depbase.Tpo -c -o controller/physical.o controller/physical.c &&\
mv -f $depbase.Tpo $depbase.Po
controller/physical.c: In function ‘put_remote_port_redirect_overlay’:
controller/physical.c:387:23: error: ‘struct ofpact_bundle’ has no member named ‘n_slaves’
             if (bundle->n_slaves >= BUNDLE_MAX_SLAVES) {
                       ^
controller/physical.c:387:37: error: ‘BUNDLE_MAX_SLAVES’ undeclared (first use in this function)
             if (bundle->n_slaves >= BUNDLE_MAX_SLAVES) {
                                     ^
controller/physical.c:387:37: note: each undeclared identifier is reported only once for each function it appears in
controller/physical.c:395:19: error: ‘struct ofpact_bundle’ has no member named ‘n_slaves’
             bundle->n_slaves++;
                   ^
make[1]: *** [controller/physical.o] Error 1
make[1]: Leaving directory `/var/lib/jenkins/jobs/0day_robot_upstream_build_ovn_from_pw/workspace'
make: *** [all] Error 2


Please check this out.  If you feel there has been an error, please email aconole@redhat.com

Thanks,
0-day Robot
Numan Siddique Dec. 1, 2020, 6:34 p.m. UTC | #2
On Tue, Dec 1, 2020 at 9:19 PM Dumitru Ceara <dceara@redhat.com> wrote:
>
> Reported-at: https://mail.openvswitch.org/pipermail/ovs-dev/2020-November/377876.html
> Reported-by: Renat Nurgaliyev <impleman@gmail.com>
> Suggested-by: Han Zhou <hzhou@ovn.org>
> Fixes: a2b88dc51365 ("pinctrl: Directly update MAC_Bindings created by self originated GARPs.")
> Signed-off-by: Dumitru Ceara <dceara@redhat.com>
>
> (cherry-picked from master commit fdf295d5eb3af74ffb0c5ef950d6b1ad3902599a)

Thanks. I applied to branch-20.09

Numan

> ---
>  controller/pinctrl.c |  7 +++++++
>  northd/ovn-northd.c  | 10 ++++++++++
>  tests/ovn.at         | 19 +++++++++++++++++++
>  3 files changed, 36 insertions(+)
>
> diff --git a/controller/pinctrl.c b/controller/pinctrl.c
> index 9eee432..8372da2 100644
> --- a/controller/pinctrl.c
> +++ b/controller/pinctrl.c
> @@ -3757,6 +3757,13 @@ send_garp_locally(struct ovsdb_idl_txn *ovnsb_idl_txn,
>              continue;
>          }
>
> +        /* Skip datapaths that don't automatically learn ARPs from requests. */
> +        if (!smap_get_bool(&remote->datapath->external_ids,
> +                           "always_learn_from_arp_request",
> +                           true)) {
> +            continue;
> +        }
> +
>          struct ds ip_s = DS_EMPTY_INITIALIZER;
>
>          ip_format_masked(ip, OVS_BE32_MAX, &ip_s);
> diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c
> index ff3de89..40caed5 100644
> --- a/northd/ovn-northd.c
> +++ b/northd/ovn-northd.c
> @@ -1138,6 +1138,16 @@ ovn_datapath_update_external_ids(struct ovn_datapath *od)
>              smap_add(&ids, "interconn-ts", ts);
>          }
>      }
> +
> +    if (od->nbr) {
> +        bool learn_from_arp_request =
> +            smap_get_bool(&od->nbr->options, "always_learn_from_arp_request",
> +                          true);
> +        if (!learn_from_arp_request) {
> +            smap_add(&ids, "always_learn_from_arp_request", "false");
> +        }
> +    }
> +
>      sbrec_datapath_binding_set_external_ids(od->sb, &ids);
>      smap_destroy(&ids);
>  }
> diff --git a/tests/ovn.at b/tests/ovn.at
> index 0ad5dc3..1bd546c 100644
> --- a/tests/ovn.at
> +++ b/tests/ovn.at
> @@ -15784,6 +15784,25 @@ echo "fffffffffffff0000000010108060001080006040001f00000000101ac1804dd0000000000
>  AT_CHECK([sort hv1/br-phys-tx4.pcap], [0], [expout])
>  #OVN_CHECK_PACKETS([hv1/br-phys-tx4.pcap], [br-phys.expected])
>
> +# Now make sure that always_learn_from_arp_request=false is also honored
> +# for locally injected mac bindings.
> +check ovn-nbctl set logical_router lr0 options:always_learn_from_arp_request=false
> +check ovn-nbctl set logical_router lr1 options:always_learn_from_arp_request=false
> +check ovn-nbctl --wait=hv sync
> +
> +# Recreate two floating IPs, one for each VIF.
> +check ovn-nbctl lr-nat-del lr0 dnat_and_snat 172.24.4.100
> +check ovn-nbctl lr-nat-del lr1 dnat_and_snat 172.24.4.200
> +
> +check ovn-sbctl --all destroy mac_binding
> +
> +check ovn-nbctl lr-nat-add lr0 dnat_and_snat 172.24.4.100 10.0.0.10
> +check ovn-nbctl lr-nat-add lr1 dnat_and_snat 172.24.4.200 20.0.0.10
> +check ovn-nbctl --wait=hv sync
> +
> +check_row_count MAC_Binding 0 logical_port=lr0-pub ip=172.24.4.200
> +check_row_count MAC_Binding 0 logical_port=lr1-pub ip=172.24.4.100
> +
>  OVN_CLEANUP([hv1])
>  AT_CLEANUP
>
> --
> 1.8.3.1
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
diff mbox series

Patch

diff --git a/controller/pinctrl.c b/controller/pinctrl.c
index 9eee432..8372da2 100644
--- a/controller/pinctrl.c
+++ b/controller/pinctrl.c
@@ -3757,6 +3757,13 @@  send_garp_locally(struct ovsdb_idl_txn *ovnsb_idl_txn,
             continue;
         }
 
+        /* Skip datapaths that don't automatically learn ARPs from requests. */
+        if (!smap_get_bool(&remote->datapath->external_ids,
+                           "always_learn_from_arp_request",
+                           true)) {
+            continue;
+        }
+
         struct ds ip_s = DS_EMPTY_INITIALIZER;
 
         ip_format_masked(ip, OVS_BE32_MAX, &ip_s);
diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c
index ff3de89..40caed5 100644
--- a/northd/ovn-northd.c
+++ b/northd/ovn-northd.c
@@ -1138,6 +1138,16 @@  ovn_datapath_update_external_ids(struct ovn_datapath *od)
             smap_add(&ids, "interconn-ts", ts);
         }
     }
+
+    if (od->nbr) {
+        bool learn_from_arp_request =
+            smap_get_bool(&od->nbr->options, "always_learn_from_arp_request",
+                          true);
+        if (!learn_from_arp_request) {
+            smap_add(&ids, "always_learn_from_arp_request", "false");
+        }
+    }
+
     sbrec_datapath_binding_set_external_ids(od->sb, &ids);
     smap_destroy(&ids);
 }
diff --git a/tests/ovn.at b/tests/ovn.at
index 0ad5dc3..1bd546c 100644
--- a/tests/ovn.at
+++ b/tests/ovn.at
@@ -15784,6 +15784,25 @@  echo "fffffffffffff0000000010108060001080006040001f00000000101ac1804dd0000000000
 AT_CHECK([sort hv1/br-phys-tx4.pcap], [0], [expout])
 #OVN_CHECK_PACKETS([hv1/br-phys-tx4.pcap], [br-phys.expected])
 
+# Now make sure that always_learn_from_arp_request=false is also honored
+# for locally injected mac bindings.
+check ovn-nbctl set logical_router lr0 options:always_learn_from_arp_request=false
+check ovn-nbctl set logical_router lr1 options:always_learn_from_arp_request=false
+check ovn-nbctl --wait=hv sync
+
+# Recreate two floating IPs, one for each VIF.
+check ovn-nbctl lr-nat-del lr0 dnat_and_snat 172.24.4.100
+check ovn-nbctl lr-nat-del lr1 dnat_and_snat 172.24.4.200
+
+check ovn-sbctl --all destroy mac_binding
+
+check ovn-nbctl lr-nat-add lr0 dnat_and_snat 172.24.4.100 10.0.0.10
+check ovn-nbctl lr-nat-add lr1 dnat_and_snat 172.24.4.200 20.0.0.10
+check ovn-nbctl --wait=hv sync
+
+check_row_count MAC_Binding 0 logical_port=lr0-pub ip=172.24.4.200
+check_row_count MAC_Binding 0 logical_port=lr1-pub ip=172.24.4.100
+
 OVN_CLEANUP([hv1])
 AT_CLEANUP