From a80618f27d2601b65168d97863878e2d35354c0e Mon Sep 17 00:00:00 2001 From: Igor Ryzhov Date: Fri, 28 May 2021 18:45:40 +0300 Subject: [PATCH] isisd: fix using vrf interface as a loopback Signed-off-by: Igor Ryzhov --- isisd/isis_circuit.c | 4 ++-- isisd/isis_cli.c | 4 ++-- isisd/isis_nb_config.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c index 2a197ab2b7..4fa28a4ad9 100644 --- a/isisd/isis_circuit.c +++ b/isisd/isis_circuit.c @@ -497,7 +497,7 @@ void isis_circuit_if_add(struct isis_circuit *circuit, struct interface *ifp) circuit->circ_type = CIRCUIT_T_BROADCAST; } else if (if_is_pointopoint(ifp)) { circuit->circ_type = CIRCUIT_T_P2P; - } else if (if_is_loopback(ifp)) { + } else if (if_is_loopback_or_vrf(ifp)) { circuit->circ_type = CIRCUIT_T_LOOPBACK; circuit->is_passive = 1; } else { @@ -1350,7 +1350,7 @@ ferr_r isis_circuit_passive_set(struct isis_circuit *circuit, bool passive) if (circuit->is_passive == passive) return ferr_ok(); - if (if_is_loopback(circuit->interface) && !passive) + if (if_is_loopback_or_vrf(circuit->interface) && !passive) return ferr_cfg_invalid("loopback is always passive"); if (circuit->state != C_STATE_UP) { diff --git a/isisd/isis_cli.c b/isisd/isis_cli.c index 5aea9f25d9..415c25fbf9 100644 --- a/isisd/isis_cli.c +++ b/isisd/isis_cli.c @@ -195,7 +195,7 @@ DEFPY_YANG(ip_router_isis, ip_router_isis_cmd, /* check if the interface is a loopback and if so set it as passive */ ifp = nb_running_get_entry(NULL, VTY_CURR_XPATH, false); - if (ifp && if_is_loopback(ifp)) + if (ifp && if_is_loopback_or_vrf(ifp)) nb_cli_enqueue_change(vty, "./frr-isisd:isis/passive", NB_OP_MODIFY, "true"); @@ -252,7 +252,7 @@ DEFPY_YANG(ip6_router_isis, ip6_router_isis_cmd, /* check if the interface is a loopback and if so set it as passive */ ifp = nb_running_get_entry(NULL, VTY_CURR_XPATH, false); - if (ifp && if_is_loopback(ifp)) + if (ifp && if_is_loopback_or_vrf(ifp)) nb_cli_enqueue_change(vty, "./frr-isisd:isis/passive", NB_OP_MODIFY, "true"); diff --git a/isisd/isis_nb_config.c b/isisd/isis_nb_config.c index a00c86eeaf..2622c5b51b 100644 --- a/isisd/isis_nb_config.c +++ b/isisd/isis_nb_config.c @@ -2966,7 +2966,7 @@ int lib_interface_isis_passive_modify(struct nb_cb_modify_args *args) ifp = circuit->interface; if (!ifp) return NB_OK; - if (if_is_loopback(ifp)) { + if (if_is_loopback_or_vrf(ifp)) { snprintf(args->errmsg, args->errmsg_len, "Loopback is always passive"); return NB_ERR_VALIDATION; -- 2.39.5