From c704cb44a9874079616acfd94f2315f29392e30f Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 23 Jun 2022 10:27:56 -0400 Subject: [PATCH] lib, zebra: Notice when a nexthop is set linkdown When a nexthop is set RTNH_F_LINKDOWN, start noticing that this flag is set. Allow FRR to know about this flag but at this point do not do anything with it. Signed-off-by: Donald Sharp --- lib/nexthop.h | 1 + zebra/rt_netlink.c | 3 +++ zebra/zebra_vty.c | 9 +++++++++ 3 files changed, 13 insertions(+) diff --git a/lib/nexthop.h b/lib/nexthop.h index c939fd37e3..f1309aa525 100644 --- a/lib/nexthop.h +++ b/lib/nexthop.h @@ -95,6 +95,7 @@ struct nexthop { #define NEXTHOP_FLAG_HAS_BACKUP (1 << 6) /* Backup nexthop index is set */ #define NEXTHOP_FLAG_SRTE (1 << 7) /* SR-TE color used for BGP traffic */ #define NEXTHOP_FLAG_EVPN (1 << 8) /* nexthop is EVPN */ +#define NEXTHOP_FLAG_LINKDOWN (1 << 9) /* is not removed on link down */ #define NEXTHOP_IS_ACTIVE(flags) \ (CHECK_FLAG(flags, NEXTHOP_FLAG_ACTIVE) \ diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c index 93b2d94671..be7feb21a3 100644 --- a/zebra/rt_netlink.c +++ b/zebra/rt_netlink.c @@ -535,6 +535,9 @@ parse_nexthop_unicast(ns_id_t ns_id, struct rtmsg *rtm, struct rtattr **tb, if (rtm->rtm_flags & RTNH_F_ONLINK) SET_FLAG(nh.flags, NEXTHOP_FLAG_ONLINK); + if (rtm->rtm_flags & RTNH_F_LINKDOWN) + SET_FLAG(nh.flags, NEXTHOP_FLAG_LINKDOWN); + if (num_labels) nexthop_add_labels(&nh, ZEBRA_LSP_STATIC, num_labels, labels); diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c index 9149da8b0d..011fa2a1e5 100644 --- a/zebra/zebra_vty.c +++ b/zebra/zebra_vty.c @@ -376,6 +376,9 @@ static void show_nexthop_detail_helper(struct vty *vty, if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_ONLINK)) vty_out(vty, " onlink"); + if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_LINKDOWN)) + vty_out(vty, " linkdown"); + if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_RECURSIVE)) vty_out(vty, " (recursive)"); @@ -657,6 +660,9 @@ static void show_route_nexthop_helper(struct vty *vty, if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_ONLINK)) vty_out(vty, " onlink"); + if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_LINKDOWN)) + vty_out(vty, " linkdown"); + if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_RECURSIVE)) vty_out(vty, " (recursive)"); @@ -837,6 +843,9 @@ static void show_nexthop_json_helper(json_object *json_nexthop, json_object_boolean_true_add(json_nexthop, "onLink"); + if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_LINKDOWN)) + json_object_boolean_true_add(json_nexthop, "linkDown"); + if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_RECURSIVE)) json_object_boolean_true_add(json_nexthop, "recursive");