Looks great! but you forgot the testing for the mult option. Rather simple
anyway it's obvious it works, but.... it's my only nit :)

On Wed, Sep 26, 2018 at 10:30 AM Numan Siddique <nusid...@redhat.com> wrote:

>
>
> On Tue, Sep 25, 2018 at 10:18 PM Miguel Angel Ajo Pelayo <
> majop...@redhat.com> wrote:
>
>> Nak,
>>
>> Great work, this will be useful to adjust parameters based on specific
>> network conditions, or while debugging network issues (to reduce flapping).
>>
>> I miss the "mult" parameter to setup the detection multiplier
>> (rx_interval * mult).
>>
>>
>
> Thanks Anil and Miguel for the review. I sent out v2 adding mult option -
> https://patchwork.ozlabs.org/patch/974893/
>
> Numan
>
>
>
>>
>> Thanks a lot,
>> Miguel Ángel.
>>
>> On Tue, Sep 25, 2018 at 5:46 PM Anil Venkata <anilvenk...@redhat.com>
>> wrote:
>>
>>> On Mon, Sep 24, 2018 at 3:12 PM <nusid...@redhat.com> wrote:
>>>
>>> > From: Numan Siddique <nusid...@redhat.com>
>>> >
>>> > With this commit the users can override the default BFD params -
>>> > min_rx, min_tx and decay_min_rx if desired. This can be useful
>>> > to debug any issues related to BFD, like BFD state changes are
>>> > seen frequently.
>>> >
>>> > ovn-controller checks for the options 'ovn-bfd-min-rx',
>>> 'ovn-bfd-min-tx'
>>> > and 'ovn-bfd-decay-min-rx' in the external-ids of OpenvSwitch table row
>>> > and configures these BFD values to the tunnel interfaces.
>>> >
>>> > Signed-off-by: Numan Siddique <nusid...@redhat.com>
>>> >
>>> Acked-by: Venkata Anil <vkomm...@redhat.com>
>>>
>>> > ---
>>> >  ovn/controller/bfd.c                | 45 ++++++++++++++++++++---------
>>> >  ovn/controller/bfd.h                |  2 ++
>>> >  ovn/controller/ovn-controller.8.xml |  9 ++++++
>>> >  ovn/controller/ovn-controller.c     | 10 ++++---
>>> >  tests/ovn.at                        | 26 +++++++++++++++++
>>> >  5 files changed, 74 insertions(+), 18 deletions(-)
>>> >
>>> > diff --git a/ovn/controller/bfd.c b/ovn/controller/bfd.c
>>> > index 051781f38..455d7ff1f 100644
>>> > --- a/ovn/controller/bfd.c
>>> > +++ b/ovn/controller/bfd.c
>>> > @@ -40,20 +40,10 @@ bfd_register_ovs_idl(struct ovsdb_idl *ovs_idl)
>>> >
>>> >
>>> >  static void
>>> > -interface_set_bfd(const struct ovsrec_interface *iface, bool
>>> bfd_setting)
>>> > +interface_set_bfd(const struct ovsrec_interface *iface, struct smap
>>> *bfd)
>>> >  {
>>> > -    const char *new_setting = bfd_setting ? "true":"false";
>>> > -    const char *current_setting = smap_get(&iface->bfd, "enable");
>>> > -    if (current_setting && !strcmp(current_setting, new_setting)) {
>>> > -        /* If already set to the desired setting we skip setting it
>>> again
>>> > -         * to avoid flapping to bfd initialization state */
>>> > -        return;
>>> > -    }
>>> > -    const struct smap bfd = SMAP_CONST1(&bfd, "enable", new_setting);
>>> >      ovsrec_interface_verify_bfd(iface);
>>> > -    ovsrec_interface_set_bfd(iface, &bfd);
>>> > -    VLOG_INFO("%s BFD on interface %s", bfd_setting ? "Enabled" :
>>> > "Disabled",
>>> > -                                        iface->name);
>>> > +    ovsrec_interface_set_bfd(iface, bfd);
>>> >  }
>>> >
>>> >  void
>>> > @@ -265,6 +255,7 @@ void
>>> >  bfd_run(struct ovsdb_idl_index *sbrec_chassis_by_name,
>>> >          struct ovsdb_idl_index *sbrec_port_binding_by_datapath,
>>> >          const struct ovsrec_interface_table *interface_table,
>>> > +        const struct ovsrec_open_vswitch_table *ovs_table,
>>> >          const struct ovsrec_bridge *br_int,
>>> >          const struct sbrec_chassis *chassis_rec,
>>> >          const struct hmap *local_datapaths)
>>> > @@ -292,15 +283,41 @@ bfd_run(struct ovsdb_idl_index
>>> > *sbrec_chassis_by_name,
>>> >          }
>>> >      }
>>> >
>>> > +    const struct ovsrec_open_vswitch *cfg;
>>> > +    cfg = ovsrec_open_vswitch_table_first(ovs_table);
>>> > +    const char *min_rx = NULL;
>>> > +    const char *decay_min_rx = NULL;
>>> > +    const char *min_tx = NULL;
>>> > +    if (cfg) {
>>> > +        min_rx = smap_get(&cfg->external_ids, "ovn-bfd-min-rx");
>>> > +        decay_min_rx = smap_get(&cfg->external_ids,
>>> > "ovn-bfd-decay-min-rx");
>>> > +        min_tx = smap_get(&cfg->external_ids, "ovn-bfd-min-tx");
>>> > +    }
>>> > +    struct smap bfd = SMAP_INITIALIZER(&bfd);
>>> > +    if (min_rx) {
>>> > +        smap_add(&bfd, "min_rx", min_rx);
>>> > +    }
>>> > +    if (decay_min_rx) {
>>> > +        smap_add(&bfd, "decay_min_rx", decay_min_rx);
>>> > +    }
>>> > +    if (min_tx) {
>>> > +        smap_add(&bfd, "min_tx", min_tx);
>>> > +    }
>>> >      /* Enable or disable bfd */
>>> >      const struct ovsrec_interface *iface;
>>> >      OVSREC_INTERFACE_TABLE_FOR_EACH (iface, interface_table) {
>>> >          if (sset_contains(&tunnels, iface->name)) {
>>> > -                interface_set_bfd(
>>> > -                        iface, sset_contains(&bfd_ifaces,
>>> iface->name));
>>> > +            bool bfd_setting = sset_contains(&bfd_ifaces,
>>> iface->name);
>>> > +            smap_replace(&bfd, "enable", bfd_setting ?
>>> "true":"false");
>>> > +            if (!smap_equal(&iface->bfd, &bfd)) {
>>> > +                interface_set_bfd(iface, &bfd);
>>> > +                VLOG_INFO("%s BFD on interface %s",
>>> > +                          bfd_setting ? "Enabled" : "Disabled",
>>> > iface->name);
>>> > +            }
>>> >           }
>>> >      }
>>> >
>>> > +    smap_destroy(&bfd);
>>> >      sset_destroy(&tunnels);
>>> >      sset_destroy(&bfd_ifaces);
>>> >      sset_destroy(&bfd_chassis);
>>> > diff --git a/ovn/controller/bfd.h b/ovn/controller/bfd.h
>>> > index 7ea345a3e..9243bec69 100644
>>> > --- a/ovn/controller/bfd.h
>>> > +++ b/ovn/controller/bfd.h
>>> > @@ -21,6 +21,7 @@ struct ovsdb_idl;
>>> >  struct ovsdb_idl_index;
>>> >  struct ovsrec_bridge;
>>> >  struct ovsrec_interface_table;
>>> > +struct ovsrec_open_vswitch_table;
>>> >  struct sbrec_chassis;
>>> >  struct sset;
>>> >
>>> > @@ -28,6 +29,7 @@ void bfd_register_ovs_idl(struct ovsdb_idl *);
>>> >  void bfd_run(struct ovsdb_idl_index *sbrec_chassis_by_name,
>>> >               struct ovsdb_idl_index *sbrec_port_binding_by_datapath,
>>> >               const struct ovsrec_interface_table *interface_table,
>>> > +             const struct ovsrec_open_vswitch_table *ovs_table,
>>> >               const struct ovsrec_bridge *br_int,
>>> >               const struct sbrec_chassis *chassis_rec,
>>> >               const struct hmap *local_datapaths);
>>> > diff --git a/ovn/controller/ovn-controller.8.xml
>>> > b/ovn/controller/ovn-controller.8.xml
>>> > index 8035638b3..e536f92fa 100644
>>> > --- a/ovn/controller/ovn-controller.8.xml
>>> > +++ b/ovn/controller/ovn-controller.8.xml
>>> > @@ -159,6 +159,15 @@
>>> >          specific to this particular chassis. An example would be:
>>> >          <code>cms_option1,cms_option2:foo</code>.
>>> >        </dd>
>>> > +
>>> > +      <dt><code>external_ids:ovn-bfd-min-rx</code></dt>
>>> > +      <dt><code>external_ids:ovn-bfd-decay-min-rx</code></dt>
>>> > +      <dt><code>external_ids:ovn-bfd-min-tx</code></dt>
>>> > +      <dd>
>>> > +        These are the BFD parameters to use when
>>> > <code>ovn-controller</code>
>>> > +        enables BFD on the tunnel ports. These can be used to
>>> override the
>>> > +        default BFD parameters.
>>> > +      </dd>
>>> >      </dl>
>>> >
>>> >      <p>
>>> > diff --git a/ovn/controller/ovn-controller.c
>>> > b/ovn/controller/ovn-controller.c
>>> > index 85921a03a..bca94e521 100644
>>> > --- a/ovn/controller/ovn-controller.c
>>> > +++ b/ovn/controller/ovn-controller.c
>>> > @@ -765,10 +765,12 @@ main(int argc, char *argv[])
>>> >                                &flow_table, &group_table,
>>> &meter_table);
>>> >
>>> >                      if (chassis_id) {
>>> > -                        bfd_run(sbrec_chassis_by_name,
>>> > -                                sbrec_port_binding_by_datapath,
>>> > -
>>> > ovsrec_interface_table_get(ovs_idl_loop.idl),
>>> > -                                br_int, chassis, &local_datapaths);
>>> > +                        bfd_run(
>>> > +                            sbrec_chassis_by_name,
>>> > +                            sbrec_port_binding_by_datapath,
>>> > +
>>> ovsrec_interface_table_get(ovs_idl_loop.idl),
>>> > +
>>> > ovsrec_open_vswitch_table_get(ovs_idl_loop.idl),
>>> > +                            br_int, chassis, &local_datapaths);
>>> >                      }
>>> >                      physical_run(
>>> >                          sbrec_chassis_by_name,
>>> > diff --git a/tests/ovn.at b/tests/ovn.at
>>> > index 769e09f81..5160d74c5 100644
>>> > --- a/tests/ovn.at
>>> > +++ b/tests/ovn.at
>>> > @@ -9271,6 +9271,32 @@ AT_CHECK([ovn-sbctl --columns chassis --bare
>>> find
>>> > Port_Binding logical_port=cr-o
>>> >           [0],[[1
>>> >  ]])
>>> >
>>> > +as gw2
>>> > +ovs-vsctl set Open . external-ids:ovn-bfd-min-rx=2000
>>> > +for chassis in gw1 hv1 hv2; do
>>> > +    echo "checking gw2 -> $chassis"
>>> > +    OVS_WAIT_UNTIL([
>>> > +    bfd_cfg=$(ovs-vsctl --bare --columns bfd find Interface
>>> > name=ovn-$chassis-0)
>>> > +    test "$bfd_cfg" = "enable=true min_rx=2000"
>>> > +])
>>> > +done
>>> > +ovs-vsctl set Open . external-ids:ovn-bfd-min-tx=1500
>>> > +for chassis in gw1 hv1 hv2; do
>>> > +    echo "checking gw2 -> $chassis"
>>> > +    OVS_WAIT_UNTIL([
>>> > +    bfd_cfg=$(ovs-vsctl --bare --columns bfd find Interface
>>> > name=ovn-$chassis-0)
>>> > +    test "$bfd_cfg" = "enable=true min_rx=2000 min_tx=1500"
>>> > +])
>>> > +done
>>> > +ovs-vsctl remove Open . external-ids ovn-bfd-min-rx
>>> > +for chassis in gw1 hv1 hv2; do
>>> > +    echo "checking gw2 -> $chassis"
>>> > +    OVS_WAIT_UNTIL([
>>> > +    bfd_cfg=$(ovs-vsctl --bare --columns bfd find Interface
>>> > name=ovn-$chassis-0)
>>> > +    test "$bfd_cfg" = "enable=true min_tx=1500"
>>> > +])
>>> > +done
>>> > +
>>> >  OVN_CLEANUP([gw1],[gw2],[hv1],[hv2])
>>> >
>>> >  AT_CLEANUP
>>> > --
>>> > 2.17.1
>>> >
>>> > _______________________________________________
>>> > dev mailing list
>>> > d...@openvswitch.org
>>> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>>> >
>>> _______________________________________________
>>> dev mailing list
>>> d...@openvswitch.org
>>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>>>
>>
>>
>> --
>> Miguel Ángel Ajo
>> OSP / Networking DFG, OVN Squad Engineering
>>
>

-- 
Miguel Ángel Ajo
OSP / Networking DFG, OVN Squad Engineering
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to