#include "ospf6d.h"
#include "ospf6_top.h"
#include "ospf6_message.h"
+#include "ospf6_network.h"
#include "ospf6_asbr.h"
#include "ospf6_lsa.h"
#include "ospf6_interface.h"
static void __attribute__((noreturn)) ospf6_exit(int status)
{
- struct listnode *node;
+ struct vrf *vrf = vrf_lookup_by_id(VRF_DEFAULT);
struct interface *ifp;
frr_early_fini();
- if (ospf6)
+ if (ospf6) {
ospf6_delete(ospf6);
+ ospf6 = NULL;
+ }
bfd_gbl_exit();
- for (ALL_LIST_ELEMENTS_RO(vrf_iflist(VRF_DEFAULT), node, ifp))
+ FOR_ALL_INTERFACES (vrf, ifp)
if (ifp->info != NULL)
ospf6_interface_delete(ifp->info);
ospf6_asbr_terminate();
ospf6_lsa_terminate();
+ ospf6_serv_close();
+ /* reverse access_list_init */
+ access_list_reset();
+
+ /* reverse prefix_list_init */
+ prefix_list_add_hook(NULL);
+ prefix_list_delete_hook(NULL);
+ prefix_list_reset();
+
vrf_terminate();
if (zclient) {
static void sigterm(void)
{
zlog_notice("Terminating on signal SIGTERM");
- ospf6_clean();
ospf6_exit(0);
}
},
};
+static const struct frr_yang_module_info *const ospf6d_yang_modules[] = {
+ &frr_interface_info,
+};
+
FRR_DAEMON_INFO(ospf6d, OSPF6, .vty_port = OSPF6_VTY_PORT,
.proghelp = "Implementation of the OSPFv3 routing protocol.",
.signals = ospf6_signals,
.n_signals = array_size(ospf6_signals),
- .privs = &ospf6d_privs, )
+ .privs = &ospf6d_privs, .yang_modules = ospf6d_yang_modules,
+ .n_yang_modules = array_size(ospf6d_yang_modules), )
/* Main routine of ospf6d. Treatment of argument and starting ospf finite
state machine is handled here. */
exit(1);
}
+ /* OSPF6 master init. */
+ ospf6_master_init();
+
/* thread master */
master = frr_init();
- vrf_init(NULL, NULL, NULL, NULL);
+ vrf_init(NULL, NULL, NULL, NULL, NULL);
access_list_init();
prefix_list_init();