]> git.proxmox.com Git - mirror_frr.git/blame - ripngd/ripng_main.c
Merge pull request #12780 from opensourcerouting/spdx-license-id
[mirror_frr.git] / ripngd / ripng_main.c
CommitLineData
acddc0ed 1// SPDX-License-Identifier: GPL-2.0-or-later
718e3744 2/*
3 * RIPngd main routine.
4 * Copyright (C) 1998, 1999 Kunihiro Ishiguro
718e3744 5 */
6
7#include <zebra.h>
8
5e4fa164 9#include <lib/version.h>
718e3744 10#include "getopt.h"
11#include "vector.h"
12#include "vty.h"
13#include "command.h"
a94434b6 14#include "memory.h"
718e3744 15#include "thread.h"
16#include "log.h"
17#include "prefix.h"
18#include "if.h"
edd7c245 19#include "privs.h"
2d75d052 20#include "sigevent.h"
6a69b354 21#include "vrf.h"
8f88441d 22#include "if_rmap.h"
4f04a76b 23#include "libfrr.h"
91835f1f 24#include "routemap.h"
718e3744 25
26#include "ripngd/ripngd.h"
ca473936 27#include "ripngd/ripng_nb.h"
718e3744 28
718e3744 29/* RIPngd options. */
f28963f7 30struct option longopts[] = {{0}};
718e3744 31
edd7c245 32/* ripngd privileges */
dde7b15b 33zebra_capabilities_t _caps_p[] = {ZCAP_NET_RAW, ZCAP_BIND, ZCAP_SYS_ADMIN};
edd7c245 34
d62a17ae 35struct zebra_privs_t ripngd_privs = {
b2f36157 36#if defined(FRR_USER)
d62a17ae 37 .user = FRR_USER,
edd7c245 38#endif
b2f36157 39#if defined FRR_GROUP
d62a17ae 40 .group = FRR_GROUP,
d81fadfd 41#endif
42#ifdef VTY_GROUP
d62a17ae 43 .vty_group = VTY_GROUP,
edd7c245 44#endif
d62a17ae 45 .caps_p = _caps_p,
dde7b15b 46 .cap_num_p = array_size(_caps_p),
d62a17ae 47 .cap_num_i = 0};
edd7c245 48
49
718e3744 50/* Master of threads. */
51struct thread_master *master;
52
eb05883f 53static struct frr_daemon_info ripngd_di;
718e3744 54
718e3744 55/* SIGHUP handler. */
d62a17ae 56static void sighup(void)
718e3744 57{
d62a17ae 58 zlog_info("SIGHUP received");
a94434b6 59
d62a17ae 60 /* Reload config file. */
1c2facd1 61 vty_read_config(NULL, ripngd_di.config_file, config_default);
718e3744 62}
63
64/* SIGINT handler. */
d62a17ae 65static void sigint(void)
718e3744 66{
d62a17ae 67 zlog_notice("Terminating on signal");
718e3744 68
dde7b15b 69 ripng_vrf_terminate();
8f88441d 70 if_rmap_terminate();
d62a17ae 71 ripng_zebra_stop();
8879bd22 72 frr_fini();
d62a17ae 73 exit(0);
718e3744 74}
75
76/* SIGUSR1 handler. */
d62a17ae 77static void sigusr1(void)
718e3744 78{
d62a17ae 79 zlog_rotate();
718e3744 80}
81
7cc91e67 82struct frr_signal_t ripng_signals[] = {
d62a17ae 83 {
84 .signal = SIGHUP,
85 .handler = &sighup,
86 },
87 {
88 .signal = SIGUSR1,
89 .handler = &sigusr1,
90 },
91 {
92 .signal = SIGINT,
93 .handler = &sigint,
94 },
95 {
96 .signal = SIGTERM,
97 .handler = &sigint,
98 },
2d75d052 99};
6b0655a2 100
0d8c7a26 101static const struct frr_yang_module_info *const ripngd_yang_modules[] = {
c2aab693 102 &frr_filter_info,
a4bed468 103 &frr_interface_info,
e9ce224b 104 &frr_ripngd_info,
91835f1f 105 &frr_route_map_info,
6fd8972a 106 &frr_vrf_info,
8fcdd0d6
RW
107};
108
d62a17ae 109FRR_DAEMON_INFO(ripngd, RIPNG, .vty_port = RIPNG_VTY_PORT,
4f04a76b 110
d62a17ae 111 .proghelp = "Implementation of the RIPng routing protocol.",
4f04a76b 112
d62a17ae 113 .signals = ripng_signals,
114 .n_signals = array_size(ripng_signals),
4f04a76b 115
8fcdd0d6
RW
116 .privs = &ripngd_privs,
117
118 .yang_modules = ripngd_yang_modules,
80413c20
DL
119 .n_yang_modules = array_size(ripngd_yang_modules),
120);
4f04a76b 121
f28963f7 122#define DEPRECATED_OPTIONS ""
c8dde10f 123
718e3744 124/* RIPngd main routine. */
d62a17ae 125int main(int argc, char **argv)
718e3744 126{
d62a17ae 127 frr_preinit(&ripngd_di, argc, argv);
c8dde10f
QY
128
129 frr_opt_add("" DEPRECATED_OPTIONS, longopts, "");
d62a17ae 130
131 while (1) {
132 int opt;
133
134 opt = frr_getopt(argc, argv, NULL);
135
c8dde10f
QY
136 if (opt && opt < 128 && strchr(DEPRECATED_OPTIONS, opt)) {
137 fprintf(stderr,
138 "The -%c option no longer exists.\nPlease refer to the manual.\n",
139 opt);
140 continue;
141 }
142
d62a17ae 143 if (opt == EOF)
144 break;
145
146 switch (opt) {
147 case 0:
148 break;
d62a17ae 149 default:
150 frr_help_exit(1);
d62a17ae 151 }
718e3744 152 }
718e3744 153
d62a17ae 154 master = frr_init();
718e3744 155
d62a17ae 156 /* Library inits. */
dde7b15b 157 ripng_vrf_init();
718e3744 158
d62a17ae 159 /* RIPngd inits. */
160 ripng_init();
e9ce224b 161 ripng_cli_init();
d62a17ae 162 zebra_init(master);
a94434b6 163
d62a17ae 164 frr_config_fork();
165 frr_run(master);
718e3744 166
d62a17ae 167 /* Not reached. */
168 return 0;
718e3744 169}