On Wed, Mar 22, 2023 at 2:19 PM Dumitru Ceara <dce...@redhat.com> wrote:

> On 3/22/23 12:51, Enrique Llorente wrote:
> > The localnet LSPs skip responding ARP/NDP [1], this change relax this
> > restriction by allowing responding from localnet LSPs when owner
> > switch has a router LSP with a proper arp_proxy configuration.
> >
> > [1] ovn-northd.8.xml
> >
> > Signed-off-by: Enrique Llorente <ellor...@redhat.com>
> > ---
>
> Thanks for the patch, Enrique!
>
> This is not a full review, just a couple of initial comments.
>
> >  northd/northd.c     | 21 +++++++++++++--------
> >  northd/northd.h     |  1 +
> >  ovs                 |  2 +-
> >  tests/system-ovn.at | 34 ++++++++++++++++++++++++++++++----
>
> We should probably document this behavior in ovn-nb.xml.
>

Added some docs at ovn-northd man page at v2


>
> >  4 files changed, 45 insertions(+), 13 deletions(-)
> >
> > diff --git a/northd/northd.c b/northd/northd.c
> > index 5f0b436c2..941ef4204 100644
> > --- a/northd/northd.c
> > +++ b/northd/northd.c
> > @@ -2721,12 +2721,17 @@ join_logical_ports(struct northd_input
> *input_data,
> >               */
> >              const char *arp_proxy =
> smap_get(&op->nbsp->options,"arp_proxy");
> >              int ofs = 0;
> > -            if (arp_proxy &&
> > -                !extract_addresses(arp_proxy, &op->proxy_arp_addrs,
> &ofs) &&
> > -                !extract_ip_addresses(arp_proxy, &op->proxy_arp_addrs))
> {
> > -                static struct vlog_rate_limit rl =
> VLOG_RATE_LIMIT_INIT(1, 5);
> > -                VLOG_WARN_RL(&rl, "Invalid arp_proxy option: '%s' at
> lsp '%s'",
> > -                             arp_proxy, op->nbsp->name);
> > +            if (arp_proxy) {
> > +                if (extract_addresses(arp_proxy, &op->proxy_arp_addrs,
> &ofs) ||
> > +                    extract_ip_addresses(arp_proxy,
> &op->proxy_arp_addrs)) {
> > +                    op->od->has_arp_proxy_port = true;
> > +                } else {
> > +                    static struct vlog_rate_limit rl =
> > +                        VLOG_RATE_LIMIT_INIT(1, 5);
> > +                    VLOG_WARN_RL(&rl,
> > +                        "Invalid arp_proxy option: '%s' at lsp '%s'",
> > +                        arp_proxy, op->nbsp->name);
> > +                }
> >              }
> >          } else if (op->nbrp && op->nbrp->peer && !op->l3dgw_port) {
> >              struct ovn_port *peer = ovn_port_find(ports,
> op->nbrp->peer);
> > @@ -8428,7 +8433,7 @@ build_lswitch_arp_nd_responder_skip_local(struct
> ovn_port *op,
> >                                            struct hmap *lflows,
> >                                            struct ds *match)
> >  {
> > -    if (op->nbsp && lsp_is_localnet(op->nbsp)) {
> > +    if (op->nbsp && lsp_is_localnet(op->nbsp) &&
> !op->od->has_arp_proxy_port) {
> >          ds_clear(match);
> >          ds_put_format(match, "inport == %s", op->json_key);
> >          ovn_lflow_add_with_lport_and_hint(lflows, op->od,
> > @@ -14602,7 +14607,7 @@ build_lswitch_and_lrouter_iterate_by_op(struct
> ovn_port *op,
> >      build_lswitch_learn_fdb_op(op, lsi->lflows, &lsi->actions,
> >                                 &lsi->match);
> >      build_lswitch_arp_nd_responder_skip_local(op, lsi->lflows,
> > -                                              &lsi->match);
> > +                                             &lsi->match);
> >      build_lswitch_arp_nd_responder_known_ips(op, lsi->lflows,
> >                                               lsi->ports,
> >                                               lsi->meter_groups,
> > diff --git a/northd/northd.h b/northd/northd.h
> > index 4d9055296..5a666bbd3 100644
> > --- a/northd/northd.h
> > +++ b/northd/northd.h
> > @@ -214,6 +214,7 @@ struct ovn_datapath {
> >      bool has_unknown;
> >      bool has_acls;
> >      bool has_vtep_lports;
> > +    bool has_arp_proxy_port;
> >
> >      /* IPAM data. */
> >      struct ipam_info ipam_info;
> > diff --git a/ovs b/ovs
> > index b72a7f925..8986d4d55 160000
> > --- a/ovs
> > +++ b/ovs
> > @@ -1 +1 @@
> > -Subproject commit b72a7f92573aa4e6205e57cb978532b4c04702e1
> > +Subproject commit 8986d4d5564401eeef3dea828b51fe8bae2cc8aa
>
>
> This is probably an accidental change.  And it's also causing the system
> userspace datapath LB ICMP related traffic test to fail.
>

Fixed at v2


>
> > diff --git a/tests/system-ovn.at b/tests/system-ovn.at
> > index ad1188078..f820a5206 100644
> > --- a/tests/system-ovn.at
> > +++ b/tests/system-ovn.at
> > @@ -10431,6 +10431,8 @@ AT_SKIP_IF([test $HAVE_TCPDUMP = no])
> >  ovn_start
> >  OVS_TRAFFIC_VSWITCHD_START()
> >  ADD_BR([br-int])
> > +ADD_BR([br-ext])
> > +ovs-ofctl add-flow br-ext action=normal
> >
> >  # Set external-ids in br-int needed for ovn-controller
> >  ovs-vsctl \
> > @@ -10447,7 +10449,9 @@ start_daemon ovn-controller
> >  # One LR - R1 and two LSs - foo and bar, R1 has switches foo (
> 192.168.1.0/24) and
> >  # bar (192.168.2.0/24) connected to it
> >  #
> > -#    foo -- R1 -- bar
> > +#    br-ext -- localnet -- foo -- R1 -- bar
> > +
> > +check ovs-vsctl set open .
> external-ids:ovn-bridge-mappings=provider:br-ext
> >
> >  check ovn-nbctl lr-add R1
> >  check ovn-nbctl ls-add foo
> > @@ -10456,13 +10460,14 @@ check ovn-nbctl ls-add bar
> >  # Connect foo to R1
> >  check ovn-nbctl lrp-add R1 foo 00:00:01:01:02:03 192.168.1.1/24
> >  check ovn-nbctl lsp-add foo rp-foo -- set Logical_Switch_Port rp-foo \
> > -    type=router options:arp_proxy="0a:58:a9:fe:01:01 169.254.239.254
> 169.254.239.2 169.254.238.0/24 " options:router-port=foo
> addresses='"router"'
> > +    type=router options:arp_proxy="0a:58:a9:fe:01:01 169.254.239.254
> 169.254.239.2 169.254.238.0/24 192.168.1.100" options:router-port=foo
> addresses='"router"'
> >
> >  # Connect bar to R1
> >  check ovn-nbctl lrp-add R1 bar 00:00:01:01:02:04 192.168.2.1/24
> >  check ovn-nbctl lsp-add bar rp-bar -- set Logical_Switch_Port rp-bar \
> >      type=router options:arp_proxy="169.254.239.253"
> options:router-port=bar addresses='"router"'
> >
> > +
> >  # Logical port 'foo1' in switch 'foo'.
> >  ADD_NAMESPACES(foo1)
> >  ADD_VETH(foo1, foo1, br-int, "192.168.1.2/24", "f0:00:00:01:02:03", \
> > @@ -10484,12 +10489,20 @@ ADD_VETH(foo3, foo3, br-int, "192.168.1.4/24",
> "f0:00:00:01:02:05", \
> >  check ovn-nbctl lsp-add foo foo3 \
> >  -- lsp-set-addresses foo3 "f0:00:00:01:02:05 192.168.1.4"
> >
> > +# Logical port 'ext1' in switch 'foo'
> > +ADD_NAMESPACES(ext1)
> > +ADD_VETH(ext1, ext1, br-ext, "192.168.1.5/24", "f0:00:00:01:02:06", \
> > +         "192.168.1.100",)
> > +check ovn-nbctl lsp-add foo ln -- lsp-set-options ln
> network_name=provider
> > +check ovn-nbctl lsp-set-type ln localnet
> > +check ovn-nbctl lsp-set-addresses ln unknown
> > +
> >  # Logical port 'bar1' in switch 'bar'.
> >  ADD_NAMESPACES(bar1)
> > -ADD_VETH(bar1, bar1, br-int, "192.168.2.2/24", "f0:00:00:01:02:06", \
> > +ADD_VETH(bar1, bar1, br-int, "192.168.2.2/24", "f0:00:00:01:02:07", \
> >  "169.254.239.253")
> >  check ovn-nbctl lsp-add bar bar1 \
> > --- lsp-set-addresses bar1 "f0:00:00:01:02:06 192.168.2.2"
> > +-- lsp-set-addresses bar1 "f0:00:00:01:02:07 192.168.2.2"
> >
> >  # wait for ovn-controller to catch up.
> >  check ovn-nbctl --wait=hv sync
> > @@ -10533,6 +10546,19 @@ OVS_WAIT_UNTIL([
> >      test "${total_pkts}" = "3"
> >  ])
> >
> > +NETNS_DAEMONIZE([ext1], [tcpdump -l -nn -e -i ext1 'ether dst
> 0a:58:a9:fe:01:01 and icmp' > ext1-icmp.pcap 2>ext1-tcpdump.stderr],
> [ext1-icmp-tcpdump.pid])
> > +OVS_WAIT_UNTIL([grep "listening" ext1-tcpdump.stderr])
> > +
> > +# 'ext1' should be able to ping 'bar1'
> > +NS_CHECK_EXEC([ext1], [ping -q -c 3 -i 0.3 -w 2 192.168.2.2 |
> FORMAT_PING], \
> > +[0], [dnl
> > +3 packets transmitted, 3 received, 0% packet loss, time 0ms
> > +])
> > +OVS_WAIT_UNTIL([
> > +    total_pkts=$(cat ext1-icmp.pcap| wc -l)
> > +    test "${total_pkts}" = "3"
> > +])
> > +
> >
> >  OVS_APP_EXIT_AND_WAIT([ovn-controller])
> >
>
> Regards,
> Dumitru
>
>

-- 
*Quique Llorente*

CNV networking Senior Software Engineer

Red Hat EMEA <https://www.redhat.com/>

ellor...@redhat.com <arxc...@redhat.com>
@RedHat <https://twitter.com/redhat>   Red Hat
<https://www.linkedin.com/company/red-hat>  Red Hat
<https://www.facebook.com/RedHatInc>
<https://www.redhat.com/>
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to