1 // SPDX-License-Identifier: GPL-2.0-or-later
4 * Copyright (C) 2021 David Lamparter for NetDEF, Inc.
5 * Copyright (C) 2008 Everton da Silva Marques (pim_main.c)
11 #include "lib/filter.h"
12 #include "lib/plist.h"
13 #include "lib/routemap.h"
14 #include "lib/routing_nb.h"
16 #include "lib/privs.h"
17 #include "lib/sigevent.h"
18 #include "lib/libfrr.h"
19 #include "lib/version.h"
22 #include "pim_instance.h"
23 #include "pim_errors.h"
24 #include "pim_iface.h"
25 #include "pim_zebra.h"
30 zebra_capabilities_t _caps_p
[] = {
37 /* pimd privileges to run with */
38 struct zebra_privs_t pimd_privs
= {
39 #if defined(FRR_USER) && defined(FRR_GROUP)
44 .vty_group
= VTY_GROUP
,
47 .cap_num_p
= array_size(_caps_p
),
51 static void pim6_terminate(void);
53 static void pim6_sighup(void)
55 zlog_info("SIGHUP received, ignoring");
58 static void pim6_sigint(void)
60 zlog_notice("Terminating on signal SIGINT");
65 static void pim6_sigterm(void)
67 zlog_notice("Terminating on signal SIGTERM");
72 static void pim6_sigusr1(void)
77 struct frr_signal_t pim6d_signals
[] = {
80 .handler
= &pim6_sighup
,
84 .handler
= &pim6_sigusr1
,
88 .handler
= &pim6_sigint
,
92 .handler
= &pim6_sigterm
,
96 static const struct frr_yang_module_info
*const pim6d_yang_modules
[] = {
107 /* clang-format off */
108 FRR_DAEMON_INFO(pim6d
, PIM6
,
109 .vty_port
= PIM6D_VTY_PORT
,
110 .proghelp
= "Protocol Independent Multicast (RFC7761) for IPv6",
112 .signals
= pim6d_signals
,
113 .n_signals
= array_size(pim6d_signals
),
115 .privs
= &pimd_privs
,
117 .yang_modules
= pim6d_yang_modules
,
118 .n_yang_modules
= array_size(pim6d_yang_modules
),
120 /* clang-format on */
122 int main(int argc
, char **argv
, char **envp
)
124 static struct option longopts
[] = {
128 frr_preinit(&pim6d_di
, argc
, argv
);
129 frr_opt_add("", longopts
, "");
131 /* this while just reads the options */
135 opt
= frr_getopt(argc
, argv
, NULL
);
159 prefix_list_add_hook(pim_prefix_list_update
);
160 prefix_list_delete_hook(pim_prefix_list_update
);
162 pim_route_map_init();
166 * Initialize zclient "update" and "lookup" sockets
178 hook_register(routing_conf_event
,
179 routing_control_plane_protocols_name_validate
);
181 routing_control_plane_protocols_register_vrf_dependency();
184 frr_run(router
->master
);
190 static void pim6_terminate(void)
193 pim_router_terminate();