]>
git.proxmox.com Git - mirror_frr.git/blob - ripd/rip_nb_rpcs.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (C) 2018 NetDEF, Inc.
16 #include "northbound.h"
19 #include "ripd/ripd.h"
20 #include "ripd/rip_nb.h"
21 #include "ripd/rip_debug.h"
22 #include "ripd/rip_interface.h"
25 * XPath: /frr-ripd:clear-rip-route
27 static void clear_rip_route(struct rip
*rip
)
29 struct route_node
*rp
;
31 if (IS_RIP_DEBUG_EVENT
)
32 zlog_debug("Clearing all RIP routes (VRF %s)", rip
->vrf_name
);
34 /* Clear received RIP routes */
35 for (rp
= route_top(rip
->table
); rp
; rp
= route_next(rp
)) {
37 struct listnode
*listnode
;
38 struct rip_info
*rinfo
;
44 for (ALL_LIST_ELEMENTS_RO(list
, listnode
, rinfo
)) {
45 if (!rip_route_rte(rinfo
))
48 if (CHECK_FLAG(rinfo
->flags
, RIP_RTF_FIB
))
49 rip_zebra_ipv4_delete(rip
, rp
);
54 THREAD_OFF(rinfo
->t_timeout
);
55 THREAD_OFF(rinfo
->t_garbage_collect
);
56 listnode_delete(list
, rinfo
);
60 if (list_isempty(list
)) {
63 route_unlock_node(rp
);
68 int clear_rip_route_rpc(struct nb_cb_rpc_args
*args
)
71 struct yang_data
*yang_vrf
;
73 yang_vrf
= yang_data_list_find(args
->input
, "%s/%s", args
->xpath
,
76 rip
= rip_lookup_by_vrf_name(yang_vrf
->value
);
82 RB_FOREACH (vrf
, vrf_name_head
, &vrfs_by_name
) {