On Thu, Oct 30, 2025 at 3:28 PM Dumitru Ceara <[email protected]> wrote:
> On 10/30/25 10:37 AM, Ales Musil wrote:
> > When there is invalid table_id being set for vrf the ovn-controller
> > would be woken up immediately to retry. However, this is not
> > a recoverable error that could be fixed by retry. Make sure we
> > don't loop and retry again once the table_id has changed.
> >
> > Fixes: faf4df563f1d ("controller: Announce routes via route-exchange.")
> > Reported-at: https://issues.redhat.com/browse/FDP-1879
> > Signed-off-by: Ales Musil <[email protected]>
> > ---
> > v2: Unify the condition with duplicate table id.
> > Add include to more appropriate place.
> > ---
>
> Hi Ales,
>
> Looks good to me, thanks!
>
> Acked-by: Dumitru Ceara <[email protected]>
>
> Thanks,
> Dumitru
>
> > controller/route-exchange-netlink.c | 7 -------
> > controller/route-exchange-netlink.h | 8 ++++++++
> > controller/route-exchange.c | 8 +++++---
> > 3 files changed, 13 insertions(+), 10 deletions(-)
> >
> > diff --git a/controller/route-exchange-netlink.c
> b/controller/route-exchange-netlink.c
> > index 91f059492..bc1488018 100644
> > --- a/controller/route-exchange-netlink.c
> > +++ b/controller/route-exchange-netlink.c
> > @@ -19,7 +19,6 @@
> >
> > #include <errno.h>
> > #include <inttypes.h>
> > -#include <linux/rtnetlink.h>
> > #include <net/if.h>
> > #include <netinet/in.h>
> >
> > @@ -38,12 +37,6 @@
> > VLOG_DEFINE_THIS_MODULE(route_exchange_netlink);
> >
> > #define NETNL_REQ_BUFFER_SIZE 128
> > -#define TABLE_ID_VALID(table_id) (table_id != RT_TABLE_UNSPEC &&
> \
> > - table_id != RT_TABLE_COMPAT &&
> \
> > - table_id != RT_TABLE_DEFAULT &&
> \
> > - table_id != RT_TABLE_MAIN &&
> \
> > - table_id != RT_TABLE_LOCAL &&
> \
> > - table_id != RT_TABLE_MAX)
> >
> > int
> > re_nl_create_vrf(const char *ifname, uint32_t table_id)
> > diff --git a/controller/route-exchange-netlink.h
> b/controller/route-exchange-netlink.h
> > index c9fce692b..1741f761d 100644
> > --- a/controller/route-exchange-netlink.h
> > +++ b/controller/route-exchange-netlink.h
> > @@ -19,6 +19,7 @@
> > #define ROUTE_EXCHANGE_NETLINK_H 1
> >
> > #include <stdint.h>
> > +#include <linux/rtnetlink.h>
> > #include <netinet/in.h>
> > #include <net/if.h>
> >
> > @@ -28,6 +29,13 @@
> > #define RTPROT_OVN 84
> > #endif
> >
> > +#define TABLE_ID_VALID(table_id) (table_id != RT_TABLE_UNSPEC &&
> \
> > + table_id != RT_TABLE_COMPAT &&
> \
> > + table_id != RT_TABLE_DEFAULT &&
> \
> > + table_id != RT_TABLE_MAIN &&
> \
> > + table_id != RT_TABLE_LOCAL &&
> \
> > + table_id != RT_TABLE_MAX)
> > +
> > struct in6_addr;
> > struct hmap;
> > struct vector;
> > diff --git a/controller/route-exchange.c b/controller/route-exchange.c
> > index 829d1b73f..d8deae1da 100644
> > --- a/controller/route-exchange.c
> > +++ b/controller/route-exchange.c
> > @@ -245,10 +245,12 @@ route_exchange_run(const struct
> route_exchange_ctx_in *r_ctx_in,
> > HMAP_FOR_EACH (ad, node, r_ctx_in->announce_routes) {
> > uint32_t table_id = route_get_table_id(ad->db);
> >
> > - if (!ovn_add_tnlid(&table_ids, table_id)) {
> > + bool valid = TABLE_ID_VALID(table_id);
> > + if (!valid || !ovn_add_tnlid(&table_ids, table_id)) {
> > VLOG_WARN_RL(&rl, "Unable to sync routes for datapath
> "UUID_FMT": "
> > - "duplicate table id: %"PRIu32,
> > - UUID_ARGS(&ad->db->header_.uuid), table_id);
> > + "%s table id: %"PRIu32,
> > + UUID_ARGS(&ad->db->header_.uuid),
> > + !valid ? "invalid" : "duplicate", table_id);
> > continue;
> > }
> >
>
>
Thank you Dumitru and Felix,
I went ahead, merged this into and backported all the way down to 25.03.
Regards,
Ales
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev