Re: [ovs-dev] [PATCH ovn v3 2/2] northd: Add I-P for syncing SB address sets.

2022-11-21 Thread Numan Siddique
On Sat, Nov 19, 2022 at 8:02 PM Han Zhou  wrote:
>
> On Sat, Nov 19, 2022 at 3:35 PM Numan Siddique  wrote:
> >
> > On Sat, Nov 19, 2022 at 6:24 PM Numan Siddique 
> wrote:
> > >
> > > On Fri, Nov 18, 2022 at 7:38 PM Han Zhou  wrote:
> > > >
> > > > On Fri, Nov 18, 2022 at 3:53 PM Han Zhou  wrote:
> > > > >
> > > > >
> > > > >
> > > > > On Fri, Nov 18, 2022 at 2:58 PM Numan Siddique 
> wrote:
> > > > > >
> > > > > > '
> > > > > >
> > > > > > On Fri, Nov 18, 2022 at 5:44 PM Numan Siddique 
> wrote:
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > On Fri, Nov 18, 2022, 4:55 PM Han Zhou 
> wrote:
> > > > > > >>
> > > > > > >> On Fri, Nov 18, 2022 at 1:47 PM Numan Siddique 
> > > > wrote:
> > > > > > >> >
> > > > > > >> > On Fri, Nov 18, 2022 at 3:46 PM Han Zhou 
> wrote:
> > > > > > >> > >
> > > > > > >> > > On Fri, Nov 18, 2022 at 11:23 AM Numan Siddique <
> num...@ovn.org>
> > > > wrote:
> > > > > > >> > > >
> > > > > > >> > > > On Fri, Nov 18, 2022 at 11:27 AM Numan Siddique <
> num...@ovn.org
> > > > >
> > > > > > >> wrote:
> > > > > > >> > > > >
> > > > > > >> > > > > '
> > > > > > >> > > > >
> > > > > > >> > > > > On Fri, Nov 18, 2022 at 2:14 AM Han Zhou <
> zhou...@gmail.com>
> > > > wrote:
> > > > > > >> > > > > >
> > > > > > >> > > > > > On Tue, Nov 15, 2022 at 7:19 AM 
> wrote:
> > > > > > >> > > > > > >
> > > > > > >> > > > > > > From: Numan Siddique 
> > > > > > >> > > > > > >
> > > > > > >> > > > > > > Updates to NB address sets and NB port groups are
> handled
> > > > > > >> > > > > > > incrementally for syncing the SB address sets.
> This
> > > > patch
> > > > > > >> > > > > > > doesn't support syncing the SB Address sets for the
> > > > router
> > > > > > >> > > > > > > load balancer vips incrementally, instead a full
> > > > recompute is
> > > > > > >> > > > > > > triggered for any changes to NB load balancers, NB
> load
> > > > balancer
> > > > > > >> > > > > > > groups and NB logical routers.
> > > > > > >> > > > > > >
> > > > > > >> > > > > > > Signed-off-by: Numan Siddique 
> > > > > > >> > > > > > > ---
> > > > > > >> > > > > > >  northd/en-sb-sync.c  | 202
> > > > > > >> > > ---
> > > > > > >> > > > > > >  northd/en-sb-sync.h  |   6 ++
> > > > > > >> > > > > > >  northd/inc-proc-northd.c |  18 +++-
> > > > > > >> > > > > > >  tests/ovn-northd.at  |  52 ++
> > > > > > >> > > > > > >  4 files changed, 260 insertions(+), 18
> deletions(-)
> > > > > > >> > > > > > >
> > > > > > >> > > > > > > diff --git a/northd/en-sb-sync.c
> b/northd/en-sb-sync.c
> > > > > > >> > > > > > > index c3ba315df..e9ce3cec3 100644
> > > > > > >> > > > > > > --- a/northd/en-sb-sync.c
> > > > > > >> > > > > > > +++ b/northd/en-sb-sync.c
> > > > > > >> > > > > > > @@ -22,6 +22,7 @@
> > > > > > >> > > > > > >  #include "openvswitch/util.h"
> > > > > > >> > > > > > >
> > > > > > >> > > > > > >  #include "en-sb-sync.h"
> > > > > > >> > > > > > > +#include "include/ovn/expr.h"
> > > > > > >> > > > > > >  #include "lib/inc-proc-eng.h"
> > > > > > >> > > > > > >  #include "lib/lb.h"
> > > > > > >> > > > > > >  #include "lib/ovn-nb-idl.h"
> > > > > > >> > > > > > > @@ -41,6 +42,13 @@ static void
> sync_address_sets(const
> > > > struct
> > > > > > >> > > > > > nbrec_address_set_table *,
> > > > > > >> > > > > > >const struct
> > > > > > >> sbrec_address_set_table
> > > > > > >> > > *,
> > > > > > >> > > > > > >struct ovsdb_idl_txn
> > > > *ovnsb_txn,
> > > > > > >> > > > > > >struct hmap
> *datapaths);
> > > > > > >> > > > > > > +static const struct sbrec_address_set
> > > > > > >> > > *sb_address_set_lookup_by_name(
> > > > > > >> > > > > > > +struct ovsdb_idl_index *, const char *name);
> > > > > > >> > > > > > > +static void update_sb_addr_set(const char
> > > > **nb_addresses,
> > > > > > >> size_t
> > > > > > >> > > > > > n_addresses,
> > > > > > >> > > > > > > +   const struct
> > > > sbrec_address_set
> > > > > > >> *);
> > > > > > >> > > > > > > +static void build_port_group_address_set(const
> struct
> > > > > > >> > > nbrec_port_group *,
> > > > > > >> > > > > > > + struct
> svec
> > > > > > >> *ipv4_addrs,
> > > > > > >> > > > > > > + struct
> svec
> > > > > > >> *ipv6_addrs);
> > > > > > >> > > > > > >
> > > > > > >> > > > > > >  void *
> > > > > > >> > > > > > >  en_sb_sync_init(struct engine_node *node
> OVS_UNUSED,
> > > > > > >> > > > > > > @@ -94,6 +102,98 @@
> en_address_set_sync_cleanup(void
> > > > *data
> > > > > > >> > > OVS_UNUSED)
> > > > > > >> > > > > > >
> > > > > > >> > > > > > >  }
> > > > > > >> > > > > > >
> > > > > > >> > > > > > > +bool
> > > > > > >> > > > > > > +address_set_sync_nb_address_set_handler(struct
> > > > engine_node
> > > > > > >> *node
> > > > > > >> > > > > > OVS_UNUSED,
> > > > > > >> > > > > 

Re: [ovs-dev] [PATCH ovn v3 2/2] northd: Add I-P for syncing SB address sets.

2022-11-19 Thread Han Zhou
On Sat, Nov 19, 2022 at 3:35 PM Numan Siddique  wrote:
>
> On Sat, Nov 19, 2022 at 6:24 PM Numan Siddique 
wrote:
> >
> > On Fri, Nov 18, 2022 at 7:38 PM Han Zhou  wrote:
> > >
> > > On Fri, Nov 18, 2022 at 3:53 PM Han Zhou  wrote:
> > > >
> > > >
> > > >
> > > > On Fri, Nov 18, 2022 at 2:58 PM Numan Siddique 
wrote:
> > > > >
> > > > > '
> > > > >
> > > > > On Fri, Nov 18, 2022 at 5:44 PM Numan Siddique 
wrote:
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > On Fri, Nov 18, 2022, 4:55 PM Han Zhou 
wrote:
> > > > > >>
> > > > > >> On Fri, Nov 18, 2022 at 1:47 PM Numan Siddique 
> > > wrote:
> > > > > >> >
> > > > > >> > On Fri, Nov 18, 2022 at 3:46 PM Han Zhou 
wrote:
> > > > > >> > >
> > > > > >> > > On Fri, Nov 18, 2022 at 11:23 AM Numan Siddique <
num...@ovn.org>
> > > wrote:
> > > > > >> > > >
> > > > > >> > > > On Fri, Nov 18, 2022 at 11:27 AM Numan Siddique <
num...@ovn.org
> > > >
> > > > > >> wrote:
> > > > > >> > > > >
> > > > > >> > > > > '
> > > > > >> > > > >
> > > > > >> > > > > On Fri, Nov 18, 2022 at 2:14 AM Han Zhou <
zhou...@gmail.com>
> > > wrote:
> > > > > >> > > > > >
> > > > > >> > > > > > On Tue, Nov 15, 2022 at 7:19 AM 
wrote:
> > > > > >> > > > > > >
> > > > > >> > > > > > > From: Numan Siddique 
> > > > > >> > > > > > >
> > > > > >> > > > > > > Updates to NB address sets and NB port groups are
handled
> > > > > >> > > > > > > incrementally for syncing the SB address sets.
This
> > > patch
> > > > > >> > > > > > > doesn't support syncing the SB Address sets for the
> > > router
> > > > > >> > > > > > > load balancer vips incrementally, instead a full
> > > recompute is
> > > > > >> > > > > > > triggered for any changes to NB load balancers, NB
load
> > > balancer
> > > > > >> > > > > > > groups and NB logical routers.
> > > > > >> > > > > > >
> > > > > >> > > > > > > Signed-off-by: Numan Siddique 
> > > > > >> > > > > > > ---
> > > > > >> > > > > > >  northd/en-sb-sync.c  | 202
> > > > > >> > > ---
> > > > > >> > > > > > >  northd/en-sb-sync.h  |   6 ++
> > > > > >> > > > > > >  northd/inc-proc-northd.c |  18 +++-
> > > > > >> > > > > > >  tests/ovn-northd.at  |  52 ++
> > > > > >> > > > > > >  4 files changed, 260 insertions(+), 18
deletions(-)
> > > > > >> > > > > > >
> > > > > >> > > > > > > diff --git a/northd/en-sb-sync.c
b/northd/en-sb-sync.c
> > > > > >> > > > > > > index c3ba315df..e9ce3cec3 100644
> > > > > >> > > > > > > --- a/northd/en-sb-sync.c
> > > > > >> > > > > > > +++ b/northd/en-sb-sync.c
> > > > > >> > > > > > > @@ -22,6 +22,7 @@
> > > > > >> > > > > > >  #include "openvswitch/util.h"
> > > > > >> > > > > > >
> > > > > >> > > > > > >  #include "en-sb-sync.h"
> > > > > >> > > > > > > +#include "include/ovn/expr.h"
> > > > > >> > > > > > >  #include "lib/inc-proc-eng.h"
> > > > > >> > > > > > >  #include "lib/lb.h"
> > > > > >> > > > > > >  #include "lib/ovn-nb-idl.h"
> > > > > >> > > > > > > @@ -41,6 +42,13 @@ static void
sync_address_sets(const
> > > struct
> > > > > >> > > > > > nbrec_address_set_table *,
> > > > > >> > > > > > >const struct
> > > > > >> sbrec_address_set_table
> > > > > >> > > *,
> > > > > >> > > > > > >struct ovsdb_idl_txn
> > > *ovnsb_txn,
> > > > > >> > > > > > >struct hmap
*datapaths);
> > > > > >> > > > > > > +static const struct sbrec_address_set
> > > > > >> > > *sb_address_set_lookup_by_name(
> > > > > >> > > > > > > +struct ovsdb_idl_index *, const char *name);
> > > > > >> > > > > > > +static void update_sb_addr_set(const char
> > > **nb_addresses,
> > > > > >> size_t
> > > > > >> > > > > > n_addresses,
> > > > > >> > > > > > > +   const struct
> > > sbrec_address_set
> > > > > >> *);
> > > > > >> > > > > > > +static void build_port_group_address_set(const
struct
> > > > > >> > > nbrec_port_group *,
> > > > > >> > > > > > > + struct
svec
> > > > > >> *ipv4_addrs,
> > > > > >> > > > > > > + struct
svec
> > > > > >> *ipv6_addrs);
> > > > > >> > > > > > >
> > > > > >> > > > > > >  void *
> > > > > >> > > > > > >  en_sb_sync_init(struct engine_node *node
OVS_UNUSED,
> > > > > >> > > > > > > @@ -94,6 +102,98 @@
en_address_set_sync_cleanup(void
> > > *data
> > > > > >> > > OVS_UNUSED)
> > > > > >> > > > > > >
> > > > > >> > > > > > >  }
> > > > > >> > > > > > >
> > > > > >> > > > > > > +bool
> > > > > >> > > > > > > +address_set_sync_nb_address_set_handler(struct
> > > engine_node
> > > > > >> *node
> > > > > >> > > > > > OVS_UNUSED,
> > > > > >> > > > > > > +void *data
> > > OVS_UNUSED)
> > > > > >> > > > > > > +{
> > > > > >> > > > > > > +const struct nbrec_address_set_table
> > > *nb_address_set_table
> > > > > >> =
> > > > > >> > > > > > > +
 EN_OVSDB_GET(engine_get_input("NB_address_set",
> > > node));
> > > > > >> > > > 

Re: [ovs-dev] [PATCH ovn v3 2/2] northd: Add I-P for syncing SB address sets.

2022-11-19 Thread Numan Siddique
On Sat, Nov 19, 2022 at 6:24 PM Numan Siddique  wrote:
>
> On Fri, Nov 18, 2022 at 7:38 PM Han Zhou  wrote:
> >
> > On Fri, Nov 18, 2022 at 3:53 PM Han Zhou  wrote:
> > >
> > >
> > >
> > > On Fri, Nov 18, 2022 at 2:58 PM Numan Siddique  wrote:
> > > >
> > > > '
> > > >
> > > > On Fri, Nov 18, 2022 at 5:44 PM Numan Siddique  wrote:
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > On Fri, Nov 18, 2022, 4:55 PM Han Zhou  wrote:
> > > > >>
> > > > >> On Fri, Nov 18, 2022 at 1:47 PM Numan Siddique 
> > wrote:
> > > > >> >
> > > > >> > On Fri, Nov 18, 2022 at 3:46 PM Han Zhou  wrote:
> > > > >> > >
> > > > >> > > On Fri, Nov 18, 2022 at 11:23 AM Numan Siddique 
> > wrote:
> > > > >> > > >
> > > > >> > > > On Fri, Nov 18, 2022 at 11:27 AM Numan Siddique  > >
> > > > >> wrote:
> > > > >> > > > >
> > > > >> > > > > '
> > > > >> > > > >
> > > > >> > > > > On Fri, Nov 18, 2022 at 2:14 AM Han Zhou 
> > wrote:
> > > > >> > > > > >
> > > > >> > > > > > On Tue, Nov 15, 2022 at 7:19 AM  wrote:
> > > > >> > > > > > >
> > > > >> > > > > > > From: Numan Siddique 
> > > > >> > > > > > >
> > > > >> > > > > > > Updates to NB address sets and NB port groups are handled
> > > > >> > > > > > > incrementally for syncing the SB address sets.  This
> > patch
> > > > >> > > > > > > doesn't support syncing the SB Address sets for the
> > router
> > > > >> > > > > > > load balancer vips incrementally, instead a full
> > recompute is
> > > > >> > > > > > > triggered for any changes to NB load balancers, NB load
> > balancer
> > > > >> > > > > > > groups and NB logical routers.
> > > > >> > > > > > >
> > > > >> > > > > > > Signed-off-by: Numan Siddique 
> > > > >> > > > > > > ---
> > > > >> > > > > > >  northd/en-sb-sync.c  | 202
> > > > >> > > ---
> > > > >> > > > > > >  northd/en-sb-sync.h  |   6 ++
> > > > >> > > > > > >  northd/inc-proc-northd.c |  18 +++-
> > > > >> > > > > > >  tests/ovn-northd.at  |  52 ++
> > > > >> > > > > > >  4 files changed, 260 insertions(+), 18 deletions(-)
> > > > >> > > > > > >
> > > > >> > > > > > > diff --git a/northd/en-sb-sync.c b/northd/en-sb-sync.c
> > > > >> > > > > > > index c3ba315df..e9ce3cec3 100644
> > > > >> > > > > > > --- a/northd/en-sb-sync.c
> > > > >> > > > > > > +++ b/northd/en-sb-sync.c
> > > > >> > > > > > > @@ -22,6 +22,7 @@
> > > > >> > > > > > >  #include "openvswitch/util.h"
> > > > >> > > > > > >
> > > > >> > > > > > >  #include "en-sb-sync.h"
> > > > >> > > > > > > +#include "include/ovn/expr.h"
> > > > >> > > > > > >  #include "lib/inc-proc-eng.h"
> > > > >> > > > > > >  #include "lib/lb.h"
> > > > >> > > > > > >  #include "lib/ovn-nb-idl.h"
> > > > >> > > > > > > @@ -41,6 +42,13 @@ static void sync_address_sets(const
> > struct
> > > > >> > > > > > nbrec_address_set_table *,
> > > > >> > > > > > >const struct
> > > > >> sbrec_address_set_table
> > > > >> > > *,
> > > > >> > > > > > >struct ovsdb_idl_txn
> > *ovnsb_txn,
> > > > >> > > > > > >struct hmap *datapaths);
> > > > >> > > > > > > +static const struct sbrec_address_set
> > > > >> > > *sb_address_set_lookup_by_name(
> > > > >> > > > > > > +struct ovsdb_idl_index *, const char *name);
> > > > >> > > > > > > +static void update_sb_addr_set(const char
> > **nb_addresses,
> > > > >> size_t
> > > > >> > > > > > n_addresses,
> > > > >> > > > > > > +   const struct
> > sbrec_address_set
> > > > >> *);
> > > > >> > > > > > > +static void build_port_group_address_set(const struct
> > > > >> > > nbrec_port_group *,
> > > > >> > > > > > > + struct svec
> > > > >> *ipv4_addrs,
> > > > >> > > > > > > + struct svec
> > > > >> *ipv6_addrs);
> > > > >> > > > > > >
> > > > >> > > > > > >  void *
> > > > >> > > > > > >  en_sb_sync_init(struct engine_node *node OVS_UNUSED,
> > > > >> > > > > > > @@ -94,6 +102,98 @@ en_address_set_sync_cleanup(void
> > *data
> > > > >> > > OVS_UNUSED)
> > > > >> > > > > > >
> > > > >> > > > > > >  }
> > > > >> > > > > > >
> > > > >> > > > > > > +bool
> > > > >> > > > > > > +address_set_sync_nb_address_set_handler(struct
> > engine_node
> > > > >> *node
> > > > >> > > > > > OVS_UNUSED,
> > > > >> > > > > > > +void *data
> > OVS_UNUSED)
> > > > >> > > > > > > +{
> > > > >> > > > > > > +const struct nbrec_address_set_table
> > *nb_address_set_table
> > > > >> =
> > > > >> > > > > > > +EN_OVSDB_GET(engine_get_input("NB_address_set",
> > node));
> > > > >> > > > > > > +
> > > > >> > > > > > > +/* Return false if an address set is created or
> > deleted.
> > > > >> > > > > > > + * Handle I-P for only updated address sets. */
> > > > >> > > > > > > +const struct nbrec_address_set *nb_addr_set;
> > > > >> > > > > > > +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED
> > (nb_addr_set,
> > > > >> > 

Re: [ovs-dev] [PATCH ovn v3 2/2] northd: Add I-P for syncing SB address sets.

2022-11-19 Thread Numan Siddique
On Fri, Nov 18, 2022 at 7:38 PM Han Zhou  wrote:
>
> On Fri, Nov 18, 2022 at 3:53 PM Han Zhou  wrote:
> >
> >
> >
> > On Fri, Nov 18, 2022 at 2:58 PM Numan Siddique  wrote:
> > >
> > > '
> > >
> > > On Fri, Nov 18, 2022 at 5:44 PM Numan Siddique  wrote:
> > > >
> > > >
> > > >
> > > >
> > > > On Fri, Nov 18, 2022, 4:55 PM Han Zhou  wrote:
> > > >>
> > > >> On Fri, Nov 18, 2022 at 1:47 PM Numan Siddique 
> wrote:
> > > >> >
> > > >> > On Fri, Nov 18, 2022 at 3:46 PM Han Zhou  wrote:
> > > >> > >
> > > >> > > On Fri, Nov 18, 2022 at 11:23 AM Numan Siddique 
> wrote:
> > > >> > > >
> > > >> > > > On Fri, Nov 18, 2022 at 11:27 AM Numan Siddique  >
> > > >> wrote:
> > > >> > > > >
> > > >> > > > > '
> > > >> > > > >
> > > >> > > > > On Fri, Nov 18, 2022 at 2:14 AM Han Zhou 
> wrote:
> > > >> > > > > >
> > > >> > > > > > On Tue, Nov 15, 2022 at 7:19 AM  wrote:
> > > >> > > > > > >
> > > >> > > > > > > From: Numan Siddique 
> > > >> > > > > > >
> > > >> > > > > > > Updates to NB address sets and NB port groups are handled
> > > >> > > > > > > incrementally for syncing the SB address sets.  This
> patch
> > > >> > > > > > > doesn't support syncing the SB Address sets for the
> router
> > > >> > > > > > > load balancer vips incrementally, instead a full
> recompute is
> > > >> > > > > > > triggered for any changes to NB load balancers, NB load
> balancer
> > > >> > > > > > > groups and NB logical routers.
> > > >> > > > > > >
> > > >> > > > > > > Signed-off-by: Numan Siddique 
> > > >> > > > > > > ---
> > > >> > > > > > >  northd/en-sb-sync.c  | 202
> > > >> > > ---
> > > >> > > > > > >  northd/en-sb-sync.h  |   6 ++
> > > >> > > > > > >  northd/inc-proc-northd.c |  18 +++-
> > > >> > > > > > >  tests/ovn-northd.at  |  52 ++
> > > >> > > > > > >  4 files changed, 260 insertions(+), 18 deletions(-)
> > > >> > > > > > >
> > > >> > > > > > > diff --git a/northd/en-sb-sync.c b/northd/en-sb-sync.c
> > > >> > > > > > > index c3ba315df..e9ce3cec3 100644
> > > >> > > > > > > --- a/northd/en-sb-sync.c
> > > >> > > > > > > +++ b/northd/en-sb-sync.c
> > > >> > > > > > > @@ -22,6 +22,7 @@
> > > >> > > > > > >  #include "openvswitch/util.h"
> > > >> > > > > > >
> > > >> > > > > > >  #include "en-sb-sync.h"
> > > >> > > > > > > +#include "include/ovn/expr.h"
> > > >> > > > > > >  #include "lib/inc-proc-eng.h"
> > > >> > > > > > >  #include "lib/lb.h"
> > > >> > > > > > >  #include "lib/ovn-nb-idl.h"
> > > >> > > > > > > @@ -41,6 +42,13 @@ static void sync_address_sets(const
> struct
> > > >> > > > > > nbrec_address_set_table *,
> > > >> > > > > > >const struct
> > > >> sbrec_address_set_table
> > > >> > > *,
> > > >> > > > > > >struct ovsdb_idl_txn
> *ovnsb_txn,
> > > >> > > > > > >struct hmap *datapaths);
> > > >> > > > > > > +static const struct sbrec_address_set
> > > >> > > *sb_address_set_lookup_by_name(
> > > >> > > > > > > +struct ovsdb_idl_index *, const char *name);
> > > >> > > > > > > +static void update_sb_addr_set(const char
> **nb_addresses,
> > > >> size_t
> > > >> > > > > > n_addresses,
> > > >> > > > > > > +   const struct
> sbrec_address_set
> > > >> *);
> > > >> > > > > > > +static void build_port_group_address_set(const struct
> > > >> > > nbrec_port_group *,
> > > >> > > > > > > + struct svec
> > > >> *ipv4_addrs,
> > > >> > > > > > > + struct svec
> > > >> *ipv6_addrs);
> > > >> > > > > > >
> > > >> > > > > > >  void *
> > > >> > > > > > >  en_sb_sync_init(struct engine_node *node OVS_UNUSED,
> > > >> > > > > > > @@ -94,6 +102,98 @@ en_address_set_sync_cleanup(void
> *data
> > > >> > > OVS_UNUSED)
> > > >> > > > > > >
> > > >> > > > > > >  }
> > > >> > > > > > >
> > > >> > > > > > > +bool
> > > >> > > > > > > +address_set_sync_nb_address_set_handler(struct
> engine_node
> > > >> *node
> > > >> > > > > > OVS_UNUSED,
> > > >> > > > > > > +void *data
> OVS_UNUSED)
> > > >> > > > > > > +{
> > > >> > > > > > > +const struct nbrec_address_set_table
> *nb_address_set_table
> > > >> =
> > > >> > > > > > > +EN_OVSDB_GET(engine_get_input("NB_address_set",
> node));
> > > >> > > > > > > +
> > > >> > > > > > > +/* Return false if an address set is created or
> deleted.
> > > >> > > > > > > + * Handle I-P for only updated address sets. */
> > > >> > > > > > > +const struct nbrec_address_set *nb_addr_set;
> > > >> > > > > > > +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED
> (nb_addr_set,
> > > >> > > > > > > +
> > > >> > >  nb_address_set_table) {
> > > >> > > > > > > +if (nbrec_address_set_is_new(nb_addr_set) ||
> > > >> > > > > > > +
>  nbrec_address_set_is_deleted(nb_addr_set)) {
> > > >> > > > > > > +return false;
> > > >> > > > > > > +}
> > > >> > > > > > > +}
> 

Re: [ovs-dev] [PATCH ovn v3 2/2] northd: Add I-P for syncing SB address sets.

2022-11-18 Thread Han Zhou
On Fri, Nov 18, 2022 at 3:53 PM Han Zhou  wrote:
>
>
>
> On Fri, Nov 18, 2022 at 2:58 PM Numan Siddique  wrote:
> >
> > '
> >
> > On Fri, Nov 18, 2022 at 5:44 PM Numan Siddique  wrote:
> > >
> > >
> > >
> > >
> > > On Fri, Nov 18, 2022, 4:55 PM Han Zhou  wrote:
> > >>
> > >> On Fri, Nov 18, 2022 at 1:47 PM Numan Siddique 
wrote:
> > >> >
> > >> > On Fri, Nov 18, 2022 at 3:46 PM Han Zhou  wrote:
> > >> > >
> > >> > > On Fri, Nov 18, 2022 at 11:23 AM Numan Siddique 
wrote:
> > >> > > >
> > >> > > > On Fri, Nov 18, 2022 at 11:27 AM Numan Siddique 
> > >> wrote:
> > >> > > > >
> > >> > > > > '
> > >> > > > >
> > >> > > > > On Fri, Nov 18, 2022 at 2:14 AM Han Zhou 
wrote:
> > >> > > > > >
> > >> > > > > > On Tue, Nov 15, 2022 at 7:19 AM  wrote:
> > >> > > > > > >
> > >> > > > > > > From: Numan Siddique 
> > >> > > > > > >
> > >> > > > > > > Updates to NB address sets and NB port groups are handled
> > >> > > > > > > incrementally for syncing the SB address sets.  This
patch
> > >> > > > > > > doesn't support syncing the SB Address sets for the
router
> > >> > > > > > > load balancer vips incrementally, instead a full
recompute is
> > >> > > > > > > triggered for any changes to NB load balancers, NB load
balancer
> > >> > > > > > > groups and NB logical routers.
> > >> > > > > > >
> > >> > > > > > > Signed-off-by: Numan Siddique 
> > >> > > > > > > ---
> > >> > > > > > >  northd/en-sb-sync.c  | 202
> > >> > > ---
> > >> > > > > > >  northd/en-sb-sync.h  |   6 ++
> > >> > > > > > >  northd/inc-proc-northd.c |  18 +++-
> > >> > > > > > >  tests/ovn-northd.at  |  52 ++
> > >> > > > > > >  4 files changed, 260 insertions(+), 18 deletions(-)
> > >> > > > > > >
> > >> > > > > > > diff --git a/northd/en-sb-sync.c b/northd/en-sb-sync.c
> > >> > > > > > > index c3ba315df..e9ce3cec3 100644
> > >> > > > > > > --- a/northd/en-sb-sync.c
> > >> > > > > > > +++ b/northd/en-sb-sync.c
> > >> > > > > > > @@ -22,6 +22,7 @@
> > >> > > > > > >  #include "openvswitch/util.h"
> > >> > > > > > >
> > >> > > > > > >  #include "en-sb-sync.h"
> > >> > > > > > > +#include "include/ovn/expr.h"
> > >> > > > > > >  #include "lib/inc-proc-eng.h"
> > >> > > > > > >  #include "lib/lb.h"
> > >> > > > > > >  #include "lib/ovn-nb-idl.h"
> > >> > > > > > > @@ -41,6 +42,13 @@ static void sync_address_sets(const
struct
> > >> > > > > > nbrec_address_set_table *,
> > >> > > > > > >const struct
> > >> sbrec_address_set_table
> > >> > > *,
> > >> > > > > > >struct ovsdb_idl_txn
*ovnsb_txn,
> > >> > > > > > >struct hmap *datapaths);
> > >> > > > > > > +static const struct sbrec_address_set
> > >> > > *sb_address_set_lookup_by_name(
> > >> > > > > > > +struct ovsdb_idl_index *, const char *name);
> > >> > > > > > > +static void update_sb_addr_set(const char
**nb_addresses,
> > >> size_t
> > >> > > > > > n_addresses,
> > >> > > > > > > +   const struct
sbrec_address_set
> > >> *);
> > >> > > > > > > +static void build_port_group_address_set(const struct
> > >> > > nbrec_port_group *,
> > >> > > > > > > + struct svec
> > >> *ipv4_addrs,
> > >> > > > > > > + struct svec
> > >> *ipv6_addrs);
> > >> > > > > > >
> > >> > > > > > >  void *
> > >> > > > > > >  en_sb_sync_init(struct engine_node *node OVS_UNUSED,
> > >> > > > > > > @@ -94,6 +102,98 @@ en_address_set_sync_cleanup(void
*data
> > >> > > OVS_UNUSED)
> > >> > > > > > >
> > >> > > > > > >  }
> > >> > > > > > >
> > >> > > > > > > +bool
> > >> > > > > > > +address_set_sync_nb_address_set_handler(struct
engine_node
> > >> *node
> > >> > > > > > OVS_UNUSED,
> > >> > > > > > > +void *data
OVS_UNUSED)
> > >> > > > > > > +{
> > >> > > > > > > +const struct nbrec_address_set_table
*nb_address_set_table
> > >> =
> > >> > > > > > > +EN_OVSDB_GET(engine_get_input("NB_address_set",
node));
> > >> > > > > > > +
> > >> > > > > > > +/* Return false if an address set is created or
deleted.
> > >> > > > > > > + * Handle I-P for only updated address sets. */
> > >> > > > > > > +const struct nbrec_address_set *nb_addr_set;
> > >> > > > > > > +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED
(nb_addr_set,
> > >> > > > > > > +
> > >> > >  nb_address_set_table) {
> > >> > > > > > > +if (nbrec_address_set_is_new(nb_addr_set) ||
> > >> > > > > > > +
 nbrec_address_set_is_deleted(nb_addr_set)) {
> > >> > > > > > > +return false;
> > >> > > > > > > +}
> > >> > > > > > > +}
> > >> > > > > > > +
> > >> > > > > > > +struct ovsdb_idl_index *sbrec_address_set_by_name =
> > >> > > > > > > +engine_ovsdb_node_get_index(
> > >> > > > > > > +engine_get_input("SB_address_set",
node),
> > >> > > > > > > +"sbrec_address_set_by_name");
> > >> > > > > 

Re: [ovs-dev] [PATCH ovn v3 2/2] northd: Add I-P for syncing SB address sets.

2022-11-18 Thread Han Zhou
On Fri, Nov 18, 2022 at 2:58 PM Numan Siddique  wrote:
>
> '
>
> On Fri, Nov 18, 2022 at 5:44 PM Numan Siddique  wrote:
> >
> >
> >
> >
> > On Fri, Nov 18, 2022, 4:55 PM Han Zhou  wrote:
> >>
> >> On Fri, Nov 18, 2022 at 1:47 PM Numan Siddique  wrote:
> >> >
> >> > On Fri, Nov 18, 2022 at 3:46 PM Han Zhou  wrote:
> >> > >
> >> > > On Fri, Nov 18, 2022 at 11:23 AM Numan Siddique 
wrote:
> >> > > >
> >> > > > On Fri, Nov 18, 2022 at 11:27 AM Numan Siddique 
> >> wrote:
> >> > > > >
> >> > > > > '
> >> > > > >
> >> > > > > On Fri, Nov 18, 2022 at 2:14 AM Han Zhou 
wrote:
> >> > > > > >
> >> > > > > > On Tue, Nov 15, 2022 at 7:19 AM  wrote:
> >> > > > > > >
> >> > > > > > > From: Numan Siddique 
> >> > > > > > >
> >> > > > > > > Updates to NB address sets and NB port groups are handled
> >> > > > > > > incrementally for syncing the SB address sets.  This patch
> >> > > > > > > doesn't support syncing the SB Address sets for the router
> >> > > > > > > load balancer vips incrementally, instead a full recompute
is
> >> > > > > > > triggered for any changes to NB load balancers, NB load
balancer
> >> > > > > > > groups and NB logical routers.
> >> > > > > > >
> >> > > > > > > Signed-off-by: Numan Siddique 
> >> > > > > > > ---
> >> > > > > > >  northd/en-sb-sync.c  | 202
> >> > > ---
> >> > > > > > >  northd/en-sb-sync.h  |   6 ++
> >> > > > > > >  northd/inc-proc-northd.c |  18 +++-
> >> > > > > > >  tests/ovn-northd.at  |  52 ++
> >> > > > > > >  4 files changed, 260 insertions(+), 18 deletions(-)
> >> > > > > > >
> >> > > > > > > diff --git a/northd/en-sb-sync.c b/northd/en-sb-sync.c
> >> > > > > > > index c3ba315df..e9ce3cec3 100644
> >> > > > > > > --- a/northd/en-sb-sync.c
> >> > > > > > > +++ b/northd/en-sb-sync.c
> >> > > > > > > @@ -22,6 +22,7 @@
> >> > > > > > >  #include "openvswitch/util.h"
> >> > > > > > >
> >> > > > > > >  #include "en-sb-sync.h"
> >> > > > > > > +#include "include/ovn/expr.h"
> >> > > > > > >  #include "lib/inc-proc-eng.h"
> >> > > > > > >  #include "lib/lb.h"
> >> > > > > > >  #include "lib/ovn-nb-idl.h"
> >> > > > > > > @@ -41,6 +42,13 @@ static void sync_address_sets(const
struct
> >> > > > > > nbrec_address_set_table *,
> >> > > > > > >const struct
> >> sbrec_address_set_table
> >> > > *,
> >> > > > > > >struct ovsdb_idl_txn
*ovnsb_txn,
> >> > > > > > >struct hmap *datapaths);
> >> > > > > > > +static const struct sbrec_address_set
> >> > > *sb_address_set_lookup_by_name(
> >> > > > > > > +struct ovsdb_idl_index *, const char *name);
> >> > > > > > > +static void update_sb_addr_set(const char **nb_addresses,
> >> size_t
> >> > > > > > n_addresses,
> >> > > > > > > +   const struct
sbrec_address_set
> >> *);
> >> > > > > > > +static void build_port_group_address_set(const struct
> >> > > nbrec_port_group *,
> >> > > > > > > + struct svec
> >> *ipv4_addrs,
> >> > > > > > > + struct svec
> >> *ipv6_addrs);
> >> > > > > > >
> >> > > > > > >  void *
> >> > > > > > >  en_sb_sync_init(struct engine_node *node OVS_UNUSED,
> >> > > > > > > @@ -94,6 +102,98 @@ en_address_set_sync_cleanup(void *data
> >> > > OVS_UNUSED)
> >> > > > > > >
> >> > > > > > >  }
> >> > > > > > >
> >> > > > > > > +bool
> >> > > > > > > +address_set_sync_nb_address_set_handler(struct engine_node
> >> *node
> >> > > > > > OVS_UNUSED,
> >> > > > > > > +void *data
OVS_UNUSED)
> >> > > > > > > +{
> >> > > > > > > +const struct nbrec_address_set_table
*nb_address_set_table
> >> =
> >> > > > > > > +EN_OVSDB_GET(engine_get_input("NB_address_set",
node));
> >> > > > > > > +
> >> > > > > > > +/* Return false if an address set is created or
deleted.
> >> > > > > > > + * Handle I-P for only updated address sets. */
> >> > > > > > > +const struct nbrec_address_set *nb_addr_set;
> >> > > > > > > +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
> >> > > > > > > +
> >> > >  nb_address_set_table) {
> >> > > > > > > +if (nbrec_address_set_is_new(nb_addr_set) ||
> >> > > > > > > +
 nbrec_address_set_is_deleted(nb_addr_set)) {
> >> > > > > > > +return false;
> >> > > > > > > +}
> >> > > > > > > +}
> >> > > > > > > +
> >> > > > > > > +struct ovsdb_idl_index *sbrec_address_set_by_name =
> >> > > > > > > +engine_ovsdb_node_get_index(
> >> > > > > > > +engine_get_input("SB_address_set", node),
> >> > > > > > > +"sbrec_address_set_by_name");
> >> > > > > > > +
> >> > > > > > > +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
> >> > > > > > > +
> >> > >  nb_address_set_table) {
> >> > > > > > > +const struct sbrec_address_set *sb_addr_set =
> >> > > > > > > +
> >> > >  

Re: [ovs-dev] [PATCH ovn v3 2/2] northd: Add I-P for syncing SB address sets.

2022-11-18 Thread Numan Siddique
'

On Fri, Nov 18, 2022 at 5:44 PM Numan Siddique  wrote:
>
>
>
>
> On Fri, Nov 18, 2022, 4:55 PM Han Zhou  wrote:
>>
>> On Fri, Nov 18, 2022 at 1:47 PM Numan Siddique  wrote:
>> >
>> > On Fri, Nov 18, 2022 at 3:46 PM Han Zhou  wrote:
>> > >
>> > > On Fri, Nov 18, 2022 at 11:23 AM Numan Siddique  wrote:
>> > > >
>> > > > On Fri, Nov 18, 2022 at 11:27 AM Numan Siddique 
>> wrote:
>> > > > >
>> > > > > '
>> > > > >
>> > > > > On Fri, Nov 18, 2022 at 2:14 AM Han Zhou  wrote:
>> > > > > >
>> > > > > > On Tue, Nov 15, 2022 at 7:19 AM  wrote:
>> > > > > > >
>> > > > > > > From: Numan Siddique 
>> > > > > > >
>> > > > > > > Updates to NB address sets and NB port groups are handled
>> > > > > > > incrementally for syncing the SB address sets.  This patch
>> > > > > > > doesn't support syncing the SB Address sets for the router
>> > > > > > > load balancer vips incrementally, instead a full recompute is
>> > > > > > > triggered for any changes to NB load balancers, NB load balancer
>> > > > > > > groups and NB logical routers.
>> > > > > > >
>> > > > > > > Signed-off-by: Numan Siddique 
>> > > > > > > ---
>> > > > > > >  northd/en-sb-sync.c  | 202
>> > > ---
>> > > > > > >  northd/en-sb-sync.h  |   6 ++
>> > > > > > >  northd/inc-proc-northd.c |  18 +++-
>> > > > > > >  tests/ovn-northd.at  |  52 ++
>> > > > > > >  4 files changed, 260 insertions(+), 18 deletions(-)
>> > > > > > >
>> > > > > > > diff --git a/northd/en-sb-sync.c b/northd/en-sb-sync.c
>> > > > > > > index c3ba315df..e9ce3cec3 100644
>> > > > > > > --- a/northd/en-sb-sync.c
>> > > > > > > +++ b/northd/en-sb-sync.c
>> > > > > > > @@ -22,6 +22,7 @@
>> > > > > > >  #include "openvswitch/util.h"
>> > > > > > >
>> > > > > > >  #include "en-sb-sync.h"
>> > > > > > > +#include "include/ovn/expr.h"
>> > > > > > >  #include "lib/inc-proc-eng.h"
>> > > > > > >  #include "lib/lb.h"
>> > > > > > >  #include "lib/ovn-nb-idl.h"
>> > > > > > > @@ -41,6 +42,13 @@ static void sync_address_sets(const struct
>> > > > > > nbrec_address_set_table *,
>> > > > > > >const struct
>> sbrec_address_set_table
>> > > *,
>> > > > > > >struct ovsdb_idl_txn *ovnsb_txn,
>> > > > > > >struct hmap *datapaths);
>> > > > > > > +static const struct sbrec_address_set
>> > > *sb_address_set_lookup_by_name(
>> > > > > > > +struct ovsdb_idl_index *, const char *name);
>> > > > > > > +static void update_sb_addr_set(const char **nb_addresses,
>> size_t
>> > > > > > n_addresses,
>> > > > > > > +   const struct sbrec_address_set
>> *);
>> > > > > > > +static void build_port_group_address_set(const struct
>> > > nbrec_port_group *,
>> > > > > > > + struct svec
>> *ipv4_addrs,
>> > > > > > > + struct svec
>> *ipv6_addrs);
>> > > > > > >
>> > > > > > >  void *
>> > > > > > >  en_sb_sync_init(struct engine_node *node OVS_UNUSED,
>> > > > > > > @@ -94,6 +102,98 @@ en_address_set_sync_cleanup(void *data
>> > > OVS_UNUSED)
>> > > > > > >
>> > > > > > >  }
>> > > > > > >
>> > > > > > > +bool
>> > > > > > > +address_set_sync_nb_address_set_handler(struct engine_node
>> *node
>> > > > > > OVS_UNUSED,
>> > > > > > > +void *data OVS_UNUSED)
>> > > > > > > +{
>> > > > > > > +const struct nbrec_address_set_table *nb_address_set_table
>> =
>> > > > > > > +EN_OVSDB_GET(engine_get_input("NB_address_set", node));
>> > > > > > > +
>> > > > > > > +/* Return false if an address set is created or deleted.
>> > > > > > > + * Handle I-P for only updated address sets. */
>> > > > > > > +const struct nbrec_address_set *nb_addr_set;
>> > > > > > > +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
>> > > > > > > +
>> > >  nb_address_set_table) {
>> > > > > > > +if (nbrec_address_set_is_new(nb_addr_set) ||
>> > > > > > > +nbrec_address_set_is_deleted(nb_addr_set)) {
>> > > > > > > +return false;
>> > > > > > > +}
>> > > > > > > +}
>> > > > > > > +
>> > > > > > > +struct ovsdb_idl_index *sbrec_address_set_by_name =
>> > > > > > > +engine_ovsdb_node_get_index(
>> > > > > > > +engine_get_input("SB_address_set", node),
>> > > > > > > +"sbrec_address_set_by_name");
>> > > > > > > +
>> > > > > > > +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
>> > > > > > > +
>> > >  nb_address_set_table) {
>> > > > > > > +const struct sbrec_address_set *sb_addr_set =
>> > > > > > > +
>> > >  sb_address_set_lookup_by_name(sbrec_address_set_by_name,
>> > > > > > > +  nb_addr_set->name);
>> > > > > > > +if (!sb_addr_set) {
>> > > > > > > +return false;
>> > > > > > > +}
>> > > > > > > +update_sb_addr_set((const char **)
>> 

Re: [ovs-dev] [PATCH ovn v3 2/2] northd: Add I-P for syncing SB address sets.

2022-11-18 Thread Numan Siddique
On Fri, Nov 18, 2022, 4:55 PM Han Zhou  wrote:

> On Fri, Nov 18, 2022 at 1:47 PM Numan Siddique  wrote:
> >
> > On Fri, Nov 18, 2022 at 3:46 PM Han Zhou  wrote:
> > >
> > > On Fri, Nov 18, 2022 at 11:23 AM Numan Siddique 
> wrote:
> > > >
> > > > On Fri, Nov 18, 2022 at 11:27 AM Numan Siddique 
> wrote:
> > > > >
> > > > > '
> > > > >
> > > > > On Fri, Nov 18, 2022 at 2:14 AM Han Zhou 
> wrote:
> > > > > >
> > > > > > On Tue, Nov 15, 2022 at 7:19 AM  wrote:
> > > > > > >
> > > > > > > From: Numan Siddique 
> > > > > > >
> > > > > > > Updates to NB address sets and NB port groups are handled
> > > > > > > incrementally for syncing the SB address sets.  This patch
> > > > > > > doesn't support syncing the SB Address sets for the router
> > > > > > > load balancer vips incrementally, instead a full recompute is
> > > > > > > triggered for any changes to NB load balancers, NB load
> balancer
> > > > > > > groups and NB logical routers.
> > > > > > >
> > > > > > > Signed-off-by: Numan Siddique 
> > > > > > > ---
> > > > > > >  northd/en-sb-sync.c  | 202
> > > ---
> > > > > > >  northd/en-sb-sync.h  |   6 ++
> > > > > > >  northd/inc-proc-northd.c |  18 +++-
> > > > > > >  tests/ovn-northd.at  |  52 ++
> > > > > > >  4 files changed, 260 insertions(+), 18 deletions(-)
> > > > > > >
> > > > > > > diff --git a/northd/en-sb-sync.c b/northd/en-sb-sync.c
> > > > > > > index c3ba315df..e9ce3cec3 100644
> > > > > > > --- a/northd/en-sb-sync.c
> > > > > > > +++ b/northd/en-sb-sync.c
> > > > > > > @@ -22,6 +22,7 @@
> > > > > > >  #include "openvswitch/util.h"
> > > > > > >
> > > > > > >  #include "en-sb-sync.h"
> > > > > > > +#include "include/ovn/expr.h"
> > > > > > >  #include "lib/inc-proc-eng.h"
> > > > > > >  #include "lib/lb.h"
> > > > > > >  #include "lib/ovn-nb-idl.h"
> > > > > > > @@ -41,6 +42,13 @@ static void sync_address_sets(const struct
> > > > > > nbrec_address_set_table *,
> > > > > > >const struct
> sbrec_address_set_table
> > > *,
> > > > > > >struct ovsdb_idl_txn *ovnsb_txn,
> > > > > > >struct hmap *datapaths);
> > > > > > > +static const struct sbrec_address_set
> > > *sb_address_set_lookup_by_name(
> > > > > > > +struct ovsdb_idl_index *, const char *name);
> > > > > > > +static void update_sb_addr_set(const char **nb_addresses,
> size_t
> > > > > > n_addresses,
> > > > > > > +   const struct sbrec_address_set
> *);
> > > > > > > +static void build_port_group_address_set(const struct
> > > nbrec_port_group *,
> > > > > > > + struct svec
> *ipv4_addrs,
> > > > > > > + struct svec
> *ipv6_addrs);
> > > > > > >
> > > > > > >  void *
> > > > > > >  en_sb_sync_init(struct engine_node *node OVS_UNUSED,
> > > > > > > @@ -94,6 +102,98 @@ en_address_set_sync_cleanup(void *data
> > > OVS_UNUSED)
> > > > > > >
> > > > > > >  }
> > > > > > >
> > > > > > > +bool
> > > > > > > +address_set_sync_nb_address_set_handler(struct engine_node
> *node
> > > > > > OVS_UNUSED,
> > > > > > > +void *data OVS_UNUSED)
> > > > > > > +{
> > > > > > > +const struct nbrec_address_set_table *nb_address_set_table
> =
> > > > > > > +EN_OVSDB_GET(engine_get_input("NB_address_set",
> node));
> > > > > > > +
> > > > > > > +/* Return false if an address set is created or deleted.
> > > > > > > + * Handle I-P for only updated address sets. */
> > > > > > > +const struct nbrec_address_set *nb_addr_set;
> > > > > > > +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
> > > > > > > +
> > >  nb_address_set_table) {
> > > > > > > +if (nbrec_address_set_is_new(nb_addr_set) ||
> > > > > > > +nbrec_address_set_is_deleted(nb_addr_set)) {
> > > > > > > +return false;
> > > > > > > +}
> > > > > > > +}
> > > > > > > +
> > > > > > > +struct ovsdb_idl_index *sbrec_address_set_by_name =
> > > > > > > +engine_ovsdb_node_get_index(
> > > > > > > +engine_get_input("SB_address_set", node),
> > > > > > > +"sbrec_address_set_by_name");
> > > > > > > +
> > > > > > > +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
> > > > > > > +
> > >  nb_address_set_table) {
> > > > > > > +const struct sbrec_address_set *sb_addr_set =
> > > > > > > +
> > >  sb_address_set_lookup_by_name(sbrec_address_set_by_name,
> > > > > > > +  nb_addr_set->name);
> > > > > > > +if (!sb_addr_set) {
> > > > > > > +return false;
> > > > > > > +}
> > > > > > > +update_sb_addr_set((const char **)
> nb_addr_set->addresses,
> > > > > > > +   nb_addr_set->n_addresses,
> sb_addr_set);
> > > > > > > +}
> > > > > > > +
> > > > > > > +return true;
> > > 

Re: [ovs-dev] [PATCH ovn v3 2/2] northd: Add I-P for syncing SB address sets.

2022-11-18 Thread Han Zhou
On Fri, Nov 18, 2022 at 1:47 PM Numan Siddique  wrote:
>
> On Fri, Nov 18, 2022 at 3:46 PM Han Zhou  wrote:
> >
> > On Fri, Nov 18, 2022 at 11:23 AM Numan Siddique  wrote:
> > >
> > > On Fri, Nov 18, 2022 at 11:27 AM Numan Siddique 
wrote:
> > > >
> > > > '
> > > >
> > > > On Fri, Nov 18, 2022 at 2:14 AM Han Zhou  wrote:
> > > > >
> > > > > On Tue, Nov 15, 2022 at 7:19 AM  wrote:
> > > > > >
> > > > > > From: Numan Siddique 
> > > > > >
> > > > > > Updates to NB address sets and NB port groups are handled
> > > > > > incrementally for syncing the SB address sets.  This patch
> > > > > > doesn't support syncing the SB Address sets for the router
> > > > > > load balancer vips incrementally, instead a full recompute is
> > > > > > triggered for any changes to NB load balancers, NB load balancer
> > > > > > groups and NB logical routers.
> > > > > >
> > > > > > Signed-off-by: Numan Siddique 
> > > > > > ---
> > > > > >  northd/en-sb-sync.c  | 202
> > ---
> > > > > >  northd/en-sb-sync.h  |   6 ++
> > > > > >  northd/inc-proc-northd.c |  18 +++-
> > > > > >  tests/ovn-northd.at  |  52 ++
> > > > > >  4 files changed, 260 insertions(+), 18 deletions(-)
> > > > > >
> > > > > > diff --git a/northd/en-sb-sync.c b/northd/en-sb-sync.c
> > > > > > index c3ba315df..e9ce3cec3 100644
> > > > > > --- a/northd/en-sb-sync.c
> > > > > > +++ b/northd/en-sb-sync.c
> > > > > > @@ -22,6 +22,7 @@
> > > > > >  #include "openvswitch/util.h"
> > > > > >
> > > > > >  #include "en-sb-sync.h"
> > > > > > +#include "include/ovn/expr.h"
> > > > > >  #include "lib/inc-proc-eng.h"
> > > > > >  #include "lib/lb.h"
> > > > > >  #include "lib/ovn-nb-idl.h"
> > > > > > @@ -41,6 +42,13 @@ static void sync_address_sets(const struct
> > > > > nbrec_address_set_table *,
> > > > > >const struct
sbrec_address_set_table
> > *,
> > > > > >struct ovsdb_idl_txn *ovnsb_txn,
> > > > > >struct hmap *datapaths);
> > > > > > +static const struct sbrec_address_set
> > *sb_address_set_lookup_by_name(
> > > > > > +struct ovsdb_idl_index *, const char *name);
> > > > > > +static void update_sb_addr_set(const char **nb_addresses,
size_t
> > > > > n_addresses,
> > > > > > +   const struct sbrec_address_set
*);
> > > > > > +static void build_port_group_address_set(const struct
> > nbrec_port_group *,
> > > > > > + struct svec
*ipv4_addrs,
> > > > > > + struct svec
*ipv6_addrs);
> > > > > >
> > > > > >  void *
> > > > > >  en_sb_sync_init(struct engine_node *node OVS_UNUSED,
> > > > > > @@ -94,6 +102,98 @@ en_address_set_sync_cleanup(void *data
> > OVS_UNUSED)
> > > > > >
> > > > > >  }
> > > > > >
> > > > > > +bool
> > > > > > +address_set_sync_nb_address_set_handler(struct engine_node
*node
> > > > > OVS_UNUSED,
> > > > > > +void *data OVS_UNUSED)
> > > > > > +{
> > > > > > +const struct nbrec_address_set_table *nb_address_set_table
=
> > > > > > +EN_OVSDB_GET(engine_get_input("NB_address_set", node));
> > > > > > +
> > > > > > +/* Return false if an address set is created or deleted.
> > > > > > + * Handle I-P for only updated address sets. */
> > > > > > +const struct nbrec_address_set *nb_addr_set;
> > > > > > +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
> > > > > > +
> >  nb_address_set_table) {
> > > > > > +if (nbrec_address_set_is_new(nb_addr_set) ||
> > > > > > +nbrec_address_set_is_deleted(nb_addr_set)) {
> > > > > > +return false;
> > > > > > +}
> > > > > > +}
> > > > > > +
> > > > > > +struct ovsdb_idl_index *sbrec_address_set_by_name =
> > > > > > +engine_ovsdb_node_get_index(
> > > > > > +engine_get_input("SB_address_set", node),
> > > > > > +"sbrec_address_set_by_name");
> > > > > > +
> > > > > > +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
> > > > > > +
> >  nb_address_set_table) {
> > > > > > +const struct sbrec_address_set *sb_addr_set =
> > > > > > +
> >  sb_address_set_lookup_by_name(sbrec_address_set_by_name,
> > > > > > +  nb_addr_set->name);
> > > > > > +if (!sb_addr_set) {
> > > > > > +return false;
> > > > > > +}
> > > > > > +update_sb_addr_set((const char **)
nb_addr_set->addresses,
> > > > > > +   nb_addr_set->n_addresses,
sb_addr_set);
> > > > > > +}
> > > > > > +
> > > > > > +return true;
> > > > > > +}
> > > > > > +
> > > > > > +bool
> > > > > > +address_set_sync_nb_port_group_handler(struct engine_node *node
> > > > > OVS_UNUSED,
> > > > > > +   void *data OVS_UNUSED)
> > > > > > +{
> > > > > > +const struct nbrec_port_group *nb_pg;
> > > 

Re: [ovs-dev] [PATCH ovn v3 2/2] northd: Add I-P for syncing SB address sets.

2022-11-18 Thread Numan Siddique
On Fri, Nov 18, 2022 at 3:46 PM Han Zhou  wrote:
>
> On Fri, Nov 18, 2022 at 11:23 AM Numan Siddique  wrote:
> >
> > On Fri, Nov 18, 2022 at 11:27 AM Numan Siddique  wrote:
> > >
> > > '
> > >
> > > On Fri, Nov 18, 2022 at 2:14 AM Han Zhou  wrote:
> > > >
> > > > On Tue, Nov 15, 2022 at 7:19 AM  wrote:
> > > > >
> > > > > From: Numan Siddique 
> > > > >
> > > > > Updates to NB address sets and NB port groups are handled
> > > > > incrementally for syncing the SB address sets.  This patch
> > > > > doesn't support syncing the SB Address sets for the router
> > > > > load balancer vips incrementally, instead a full recompute is
> > > > > triggered for any changes to NB load balancers, NB load balancer
> > > > > groups and NB logical routers.
> > > > >
> > > > > Signed-off-by: Numan Siddique 
> > > > > ---
> > > > >  northd/en-sb-sync.c  | 202
> ---
> > > > >  northd/en-sb-sync.h  |   6 ++
> > > > >  northd/inc-proc-northd.c |  18 +++-
> > > > >  tests/ovn-northd.at  |  52 ++
> > > > >  4 files changed, 260 insertions(+), 18 deletions(-)
> > > > >
> > > > > diff --git a/northd/en-sb-sync.c b/northd/en-sb-sync.c
> > > > > index c3ba315df..e9ce3cec3 100644
> > > > > --- a/northd/en-sb-sync.c
> > > > > +++ b/northd/en-sb-sync.c
> > > > > @@ -22,6 +22,7 @@
> > > > >  #include "openvswitch/util.h"
> > > > >
> > > > >  #include "en-sb-sync.h"
> > > > > +#include "include/ovn/expr.h"
> > > > >  #include "lib/inc-proc-eng.h"
> > > > >  #include "lib/lb.h"
> > > > >  #include "lib/ovn-nb-idl.h"
> > > > > @@ -41,6 +42,13 @@ static void sync_address_sets(const struct
> > > > nbrec_address_set_table *,
> > > > >const struct sbrec_address_set_table
> *,
> > > > >struct ovsdb_idl_txn *ovnsb_txn,
> > > > >struct hmap *datapaths);
> > > > > +static const struct sbrec_address_set
> *sb_address_set_lookup_by_name(
> > > > > +struct ovsdb_idl_index *, const char *name);
> > > > > +static void update_sb_addr_set(const char **nb_addresses, size_t
> > > > n_addresses,
> > > > > +   const struct sbrec_address_set *);
> > > > > +static void build_port_group_address_set(const struct
> nbrec_port_group *,
> > > > > + struct svec *ipv4_addrs,
> > > > > + struct svec *ipv6_addrs);
> > > > >
> > > > >  void *
> > > > >  en_sb_sync_init(struct engine_node *node OVS_UNUSED,
> > > > > @@ -94,6 +102,98 @@ en_address_set_sync_cleanup(void *data
> OVS_UNUSED)
> > > > >
> > > > >  }
> > > > >
> > > > > +bool
> > > > > +address_set_sync_nb_address_set_handler(struct engine_node *node
> > > > OVS_UNUSED,
> > > > > +void *data OVS_UNUSED)
> > > > > +{
> > > > > +const struct nbrec_address_set_table *nb_address_set_table =
> > > > > +EN_OVSDB_GET(engine_get_input("NB_address_set", node));
> > > > > +
> > > > > +/* Return false if an address set is created or deleted.
> > > > > + * Handle I-P for only updated address sets. */
> > > > > +const struct nbrec_address_set *nb_addr_set;
> > > > > +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
> > > > > +
>  nb_address_set_table) {
> > > > > +if (nbrec_address_set_is_new(nb_addr_set) ||
> > > > > +nbrec_address_set_is_deleted(nb_addr_set)) {
> > > > > +return false;
> > > > > +}
> > > > > +}
> > > > > +
> > > > > +struct ovsdb_idl_index *sbrec_address_set_by_name =
> > > > > +engine_ovsdb_node_get_index(
> > > > > +engine_get_input("SB_address_set", node),
> > > > > +"sbrec_address_set_by_name");
> > > > > +
> > > > > +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
> > > > > +
>  nb_address_set_table) {
> > > > > +const struct sbrec_address_set *sb_addr_set =
> > > > > +
>  sb_address_set_lookup_by_name(sbrec_address_set_by_name,
> > > > > +  nb_addr_set->name);
> > > > > +if (!sb_addr_set) {
> > > > > +return false;
> > > > > +}
> > > > > +update_sb_addr_set((const char **) nb_addr_set->addresses,
> > > > > +   nb_addr_set->n_addresses, sb_addr_set);
> > > > > +}
> > > > > +
> > > > > +return true;
> > > > > +}
> > > > > +
> > > > > +bool
> > > > > +address_set_sync_nb_port_group_handler(struct engine_node *node
> > > > OVS_UNUSED,
> > > > > +   void *data OVS_UNUSED)
> > > > > +{
> > > > > +const struct nbrec_port_group *nb_pg;
> > > > > +const struct nbrec_port_group_table *nb_port_group_table =
> > > > > +EN_OVSDB_GET(engine_get_input("NB_port_group", node));
> > > > > +NBREC_PORT_GROUP_TABLE_FOR_EACH_TRACKED (nb_pg,
> nb_port_group_table)
> > > > {
> > > > > +if 

Re: [ovs-dev] [PATCH ovn v3 2/2] northd: Add I-P for syncing SB address sets.

2022-11-18 Thread Han Zhou
On Fri, Nov 18, 2022 at 11:23 AM Numan Siddique  wrote:
>
> On Fri, Nov 18, 2022 at 11:27 AM Numan Siddique  wrote:
> >
> > '
> >
> > On Fri, Nov 18, 2022 at 2:14 AM Han Zhou  wrote:
> > >
> > > On Tue, Nov 15, 2022 at 7:19 AM  wrote:
> > > >
> > > > From: Numan Siddique 
> > > >
> > > > Updates to NB address sets and NB port groups are handled
> > > > incrementally for syncing the SB address sets.  This patch
> > > > doesn't support syncing the SB Address sets for the router
> > > > load balancer vips incrementally, instead a full recompute is
> > > > triggered for any changes to NB load balancers, NB load balancer
> > > > groups and NB logical routers.
> > > >
> > > > Signed-off-by: Numan Siddique 
> > > > ---
> > > >  northd/en-sb-sync.c  | 202
---
> > > >  northd/en-sb-sync.h  |   6 ++
> > > >  northd/inc-proc-northd.c |  18 +++-
> > > >  tests/ovn-northd.at  |  52 ++
> > > >  4 files changed, 260 insertions(+), 18 deletions(-)
> > > >
> > > > diff --git a/northd/en-sb-sync.c b/northd/en-sb-sync.c
> > > > index c3ba315df..e9ce3cec3 100644
> > > > --- a/northd/en-sb-sync.c
> > > > +++ b/northd/en-sb-sync.c
> > > > @@ -22,6 +22,7 @@
> > > >  #include "openvswitch/util.h"
> > > >
> > > >  #include "en-sb-sync.h"
> > > > +#include "include/ovn/expr.h"
> > > >  #include "lib/inc-proc-eng.h"
> > > >  #include "lib/lb.h"
> > > >  #include "lib/ovn-nb-idl.h"
> > > > @@ -41,6 +42,13 @@ static void sync_address_sets(const struct
> > > nbrec_address_set_table *,
> > > >const struct sbrec_address_set_table
*,
> > > >struct ovsdb_idl_txn *ovnsb_txn,
> > > >struct hmap *datapaths);
> > > > +static const struct sbrec_address_set
*sb_address_set_lookup_by_name(
> > > > +struct ovsdb_idl_index *, const char *name);
> > > > +static void update_sb_addr_set(const char **nb_addresses, size_t
> > > n_addresses,
> > > > +   const struct sbrec_address_set *);
> > > > +static void build_port_group_address_set(const struct
nbrec_port_group *,
> > > > + struct svec *ipv4_addrs,
> > > > + struct svec *ipv6_addrs);
> > > >
> > > >  void *
> > > >  en_sb_sync_init(struct engine_node *node OVS_UNUSED,
> > > > @@ -94,6 +102,98 @@ en_address_set_sync_cleanup(void *data
OVS_UNUSED)
> > > >
> > > >  }
> > > >
> > > > +bool
> > > > +address_set_sync_nb_address_set_handler(struct engine_node *node
> > > OVS_UNUSED,
> > > > +void *data OVS_UNUSED)
> > > > +{
> > > > +const struct nbrec_address_set_table *nb_address_set_table =
> > > > +EN_OVSDB_GET(engine_get_input("NB_address_set", node));
> > > > +
> > > > +/* Return false if an address set is created or deleted.
> > > > + * Handle I-P for only updated address sets. */
> > > > +const struct nbrec_address_set *nb_addr_set;
> > > > +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
> > > > +
 nb_address_set_table) {
> > > > +if (nbrec_address_set_is_new(nb_addr_set) ||
> > > > +nbrec_address_set_is_deleted(nb_addr_set)) {
> > > > +return false;
> > > > +}
> > > > +}
> > > > +
> > > > +struct ovsdb_idl_index *sbrec_address_set_by_name =
> > > > +engine_ovsdb_node_get_index(
> > > > +engine_get_input("SB_address_set", node),
> > > > +"sbrec_address_set_by_name");
> > > > +
> > > > +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
> > > > +
 nb_address_set_table) {
> > > > +const struct sbrec_address_set *sb_addr_set =
> > > > +
 sb_address_set_lookup_by_name(sbrec_address_set_by_name,
> > > > +  nb_addr_set->name);
> > > > +if (!sb_addr_set) {
> > > > +return false;
> > > > +}
> > > > +update_sb_addr_set((const char **) nb_addr_set->addresses,
> > > > +   nb_addr_set->n_addresses, sb_addr_set);
> > > > +}
> > > > +
> > > > +return true;
> > > > +}
> > > > +
> > > > +bool
> > > > +address_set_sync_nb_port_group_handler(struct engine_node *node
> > > OVS_UNUSED,
> > > > +   void *data OVS_UNUSED)
> > > > +{
> > > > +const struct nbrec_port_group *nb_pg;
> > > > +const struct nbrec_port_group_table *nb_port_group_table =
> > > > +EN_OVSDB_GET(engine_get_input("NB_port_group", node));
> > > > +NBREC_PORT_GROUP_TABLE_FOR_EACH_TRACKED (nb_pg,
nb_port_group_table)
> > > {
> > > > +if (nbrec_port_group_is_new(nb_pg) ||
> > > > +nbrec_port_group_is_deleted(nb_pg)) {
> > > > +return false;
> > > > +}
> > > > +}
> > > > +
> > > > +struct ovsdb_idl_index *sbrec_address_set_by_name =
> > > > +engine_ovsdb_node_get_index(
> > > > +

Re: [ovs-dev] [PATCH ovn v3 2/2] northd: Add I-P for syncing SB address sets.

2022-11-18 Thread Numan Siddique
On Fri, Nov 18, 2022 at 11:27 AM Numan Siddique  wrote:
>
> '
>
> On Fri, Nov 18, 2022 at 2:14 AM Han Zhou  wrote:
> >
> > On Tue, Nov 15, 2022 at 7:19 AM  wrote:
> > >
> > > From: Numan Siddique 
> > >
> > > Updates to NB address sets and NB port groups are handled
> > > incrementally for syncing the SB address sets.  This patch
> > > doesn't support syncing the SB Address sets for the router
> > > load balancer vips incrementally, instead a full recompute is
> > > triggered for any changes to NB load balancers, NB load balancer
> > > groups and NB logical routers.
> > >
> > > Signed-off-by: Numan Siddique 
> > > ---
> > >  northd/en-sb-sync.c  | 202 ---
> > >  northd/en-sb-sync.h  |   6 ++
> > >  northd/inc-proc-northd.c |  18 +++-
> > >  tests/ovn-northd.at  |  52 ++
> > >  4 files changed, 260 insertions(+), 18 deletions(-)
> > >
> > > diff --git a/northd/en-sb-sync.c b/northd/en-sb-sync.c
> > > index c3ba315df..e9ce3cec3 100644
> > > --- a/northd/en-sb-sync.c
> > > +++ b/northd/en-sb-sync.c
> > > @@ -22,6 +22,7 @@
> > >  #include "openvswitch/util.h"
> > >
> > >  #include "en-sb-sync.h"
> > > +#include "include/ovn/expr.h"
> > >  #include "lib/inc-proc-eng.h"
> > >  #include "lib/lb.h"
> > >  #include "lib/ovn-nb-idl.h"
> > > @@ -41,6 +42,13 @@ static void sync_address_sets(const struct
> > nbrec_address_set_table *,
> > >const struct sbrec_address_set_table *,
> > >struct ovsdb_idl_txn *ovnsb_txn,
> > >struct hmap *datapaths);
> > > +static const struct sbrec_address_set *sb_address_set_lookup_by_name(
> > > +struct ovsdb_idl_index *, const char *name);
> > > +static void update_sb_addr_set(const char **nb_addresses, size_t
> > n_addresses,
> > > +   const struct sbrec_address_set *);
> > > +static void build_port_group_address_set(const struct nbrec_port_group *,
> > > + struct svec *ipv4_addrs,
> > > + struct svec *ipv6_addrs);
> > >
> > >  void *
> > >  en_sb_sync_init(struct engine_node *node OVS_UNUSED,
> > > @@ -94,6 +102,98 @@ en_address_set_sync_cleanup(void *data OVS_UNUSED)
> > >
> > >  }
> > >
> > > +bool
> > > +address_set_sync_nb_address_set_handler(struct engine_node *node
> > OVS_UNUSED,
> > > +void *data OVS_UNUSED)
> > > +{
> > > +const struct nbrec_address_set_table *nb_address_set_table =
> > > +EN_OVSDB_GET(engine_get_input("NB_address_set", node));
> > > +
> > > +/* Return false if an address set is created or deleted.
> > > + * Handle I-P for only updated address sets. */
> > > +const struct nbrec_address_set *nb_addr_set;
> > > +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
> > > +  nb_address_set_table) {
> > > +if (nbrec_address_set_is_new(nb_addr_set) ||
> > > +nbrec_address_set_is_deleted(nb_addr_set)) {
> > > +return false;
> > > +}
> > > +}
> > > +
> > > +struct ovsdb_idl_index *sbrec_address_set_by_name =
> > > +engine_ovsdb_node_get_index(
> > > +engine_get_input("SB_address_set", node),
> > > +"sbrec_address_set_by_name");
> > > +
> > > +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
> > > +  nb_address_set_table) {
> > > +const struct sbrec_address_set *sb_addr_set =
> > > +sb_address_set_lookup_by_name(sbrec_address_set_by_name,
> > > +  nb_addr_set->name);
> > > +if (!sb_addr_set) {
> > > +return false;
> > > +}
> > > +update_sb_addr_set((const char **) nb_addr_set->addresses,
> > > +   nb_addr_set->n_addresses, sb_addr_set);
> > > +}
> > > +
> > > +return true;
> > > +}
> > > +
> > > +bool
> > > +address_set_sync_nb_port_group_handler(struct engine_node *node
> > OVS_UNUSED,
> > > +   void *data OVS_UNUSED)
> > > +{
> > > +const struct nbrec_port_group *nb_pg;
> > > +const struct nbrec_port_group_table *nb_port_group_table =
> > > +EN_OVSDB_GET(engine_get_input("NB_port_group", node));
> > > +NBREC_PORT_GROUP_TABLE_FOR_EACH_TRACKED (nb_pg, nb_port_group_table)
> > {
> > > +if (nbrec_port_group_is_new(nb_pg) ||
> > > +nbrec_port_group_is_deleted(nb_pg)) {
> > > +return false;
> > > +}
> > > +}
> > > +
> > > +struct ovsdb_idl_index *sbrec_address_set_by_name =
> > > +engine_ovsdb_node_get_index(
> > > +engine_get_input("SB_address_set", node),
> > > +"sbrec_address_set_by_name");
> > > +NBREC_PORT_GROUP_TABLE_FOR_EACH_TRACKED (nb_pg, nb_port_group_table)
> > {
> > > +  

Re: [ovs-dev] [PATCH ovn v3 2/2] northd: Add I-P for syncing SB address sets.

2022-11-18 Thread Numan Siddique
'

On Fri, Nov 18, 2022 at 2:14 AM Han Zhou  wrote:
>
> On Tue, Nov 15, 2022 at 7:19 AM  wrote:
> >
> > From: Numan Siddique 
> >
> > Updates to NB address sets and NB port groups are handled
> > incrementally for syncing the SB address sets.  This patch
> > doesn't support syncing the SB Address sets for the router
> > load balancer vips incrementally, instead a full recompute is
> > triggered for any changes to NB load balancers, NB load balancer
> > groups and NB logical routers.
> >
> > Signed-off-by: Numan Siddique 
> > ---
> >  northd/en-sb-sync.c  | 202 ---
> >  northd/en-sb-sync.h  |   6 ++
> >  northd/inc-proc-northd.c |  18 +++-
> >  tests/ovn-northd.at  |  52 ++
> >  4 files changed, 260 insertions(+), 18 deletions(-)
> >
> > diff --git a/northd/en-sb-sync.c b/northd/en-sb-sync.c
> > index c3ba315df..e9ce3cec3 100644
> > --- a/northd/en-sb-sync.c
> > +++ b/northd/en-sb-sync.c
> > @@ -22,6 +22,7 @@
> >  #include "openvswitch/util.h"
> >
> >  #include "en-sb-sync.h"
> > +#include "include/ovn/expr.h"
> >  #include "lib/inc-proc-eng.h"
> >  #include "lib/lb.h"
> >  #include "lib/ovn-nb-idl.h"
> > @@ -41,6 +42,13 @@ static void sync_address_sets(const struct
> nbrec_address_set_table *,
> >const struct sbrec_address_set_table *,
> >struct ovsdb_idl_txn *ovnsb_txn,
> >struct hmap *datapaths);
> > +static const struct sbrec_address_set *sb_address_set_lookup_by_name(
> > +struct ovsdb_idl_index *, const char *name);
> > +static void update_sb_addr_set(const char **nb_addresses, size_t
> n_addresses,
> > +   const struct sbrec_address_set *);
> > +static void build_port_group_address_set(const struct nbrec_port_group *,
> > + struct svec *ipv4_addrs,
> > + struct svec *ipv6_addrs);
> >
> >  void *
> >  en_sb_sync_init(struct engine_node *node OVS_UNUSED,
> > @@ -94,6 +102,98 @@ en_address_set_sync_cleanup(void *data OVS_UNUSED)
> >
> >  }
> >
> > +bool
> > +address_set_sync_nb_address_set_handler(struct engine_node *node
> OVS_UNUSED,
> > +void *data OVS_UNUSED)
> > +{
> > +const struct nbrec_address_set_table *nb_address_set_table =
> > +EN_OVSDB_GET(engine_get_input("NB_address_set", node));
> > +
> > +/* Return false if an address set is created or deleted.
> > + * Handle I-P for only updated address sets. */
> > +const struct nbrec_address_set *nb_addr_set;
> > +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
> > +  nb_address_set_table) {
> > +if (nbrec_address_set_is_new(nb_addr_set) ||
> > +nbrec_address_set_is_deleted(nb_addr_set)) {
> > +return false;
> > +}
> > +}
> > +
> > +struct ovsdb_idl_index *sbrec_address_set_by_name =
> > +engine_ovsdb_node_get_index(
> > +engine_get_input("SB_address_set", node),
> > +"sbrec_address_set_by_name");
> > +
> > +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
> > +  nb_address_set_table) {
> > +const struct sbrec_address_set *sb_addr_set =
> > +sb_address_set_lookup_by_name(sbrec_address_set_by_name,
> > +  nb_addr_set->name);
> > +if (!sb_addr_set) {
> > +return false;
> > +}
> > +update_sb_addr_set((const char **) nb_addr_set->addresses,
> > +   nb_addr_set->n_addresses, sb_addr_set);
> > +}
> > +
> > +return true;
> > +}
> > +
> > +bool
> > +address_set_sync_nb_port_group_handler(struct engine_node *node
> OVS_UNUSED,
> > +   void *data OVS_UNUSED)
> > +{
> > +const struct nbrec_port_group *nb_pg;
> > +const struct nbrec_port_group_table *nb_port_group_table =
> > +EN_OVSDB_GET(engine_get_input("NB_port_group", node));
> > +NBREC_PORT_GROUP_TABLE_FOR_EACH_TRACKED (nb_pg, nb_port_group_table)
> {
> > +if (nbrec_port_group_is_new(nb_pg) ||
> > +nbrec_port_group_is_deleted(nb_pg)) {
> > +return false;
> > +}
> > +}
> > +
> > +struct ovsdb_idl_index *sbrec_address_set_by_name =
> > +engine_ovsdb_node_get_index(
> > +engine_get_input("SB_address_set", node),
> > +"sbrec_address_set_by_name");
> > +NBREC_PORT_GROUP_TABLE_FOR_EACH_TRACKED (nb_pg, nb_port_group_table)
> {
> > +char *ipv4_addrs_name = xasprintf("%s_ip4", nb_pg->name);
> > +const struct sbrec_address_set *sb_addr_set_v4 =
> > +sb_address_set_lookup_by_name(sbrec_address_set_by_name,
> > +  ipv4_addrs_name);
> > +if 

Re: [ovs-dev] [PATCH ovn v3 2/2] northd: Add I-P for syncing SB address sets.

2022-11-17 Thread Han Zhou
On Tue, Nov 15, 2022 at 7:19 AM  wrote:
>
> From: Numan Siddique 
>
> Updates to NB address sets and NB port groups are handled
> incrementally for syncing the SB address sets.  This patch
> doesn't support syncing the SB Address sets for the router
> load balancer vips incrementally, instead a full recompute is
> triggered for any changes to NB load balancers, NB load balancer
> groups and NB logical routers.
>
> Signed-off-by: Numan Siddique 
> ---
>  northd/en-sb-sync.c  | 202 ---
>  northd/en-sb-sync.h  |   6 ++
>  northd/inc-proc-northd.c |  18 +++-
>  tests/ovn-northd.at  |  52 ++
>  4 files changed, 260 insertions(+), 18 deletions(-)
>
> diff --git a/northd/en-sb-sync.c b/northd/en-sb-sync.c
> index c3ba315df..e9ce3cec3 100644
> --- a/northd/en-sb-sync.c
> +++ b/northd/en-sb-sync.c
> @@ -22,6 +22,7 @@
>  #include "openvswitch/util.h"
>
>  #include "en-sb-sync.h"
> +#include "include/ovn/expr.h"
>  #include "lib/inc-proc-eng.h"
>  #include "lib/lb.h"
>  #include "lib/ovn-nb-idl.h"
> @@ -41,6 +42,13 @@ static void sync_address_sets(const struct
nbrec_address_set_table *,
>const struct sbrec_address_set_table *,
>struct ovsdb_idl_txn *ovnsb_txn,
>struct hmap *datapaths);
> +static const struct sbrec_address_set *sb_address_set_lookup_by_name(
> +struct ovsdb_idl_index *, const char *name);
> +static void update_sb_addr_set(const char **nb_addresses, size_t
n_addresses,
> +   const struct sbrec_address_set *);
> +static void build_port_group_address_set(const struct nbrec_port_group *,
> + struct svec *ipv4_addrs,
> + struct svec *ipv6_addrs);
>
>  void *
>  en_sb_sync_init(struct engine_node *node OVS_UNUSED,
> @@ -94,6 +102,98 @@ en_address_set_sync_cleanup(void *data OVS_UNUSED)
>
>  }
>
> +bool
> +address_set_sync_nb_address_set_handler(struct engine_node *node
OVS_UNUSED,
> +void *data OVS_UNUSED)
> +{
> +const struct nbrec_address_set_table *nb_address_set_table =
> +EN_OVSDB_GET(engine_get_input("NB_address_set", node));
> +
> +/* Return false if an address set is created or deleted.
> + * Handle I-P for only updated address sets. */
> +const struct nbrec_address_set *nb_addr_set;
> +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
> +  nb_address_set_table) {
> +if (nbrec_address_set_is_new(nb_addr_set) ||
> +nbrec_address_set_is_deleted(nb_addr_set)) {
> +return false;
> +}
> +}
> +
> +struct ovsdb_idl_index *sbrec_address_set_by_name =
> +engine_ovsdb_node_get_index(
> +engine_get_input("SB_address_set", node),
> +"sbrec_address_set_by_name");
> +
> +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
> +  nb_address_set_table) {
> +const struct sbrec_address_set *sb_addr_set =
> +sb_address_set_lookup_by_name(sbrec_address_set_by_name,
> +  nb_addr_set->name);
> +if (!sb_addr_set) {
> +return false;
> +}
> +update_sb_addr_set((const char **) nb_addr_set->addresses,
> +   nb_addr_set->n_addresses, sb_addr_set);
> +}
> +
> +return true;
> +}
> +
> +bool
> +address_set_sync_nb_port_group_handler(struct engine_node *node
OVS_UNUSED,
> +   void *data OVS_UNUSED)
> +{
> +const struct nbrec_port_group *nb_pg;
> +const struct nbrec_port_group_table *nb_port_group_table =
> +EN_OVSDB_GET(engine_get_input("NB_port_group", node));
> +NBREC_PORT_GROUP_TABLE_FOR_EACH_TRACKED (nb_pg, nb_port_group_table)
{
> +if (nbrec_port_group_is_new(nb_pg) ||
> +nbrec_port_group_is_deleted(nb_pg)) {
> +return false;
> +}
> +}
> +
> +struct ovsdb_idl_index *sbrec_address_set_by_name =
> +engine_ovsdb_node_get_index(
> +engine_get_input("SB_address_set", node),
> +"sbrec_address_set_by_name");
> +NBREC_PORT_GROUP_TABLE_FOR_EACH_TRACKED (nb_pg, nb_port_group_table)
{
> +char *ipv4_addrs_name = xasprintf("%s_ip4", nb_pg->name);
> +const struct sbrec_address_set *sb_addr_set_v4 =
> +sb_address_set_lookup_by_name(sbrec_address_set_by_name,
> +  ipv4_addrs_name);
> +if (!sb_addr_set_v4) {
> +free(ipv4_addrs_name);
> +return false;
> +}
> +char *ipv6_addrs_name = xasprintf("%s_ip6", nb_pg->name);
> +const struct sbrec_address_set *sb_addr_set_v6 =
> +

Re: [ovs-dev] [PATCH ovn v3 2/2] northd: Add I-P for syncing SB address sets.

2022-11-16 Thread Ales Musil
On Tue, Nov 15, 2022 at 8:21 PM Mark Michelson  wrote:

> Thanks, Numan.
>
> Acked-by: Mark Michelson 
>
> On 11/15/22 10:19, num...@ovn.org wrote:
> > From: Numan Siddique 
> >
> > Updates to NB address sets and NB port groups are handled
> > incrementally for syncing the SB address sets.  This patch
> > doesn't support syncing the SB Address sets for the router
> > load balancer vips incrementally, instead a full recompute is
> > triggered for any changes to NB load balancers, NB load balancer
> > groups and NB logical routers.
> >
> > Signed-off-by: Numan Siddique 
> > ---
> >   northd/en-sb-sync.c  | 202 ---
> >   northd/en-sb-sync.h  |   6 ++
> >   northd/inc-proc-northd.c |  18 +++-
> >   tests/ovn-northd.at  |  52 ++
> >   4 files changed, 260 insertions(+), 18 deletions(-)
> >
> > diff --git a/northd/en-sb-sync.c b/northd/en-sb-sync.c
> > index c3ba315df..e9ce3cec3 100644
> > --- a/northd/en-sb-sync.c
> > +++ b/northd/en-sb-sync.c
> > @@ -22,6 +22,7 @@
> >   #include "openvswitch/util.h"
> >
> >   #include "en-sb-sync.h"
> > +#include "include/ovn/expr.h"
> >   #include "lib/inc-proc-eng.h"
> >   #include "lib/lb.h"
> >   #include "lib/ovn-nb-idl.h"
> > @@ -41,6 +42,13 @@ static void sync_address_sets(const struct
> nbrec_address_set_table *,
> > const struct sbrec_address_set_table *,
> > struct ovsdb_idl_txn *ovnsb_txn,
> > struct hmap *datapaths);
> > +static const struct sbrec_address_set *sb_address_set_lookup_by_name(
> > +struct ovsdb_idl_index *, const char *name);
> > +static void update_sb_addr_set(const char **nb_addresses, size_t
> n_addresses,
> > +   const struct sbrec_address_set *);
> > +static void build_port_group_address_set(const struct nbrec_port_group
> *,
> > + struct svec *ipv4_addrs,
> > + struct svec *ipv6_addrs);
> >
> >   void *
> >   en_sb_sync_init(struct engine_node *node OVS_UNUSED,
> > @@ -94,6 +102,98 @@ en_address_set_sync_cleanup(void *data OVS_UNUSED)
> >
> >   }
> >
> > +bool
> > +address_set_sync_nb_address_set_handler(struct engine_node *node
> OVS_UNUSED,
> > +void *data OVS_UNUSED)
> > +{
> > +const struct nbrec_address_set_table *nb_address_set_table =
> > +EN_OVSDB_GET(engine_get_input("NB_address_set", node));
> > +
> > +/* Return false if an address set is created or deleted.
> > + * Handle I-P for only updated address sets. */
> > +const struct nbrec_address_set *nb_addr_set;
> > +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
> > +  nb_address_set_table) {
> > +if (nbrec_address_set_is_new(nb_addr_set) ||
> > +nbrec_address_set_is_deleted(nb_addr_set)) {
> > +return false;
> > +}
> > +}
> > +
> > +struct ovsdb_idl_index *sbrec_address_set_by_name =
> > +engine_ovsdb_node_get_index(
> > +engine_get_input("SB_address_set", node),
> > +"sbrec_address_set_by_name");
> > +
> > +NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
> > +  nb_address_set_table) {
> > +const struct sbrec_address_set *sb_addr_set =
> > +sb_address_set_lookup_by_name(sbrec_address_set_by_name,
> > +  nb_addr_set->name);
> > +if (!sb_addr_set) {
> > +return false;
> > +}
> > +update_sb_addr_set((const char **) nb_addr_set->addresses,
> > +   nb_addr_set->n_addresses, sb_addr_set);
> > +}
> > +
> > +return true;
> > +}
> > +
> > +bool
> > +address_set_sync_nb_port_group_handler(struct engine_node *node
> OVS_UNUSED,
> > +   void *data OVS_UNUSED)
> > +{
> > +const struct nbrec_port_group *nb_pg;
> > +const struct nbrec_port_group_table *nb_port_group_table =
> > +EN_OVSDB_GET(engine_get_input("NB_port_group", node));
> > +NBREC_PORT_GROUP_TABLE_FOR_EACH_TRACKED (nb_pg,
> nb_port_group_table) {
> > +if (nbrec_port_group_is_new(nb_pg) ||
> > +nbrec_port_group_is_deleted(nb_pg)) {
> > +return false;
> > +}
> > +}
> > +
> > +struct ovsdb_idl_index *sbrec_address_set_by_name =
> > +engine_ovsdb_node_get_index(
> > +engine_get_input("SB_address_set", node),
> > +"sbrec_address_set_by_name");
> > +NBREC_PORT_GROUP_TABLE_FOR_EACH_TRACKED (nb_pg,
> nb_port_group_table) {
> > +char *ipv4_addrs_name = xasprintf("%s_ip4", nb_pg->name);
> > +const struct sbrec_address_set *sb_addr_set_v4 =
> > +sb_address_set_lookup_by_name(sbrec_address_set_by_name,
> > +

Re: [ovs-dev] [PATCH ovn v3 2/2] northd: Add I-P for syncing SB address sets.

2022-11-15 Thread Mark Michelson

Thanks, Numan.

Acked-by: Mark Michelson 

On 11/15/22 10:19, num...@ovn.org wrote:

From: Numan Siddique 

Updates to NB address sets and NB port groups are handled
incrementally for syncing the SB address sets.  This patch
doesn't support syncing the SB Address sets for the router
load balancer vips incrementally, instead a full recompute is
triggered for any changes to NB load balancers, NB load balancer
groups and NB logical routers.

Signed-off-by: Numan Siddique 
---
  northd/en-sb-sync.c  | 202 ---
  northd/en-sb-sync.h  |   6 ++
  northd/inc-proc-northd.c |  18 +++-
  tests/ovn-northd.at  |  52 ++
  4 files changed, 260 insertions(+), 18 deletions(-)

diff --git a/northd/en-sb-sync.c b/northd/en-sb-sync.c
index c3ba315df..e9ce3cec3 100644
--- a/northd/en-sb-sync.c
+++ b/northd/en-sb-sync.c
@@ -22,6 +22,7 @@
  #include "openvswitch/util.h"
  
  #include "en-sb-sync.h"

+#include "include/ovn/expr.h"
  #include "lib/inc-proc-eng.h"
  #include "lib/lb.h"
  #include "lib/ovn-nb-idl.h"
@@ -41,6 +42,13 @@ static void sync_address_sets(const struct 
nbrec_address_set_table *,
const struct sbrec_address_set_table *,
struct ovsdb_idl_txn *ovnsb_txn,
struct hmap *datapaths);
+static const struct sbrec_address_set *sb_address_set_lookup_by_name(
+struct ovsdb_idl_index *, const char *name);
+static void update_sb_addr_set(const char **nb_addresses, size_t n_addresses,
+   const struct sbrec_address_set *);
+static void build_port_group_address_set(const struct nbrec_port_group *,
+ struct svec *ipv4_addrs,
+ struct svec *ipv6_addrs);
  
  void *

  en_sb_sync_init(struct engine_node *node OVS_UNUSED,
@@ -94,6 +102,98 @@ en_address_set_sync_cleanup(void *data OVS_UNUSED)
  
  }
  
+bool

+address_set_sync_nb_address_set_handler(struct engine_node *node OVS_UNUSED,
+void *data OVS_UNUSED)
+{
+const struct nbrec_address_set_table *nb_address_set_table =
+EN_OVSDB_GET(engine_get_input("NB_address_set", node));
+
+/* Return false if an address set is created or deleted.
+ * Handle I-P for only updated address sets. */
+const struct nbrec_address_set *nb_addr_set;
+NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
+  nb_address_set_table) {
+if (nbrec_address_set_is_new(nb_addr_set) ||
+nbrec_address_set_is_deleted(nb_addr_set)) {
+return false;
+}
+}
+
+struct ovsdb_idl_index *sbrec_address_set_by_name =
+engine_ovsdb_node_get_index(
+engine_get_input("SB_address_set", node),
+"sbrec_address_set_by_name");
+
+NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
+  nb_address_set_table) {
+const struct sbrec_address_set *sb_addr_set =
+sb_address_set_lookup_by_name(sbrec_address_set_by_name,
+  nb_addr_set->name);
+if (!sb_addr_set) {
+return false;
+}
+update_sb_addr_set((const char **) nb_addr_set->addresses,
+   nb_addr_set->n_addresses, sb_addr_set);
+}
+
+return true;
+}
+
+bool
+address_set_sync_nb_port_group_handler(struct engine_node *node OVS_UNUSED,
+   void *data OVS_UNUSED)
+{
+const struct nbrec_port_group *nb_pg;
+const struct nbrec_port_group_table *nb_port_group_table =
+EN_OVSDB_GET(engine_get_input("NB_port_group", node));
+NBREC_PORT_GROUP_TABLE_FOR_EACH_TRACKED (nb_pg, nb_port_group_table) {
+if (nbrec_port_group_is_new(nb_pg) ||
+nbrec_port_group_is_deleted(nb_pg)) {
+return false;
+}
+}
+
+struct ovsdb_idl_index *sbrec_address_set_by_name =
+engine_ovsdb_node_get_index(
+engine_get_input("SB_address_set", node),
+"sbrec_address_set_by_name");
+NBREC_PORT_GROUP_TABLE_FOR_EACH_TRACKED (nb_pg, nb_port_group_table) {
+char *ipv4_addrs_name = xasprintf("%s_ip4", nb_pg->name);
+const struct sbrec_address_set *sb_addr_set_v4 =
+sb_address_set_lookup_by_name(sbrec_address_set_by_name,
+  ipv4_addrs_name);
+if (!sb_addr_set_v4) {
+free(ipv4_addrs_name);
+return false;
+}
+char *ipv6_addrs_name = xasprintf("%s_ip6", nb_pg->name);
+const struct sbrec_address_set *sb_addr_set_v6 =
+sb_address_set_lookup_by_name(sbrec_address_set_by_name,
+  ipv6_addrs_name);
+if (!sb_addr_set_v6) {
+free(ipv4_addrs_name);
+

[ovs-dev] [PATCH ovn v3 2/2] northd: Add I-P for syncing SB address sets.

2022-11-15 Thread numans
From: Numan Siddique 

Updates to NB address sets and NB port groups are handled
incrementally for syncing the SB address sets.  This patch
doesn't support syncing the SB Address sets for the router
load balancer vips incrementally, instead a full recompute is
triggered for any changes to NB load balancers, NB load balancer
groups and NB logical routers.

Signed-off-by: Numan Siddique 
---
 northd/en-sb-sync.c  | 202 ---
 northd/en-sb-sync.h  |   6 ++
 northd/inc-proc-northd.c |  18 +++-
 tests/ovn-northd.at  |  52 ++
 4 files changed, 260 insertions(+), 18 deletions(-)

diff --git a/northd/en-sb-sync.c b/northd/en-sb-sync.c
index c3ba315df..e9ce3cec3 100644
--- a/northd/en-sb-sync.c
+++ b/northd/en-sb-sync.c
@@ -22,6 +22,7 @@
 #include "openvswitch/util.h"
 
 #include "en-sb-sync.h"
+#include "include/ovn/expr.h"
 #include "lib/inc-proc-eng.h"
 #include "lib/lb.h"
 #include "lib/ovn-nb-idl.h"
@@ -41,6 +42,13 @@ static void sync_address_sets(const struct 
nbrec_address_set_table *,
   const struct sbrec_address_set_table *,
   struct ovsdb_idl_txn *ovnsb_txn,
   struct hmap *datapaths);
+static const struct sbrec_address_set *sb_address_set_lookup_by_name(
+struct ovsdb_idl_index *, const char *name);
+static void update_sb_addr_set(const char **nb_addresses, size_t n_addresses,
+   const struct sbrec_address_set *);
+static void build_port_group_address_set(const struct nbrec_port_group *,
+ struct svec *ipv4_addrs,
+ struct svec *ipv6_addrs);
 
 void *
 en_sb_sync_init(struct engine_node *node OVS_UNUSED,
@@ -94,6 +102,98 @@ en_address_set_sync_cleanup(void *data OVS_UNUSED)
 
 }
 
+bool
+address_set_sync_nb_address_set_handler(struct engine_node *node OVS_UNUSED,
+void *data OVS_UNUSED)
+{
+const struct nbrec_address_set_table *nb_address_set_table =
+EN_OVSDB_GET(engine_get_input("NB_address_set", node));
+
+/* Return false if an address set is created or deleted.
+ * Handle I-P for only updated address sets. */
+const struct nbrec_address_set *nb_addr_set;
+NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
+  nb_address_set_table) {
+if (nbrec_address_set_is_new(nb_addr_set) ||
+nbrec_address_set_is_deleted(nb_addr_set)) {
+return false;
+}
+}
+
+struct ovsdb_idl_index *sbrec_address_set_by_name =
+engine_ovsdb_node_get_index(
+engine_get_input("SB_address_set", node),
+"sbrec_address_set_by_name");
+
+NBREC_ADDRESS_SET_TABLE_FOR_EACH_TRACKED (nb_addr_set,
+  nb_address_set_table) {
+const struct sbrec_address_set *sb_addr_set =
+sb_address_set_lookup_by_name(sbrec_address_set_by_name,
+  nb_addr_set->name);
+if (!sb_addr_set) {
+return false;
+}
+update_sb_addr_set((const char **) nb_addr_set->addresses,
+   nb_addr_set->n_addresses, sb_addr_set);
+}
+
+return true;
+}
+
+bool
+address_set_sync_nb_port_group_handler(struct engine_node *node OVS_UNUSED,
+   void *data OVS_UNUSED)
+{
+const struct nbrec_port_group *nb_pg;
+const struct nbrec_port_group_table *nb_port_group_table =
+EN_OVSDB_GET(engine_get_input("NB_port_group", node));
+NBREC_PORT_GROUP_TABLE_FOR_EACH_TRACKED (nb_pg, nb_port_group_table) {
+if (nbrec_port_group_is_new(nb_pg) ||
+nbrec_port_group_is_deleted(nb_pg)) {
+return false;
+}
+}
+
+struct ovsdb_idl_index *sbrec_address_set_by_name =
+engine_ovsdb_node_get_index(
+engine_get_input("SB_address_set", node),
+"sbrec_address_set_by_name");
+NBREC_PORT_GROUP_TABLE_FOR_EACH_TRACKED (nb_pg, nb_port_group_table) {
+char *ipv4_addrs_name = xasprintf("%s_ip4", nb_pg->name);
+const struct sbrec_address_set *sb_addr_set_v4 =
+sb_address_set_lookup_by_name(sbrec_address_set_by_name,
+  ipv4_addrs_name);
+if (!sb_addr_set_v4) {
+free(ipv4_addrs_name);
+return false;
+}
+char *ipv6_addrs_name = xasprintf("%s_ip6", nb_pg->name);
+const struct sbrec_address_set *sb_addr_set_v6 =
+sb_address_set_lookup_by_name(sbrec_address_set_by_name,
+  ipv6_addrs_name);
+if (!sb_addr_set_v6) {
+free(ipv4_addrs_name);
+free(ipv6_addrs_name);
+return false;
+}
+
+struct svec ipv4_addrs =