forked from Mirror/frr
2004-01-19 Paul Jakma <paul@dishone.st>
* tests/test-sig.c: New file, regression test for sigevents. * lib/Makefile.am: add sigevent.{c,h} * (isis|rip|ripng|ospf|ospf6|bgp)d/\1_main.c: modify for sigevents. * zebra/main.c: ditto.
This commit is contained in:
parent
9a76e2ddb6
commit
2d75d05218
|
@ -1,3 +1,10 @@
|
||||||
|
2004-01-19 Paul Jakma <paul@dishone.st>
|
||||||
|
|
||||||
|
* tests/test-sig.c: New file, regression test for sigevents.
|
||||||
|
* lib/Makefile.am: add sigevent.{c,h}
|
||||||
|
* (isis|rip|ripng|ospf|ospf6|bgp)d/\1_main.c: modify for sigevents.
|
||||||
|
* zebra/main.c: ditto.
|
||||||
|
|
||||||
2004-01-10 Paul Jakma <paul@dishone.st>
|
2004-01-10 Paul Jakma <paul@dishone.st>
|
||||||
|
|
||||||
* Makefile.am: redhat/ is a dist subdir too.
|
* Makefile.am: redhat/ is a dist subdir too.
|
||||||
|
|
|
@ -30,6 +30,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
#include "prefix.h"
|
#include "prefix.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "privs.h"
|
#include "privs.h"
|
||||||
|
#include "sigevent.h"
|
||||||
|
|
||||||
#include "bgpd/bgpd.h"
|
#include "bgpd/bgpd.h"
|
||||||
#include "bgpd/bgp_attr.h"
|
#include "bgpd/bgp_attr.h"
|
||||||
|
@ -52,6 +53,27 @@ struct option longopts[] =
|
||||||
{ 0 }
|
{ 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* signal definitions */
|
||||||
|
void sighup (void);
|
||||||
|
void sigint (void);
|
||||||
|
void sigusr1 (void);
|
||||||
|
|
||||||
|
struct quagga_signal_t bgp_signals[] =
|
||||||
|
{
|
||||||
|
{
|
||||||
|
.signal = SIGHUP,
|
||||||
|
.handler = &sighup,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.signal = SIGUSR1,
|
||||||
|
.handler = &sigusr1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.signal = SIGINT,
|
||||||
|
.handler = &sigint,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
/* Configuration file and directory. */
|
/* Configuration file and directory. */
|
||||||
char config_current[] = BGP_DEFAULT_CONFIG;
|
char config_current[] = BGP_DEFAULT_CONFIG;
|
||||||
char config_default[] = SYSCONFDIR BGP_DEFAULT_CONFIG;
|
char config_default[] = SYSCONFDIR BGP_DEFAULT_CONFIG;
|
||||||
|
@ -123,7 +145,7 @@ Report bugs to %s\n", progname, ZEBRA_BUG_ADDRESS);
|
||||||
|
|
||||||
/* SIGHUP handler. */
|
/* SIGHUP handler. */
|
||||||
void
|
void
|
||||||
sighup (int sig)
|
sighup (void)
|
||||||
{
|
{
|
||||||
zlog (NULL, LOG_INFO, "SIGHUP received");
|
zlog (NULL, LOG_INFO, "SIGHUP received");
|
||||||
|
|
||||||
|
@ -143,7 +165,7 @@ sighup (int sig)
|
||||||
|
|
||||||
/* SIGINT handler. */
|
/* SIGINT handler. */
|
||||||
void
|
void
|
||||||
sigint (int sig)
|
sigint (void)
|
||||||
{
|
{
|
||||||
zlog (NULL, LOG_INFO, "Terminating on signal");
|
zlog (NULL, LOG_INFO, "Terminating on signal");
|
||||||
|
|
||||||
|
@ -155,44 +177,10 @@ sigint (int sig)
|
||||||
|
|
||||||
/* SIGUSR1 handler. */
|
/* SIGUSR1 handler. */
|
||||||
void
|
void
|
||||||
sigusr1 (int sig)
|
sigusr1 (void)
|
||||||
{
|
{
|
||||||
zlog_rotate (NULL);
|
zlog_rotate (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Signale wrapper. */
|
|
||||||
RETSIGTYPE *
|
|
||||||
signal_set (int signo, void (*func)(int))
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
struct sigaction sig;
|
|
||||||
struct sigaction osig;
|
|
||||||
|
|
||||||
sig.sa_handler = func;
|
|
||||||
sigemptyset (&sig.sa_mask);
|
|
||||||
sig.sa_flags = 0;
|
|
||||||
#ifdef SA_RESTART
|
|
||||||
sig.sa_flags |= SA_RESTART;
|
|
||||||
#endif /* SA_RESTART */
|
|
||||||
|
|
||||||
ret = sigaction (signo, &sig, &osig);
|
|
||||||
|
|
||||||
if (ret < 0)
|
|
||||||
return (SIG_ERR);
|
|
||||||
else
|
|
||||||
return (osig.sa_handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Initialization of signal handles. */
|
|
||||||
void
|
|
||||||
signal_init ()
|
|
||||||
{
|
|
||||||
signal_set (SIGHUP, sighup);
|
|
||||||
signal_set (SIGINT, sigint);
|
|
||||||
signal_set (SIGTERM, sigint);
|
|
||||||
signal_set (SIGPIPE, SIG_IGN);
|
|
||||||
signal_set (SIGUSR1, sigusr1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Main routine of bgpd. Treatment of argument and start bgp finite
|
/* Main routine of bgpd. Treatment of argument and start bgp finite
|
||||||
state machine is handled at here. */
|
state machine is handled at here. */
|
||||||
|
@ -282,7 +270,7 @@ main (int argc, char **argv)
|
||||||
|
|
||||||
/* Initializations. */
|
/* Initializations. */
|
||||||
srand (time (NULL));
|
srand (time (NULL));
|
||||||
signal_init ();
|
signal_init (master, Q_SIGC(bgp_signals), bgp_signals);
|
||||||
zprivs_init (&bgpd_privs);
|
zprivs_init (&bgpd_privs);
|
||||||
cmd_init (1);
|
cmd_init (1);
|
||||||
vty_init (master);
|
vty_init (master);
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include "stream.h"
|
#include "stream.h"
|
||||||
#include "if.h"
|
#include "if.h"
|
||||||
#include "privs.h"
|
#include "privs.h"
|
||||||
|
#include "sigevent.h"
|
||||||
|
|
||||||
#include "isisd/dict.h"
|
#include "isisd/dict.h"
|
||||||
#include "include-netbsd/iso.h"
|
#include "include-netbsd/iso.h"
|
||||||
|
@ -148,8 +149,9 @@ terminate (int i)
|
||||||
/*
|
/*
|
||||||
* Signal handlers
|
* Signal handlers
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
void
|
||||||
sighup (int sig)
|
sighup (void)
|
||||||
{
|
{
|
||||||
zlog_info ("SIGHUP received");
|
zlog_info ("SIGHUP received");
|
||||||
reload ();
|
reload ();
|
||||||
|
@ -158,7 +160,7 @@ sighup (int sig)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
sigint (int sig)
|
sigint (void)
|
||||||
{
|
{
|
||||||
zlog_info ("SIGINT received");
|
zlog_info ("SIGINT received");
|
||||||
terminate (0);
|
terminate (0);
|
||||||
|
@ -167,62 +169,38 @@ sigint (int sig)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
sigterm (int sig)
|
sigterm (void)
|
||||||
{
|
{
|
||||||
zlog_info ("SIGTERM received");
|
zlog_info ("SIGTERM received");
|
||||||
terminate (0);
|
terminate (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
sigusr1 (int sig)
|
sigusr1 (void)
|
||||||
{
|
{
|
||||||
zlog_info ("SIGUSR1 received");
|
zlog_info ("SIGUSR1 received");
|
||||||
zlog_rotate (NULL);
|
zlog_rotate (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
struct quagga_signal_t isisd_signals[] =
|
||||||
* Signal wrapper.
|
{
|
||||||
*/
|
{
|
||||||
RETSIGTYPE *
|
.signal = SIGHUP,
|
||||||
signal_set (int signo, void (*func)(int))
|
.handler = &sighup,
|
||||||
{
|
},
|
||||||
int ret;
|
{
|
||||||
struct sigaction sig;
|
.signal = SIGUSR1,
|
||||||
struct sigaction osig;
|
.handler = &sigusr1,
|
||||||
|
},
|
||||||
sig.sa_handler = func;
|
{
|
||||||
sigemptyset (&sig.sa_mask);
|
.signal = SIGINT,
|
||||||
sig.sa_flags = 0;
|
.handler = &sigint,
|
||||||
#ifdef SA_RESTART
|
},
|
||||||
sig.sa_flags |= SA_RESTART;
|
{
|
||||||
#endif /* SA_RESTART */
|
.signal = SIGTERM,
|
||||||
|
.handler = &sigterm,
|
||||||
ret = sigaction (signo, &sig, &osig);
|
},
|
||||||
|
};
|
||||||
if (ret < 0)
|
|
||||||
return (SIG_ERR);
|
|
||||||
else
|
|
||||||
return (osig.sa_handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
signal_init ()
|
|
||||||
{
|
|
||||||
signal_set (SIGHUP, sighup);
|
|
||||||
signal_set (SIGINT, sigint);
|
|
||||||
signal_set (SIGTERM, sigterm);
|
|
||||||
signal_set (SIGPIPE, SIG_IGN);
|
|
||||||
#ifdef SIGTSTP
|
|
||||||
signal_set (SIGTSTP, SIG_IGN);
|
|
||||||
#endif
|
|
||||||
#ifdef SIGTTIN
|
|
||||||
signal_set (SIGTTIN, SIG_IGN);
|
|
||||||
#endif
|
|
||||||
#ifdef SIGTTOU
|
|
||||||
signal_set (SIGTTOU, SIG_IGN);
|
|
||||||
#endif
|
|
||||||
signal_set (SIGUSR1, sigusr1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Main routine of isisd. Parse arguments and handle IS-IS state machine.
|
* Main routine of isisd. Parse arguments and handle IS-IS state machine.
|
||||||
|
@ -315,7 +293,7 @@ main (int argc, char **argv, char **envp)
|
||||||
* initializations
|
* initializations
|
||||||
*/
|
*/
|
||||||
zprivs_init (&isisd_privs);
|
zprivs_init (&isisd_privs);
|
||||||
signal_init ();
|
signal_init (master, Q_SIGC(isisd_signals), isisd_signals);
|
||||||
cmd_init (1);
|
cmd_init (1);
|
||||||
vty_init (master);
|
vty_init (master);
|
||||||
memory_init ();
|
memory_init ();
|
||||||
|
|
|
@ -10,7 +10,8 @@ libzebra_a_SOURCES = \
|
||||||
print_version.c checksum.c vector.c linklist.c vty.c command.c \
|
print_version.c checksum.c vector.c linklist.c vty.c command.c \
|
||||||
sockunion.c prefix.c thread.c if.c memory.c buffer.c table.c hash.c \
|
sockunion.c prefix.c thread.c if.c memory.c buffer.c table.c hash.c \
|
||||||
filter.c routemap.c distribute.c stream.c str.c log.c plist.c \
|
filter.c routemap.c distribute.c stream.c str.c log.c plist.c \
|
||||||
zclient.c sockopt.c smux.c md5.c if_rmap.c keychain.c privs.c debug.c
|
zclient.c sockopt.c smux.c md5.c if_rmap.c keychain.c privs.c \
|
||||||
|
debug.c sigevent.c
|
||||||
|
|
||||||
libzebra_a_DEPENDENCIES = @LIB_REGEX@
|
libzebra_a_DEPENDENCIES = @LIB_REGEX@
|
||||||
|
|
||||||
|
@ -21,7 +22,7 @@ pkginclude_HEADERS = \
|
||||||
memory.h network.h prefix.h routemap.h distribute.h sockunion.h \
|
memory.h network.h prefix.h routemap.h distribute.h sockunion.h \
|
||||||
str.h stream.h table.h thread.h vector.h version.h vty.h zebra.h \
|
str.h stream.h table.h thread.h vector.h version.h vty.h zebra.h \
|
||||||
plist.h zclient.h sockopt.h smux.h md5-gnu.h if_rmap.h keychain.h \
|
plist.h zclient.h sockopt.h smux.h md5-gnu.h if_rmap.h keychain.h \
|
||||||
privs.h debug.h
|
privs.h debug.h sigevent.h
|
||||||
|
|
||||||
EXTRA_DIST = regex.c regex-gnu.h
|
EXTRA_DIST = regex.c regex-gnu.h
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "privs.h"
|
#include "privs.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
#include "sigevent.h"
|
||||||
|
|
||||||
#include "ospfd/ospfd.h"
|
#include "ospfd/ospfd.h"
|
||||||
#include "ospfd/ospf_interface.h"
|
#include "ospfd/ospf_interface.h"
|
||||||
|
@ -125,14 +126,14 @@ Report bugs to %s\n", progname, ZEBRA_BUG_ADDRESS);
|
||||||
|
|
||||||
/* SIGHUP handler. */
|
/* SIGHUP handler. */
|
||||||
void
|
void
|
||||||
sighup (int sig)
|
sighup (void)
|
||||||
{
|
{
|
||||||
zlog (NULL, LOG_INFO, "SIGHUP received");
|
zlog (NULL, LOG_INFO, "SIGHUP received");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SIGINT handler. */
|
/* SIGINT handler. */
|
||||||
void
|
void
|
||||||
sigint (int sig)
|
sigint (void)
|
||||||
{
|
{
|
||||||
zlog (NULL, LOG_INFO, "Terminating on signal");
|
zlog (NULL, LOG_INFO, "Terminating on signal");
|
||||||
|
|
||||||
|
@ -143,58 +144,26 @@ sigint (int sig)
|
||||||
|
|
||||||
/* SIGUSR1 handler. */
|
/* SIGUSR1 handler. */
|
||||||
void
|
void
|
||||||
sigusr1 (int sig)
|
sigusr1 (void)
|
||||||
{
|
{
|
||||||
zlog_rotate (NULL);
|
zlog_rotate (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Signal wrapper. */
|
struct quagga_signal_t ospf_signals[] =
|
||||||
RETSIGTYPE *
|
|
||||||
signal_set (int signo, void (*func)(int))
|
|
||||||
{
|
{
|
||||||
int ret;
|
{
|
||||||
struct sigaction sig;
|
.signal = SIGHUP,
|
||||||
struct sigaction osig;
|
.handler = &sighup,
|
||||||
|
},
|
||||||
sig.sa_handler = func;
|
{
|
||||||
sigemptyset (&sig.sa_mask);
|
.signal = SIGUSR1,
|
||||||
sig.sa_flags = 0;
|
.handler = &sigusr1,
|
||||||
#ifdef SA_RESTART
|
},
|
||||||
sig.sa_flags |= SA_RESTART;
|
{
|
||||||
#endif /* SA_RESTART */
|
.signal = SIGINT,
|
||||||
|
.handler = &sigint,
|
||||||
ret = sigaction (signo, &sig, &osig);
|
},
|
||||||
|
};
|
||||||
if (ret < 0)
|
|
||||||
return (SIG_ERR);
|
|
||||||
else
|
|
||||||
return (osig.sa_handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Initialization of signal handles. */
|
|
||||||
void
|
|
||||||
signal_init ()
|
|
||||||
{
|
|
||||||
signal_set (SIGHUP, sighup);
|
|
||||||
signal_set (SIGINT, sigint);
|
|
||||||
signal_set (SIGTERM, sigint);
|
|
||||||
signal_set (SIGPIPE, SIG_IGN);
|
|
||||||
#ifdef SIGTSTP
|
|
||||||
signal_set (SIGTSTP, SIG_IGN);
|
|
||||||
#endif
|
|
||||||
#ifdef SIGTTIN
|
|
||||||
signal_set (SIGTTIN, SIG_IGN);
|
|
||||||
#endif
|
|
||||||
#ifdef SIGTTOU
|
|
||||||
signal_set (SIGTTOU, SIG_IGN);
|
|
||||||
#endif
|
|
||||||
signal_set (SIGUSR1, sigusr1);
|
|
||||||
#ifdef HAVE_GLIBC_BACKTRACE
|
|
||||||
signal_set (SIGBUS, debug_print_trace);
|
|
||||||
signal_set (SIGSEGV, debug_print_trace);
|
|
||||||
signal_set (SIGILL, debug_print_trace);
|
|
||||||
#endif /* HAVE_GLIBC_BACKTRACE */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* OSPFd main routine. */
|
/* OSPFd main routine. */
|
||||||
int
|
int
|
||||||
|
@ -285,7 +254,7 @@ main (int argc, char **argv)
|
||||||
|
|
||||||
/* Library inits. */
|
/* Library inits. */
|
||||||
zprivs_init (&ospfd_privs);
|
zprivs_init (&ospfd_privs);
|
||||||
signal_init ();
|
signal_init (master, Q_SIGC(ospf_signals), ospf_signals);
|
||||||
cmd_init (1);
|
cmd_init (1);
|
||||||
debug_init ();
|
debug_init ();
|
||||||
vty_init (master);
|
vty_init (master);
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#include "keychain.h"
|
#include "keychain.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "privs.h"
|
#include "privs.h"
|
||||||
|
#include "sigevent.h"
|
||||||
|
|
||||||
#include "ripd/ripd.h"
|
#include "ripd/ripd.h"
|
||||||
|
|
||||||
|
@ -120,32 +121,9 @@ Report bugs to %s\n", progname, ZEBRA_BUG_ADDRESS);
|
||||||
exit (status);
|
exit (status);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Signale wrapper. */
|
|
||||||
RETSIGTYPE *
|
|
||||||
signal_set (int signo, void (*func)(int))
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
struct sigaction sig;
|
|
||||||
struct sigaction osig;
|
|
||||||
|
|
||||||
sig.sa_handler = func;
|
|
||||||
sigemptyset (&sig.sa_mask);
|
|
||||||
sig.sa_flags = 0;
|
|
||||||
#ifdef SA_RESTART
|
|
||||||
sig.sa_flags |= SA_RESTART;
|
|
||||||
#endif /* SA_RESTART */
|
|
||||||
|
|
||||||
ret = sigaction (signo, &sig, &osig);
|
|
||||||
|
|
||||||
if (ret < 0)
|
|
||||||
return (SIG_ERR);
|
|
||||||
else
|
|
||||||
return (osig.sa_handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* SIGHUP handler. */
|
/* SIGHUP handler. */
|
||||||
void
|
void
|
||||||
sighup (int sig)
|
sighup (void)
|
||||||
{
|
{
|
||||||
zlog_info ("SIGHUP received");
|
zlog_info ("SIGHUP received");
|
||||||
rip_clean ();
|
rip_clean ();
|
||||||
|
@ -163,7 +141,7 @@ sighup (int sig)
|
||||||
|
|
||||||
/* SIGINT handler. */
|
/* SIGINT handler. */
|
||||||
void
|
void
|
||||||
sigint (int sig)
|
sigint (void)
|
||||||
{
|
{
|
||||||
zlog (NULL, LOG_INFO, "Terminating on signal");
|
zlog (NULL, LOG_INFO, "Terminating on signal");
|
||||||
|
|
||||||
|
@ -175,21 +153,26 @@ sigint (int sig)
|
||||||
|
|
||||||
/* SIGUSR1 handler. */
|
/* SIGUSR1 handler. */
|
||||||
void
|
void
|
||||||
sigusr1 (int sig)
|
sigusr1 (void)
|
||||||
{
|
{
|
||||||
zlog_rotate (NULL);
|
zlog_rotate (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialization of signal handles. */
|
struct quagga_signal_t ripd_signals[] =
|
||||||
void
|
|
||||||
signal_init ()
|
|
||||||
{
|
{
|
||||||
signal_set (SIGHUP, sighup);
|
{
|
||||||
signal_set (SIGINT, sigint);
|
.signal = SIGHUP,
|
||||||
signal_set (SIGTERM, sigint);
|
.handler = &sighup,
|
||||||
signal_set (SIGPIPE, SIG_IGN);
|
},
|
||||||
signal_set (SIGUSR1, sigusr1);
|
{
|
||||||
}
|
.signal = SIGUSR1,
|
||||||
|
.handler = &sigusr1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.signal = SIGINT,
|
||||||
|
.handler = &sigusr1,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
/* Main routine of ripd. */
|
/* Main routine of ripd. */
|
||||||
int
|
int
|
||||||
|
@ -271,7 +254,7 @@ main (int argc, char **argv)
|
||||||
|
|
||||||
/* Library initialization. */
|
/* Library initialization. */
|
||||||
zprivs_init (&ripd_privs);
|
zprivs_init (&ripd_privs);
|
||||||
signal_init ();
|
signal_init (master, Q_SIGC(ripd_signals), ripd_signals);
|
||||||
cmd_init (1);
|
cmd_init (1);
|
||||||
vty_init (master);
|
vty_init (master);
|
||||||
memory_init ();
|
memory_init ();
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include "prefix.h"
|
#include "prefix.h"
|
||||||
#include "if.h"
|
#include "if.h"
|
||||||
#include "privs.h"
|
#include "privs.h"
|
||||||
|
#include "sigevent.h"
|
||||||
|
|
||||||
#include "ripngd/ripngd.h"
|
#include "ripngd/ripngd.h"
|
||||||
|
|
||||||
|
@ -126,7 +127,7 @@ Report bugs to %s\n", progname, ZEBRA_BUG_ADDRESS);
|
||||||
|
|
||||||
/* SIGHUP handler. */
|
/* SIGHUP handler. */
|
||||||
void
|
void
|
||||||
sighup (int sig)
|
sighup (void)
|
||||||
{
|
{
|
||||||
zlog_info ("SIGHUP received");
|
zlog_info ("SIGHUP received");
|
||||||
ripng_clean ();
|
ripng_clean ();
|
||||||
|
@ -143,7 +144,7 @@ sighup (int sig)
|
||||||
|
|
||||||
/* SIGINT handler. */
|
/* SIGINT handler. */
|
||||||
void
|
void
|
||||||
sigint (int sig)
|
sigint (void)
|
||||||
{
|
{
|
||||||
zlog_info ("Terminating on signal");
|
zlog_info ("Terminating on signal");
|
||||||
|
|
||||||
|
@ -155,44 +156,26 @@ sigint (int sig)
|
||||||
|
|
||||||
/* SIGUSR1 handler. */
|
/* SIGUSR1 handler. */
|
||||||
void
|
void
|
||||||
sigusr1 (int sig)
|
sigusr1 (void)
|
||||||
{
|
{
|
||||||
zlog_rotate (NULL);
|
zlog_rotate (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Signale wrapper. */
|
struct quagga_signal_t ripng_signals[] =
|
||||||
RETSIGTYPE *
|
|
||||||
signal_set (int signo, void (*func)(int))
|
|
||||||
{
|
{
|
||||||
int ret;
|
{
|
||||||
struct sigaction sig;
|
.signal = SIGHUP,
|
||||||
struct sigaction osig;
|
.handler = &sighup,
|
||||||
|
},
|
||||||
sig.sa_handler = func;
|
{
|
||||||
sigemptyset (&sig.sa_mask);
|
.signal = SIGUSR1,
|
||||||
sig.sa_flags = 0;
|
.handler = &sigusr1,
|
||||||
#ifdef SA_RESTART
|
},
|
||||||
sig.sa_flags |= SA_RESTART;
|
{
|
||||||
#endif /* SA_RESTART */
|
.signal = SIGINT,
|
||||||
|
.handler = &sigint,
|
||||||
ret = sigaction (signo, &sig, &osig);
|
},
|
||||||
|
};
|
||||||
if (ret < 0)
|
|
||||||
return (SIG_ERR);
|
|
||||||
else
|
|
||||||
return (osig.sa_handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Initialization of signal handles. */
|
|
||||||
void
|
|
||||||
signal_init ()
|
|
||||||
{
|
|
||||||
signal_set (SIGHUP, sighup);
|
|
||||||
signal_set (SIGINT, sigint);
|
|
||||||
signal_set (SIGTERM, sigint);
|
|
||||||
signal_set (SIGPIPE, SIG_IGN);
|
|
||||||
signal_set (SIGUSR1, sigusr1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* RIPngd main routine. */
|
/* RIPngd main routine. */
|
||||||
int
|
int
|
||||||
|
@ -275,7 +258,7 @@ main (int argc, char **argv)
|
||||||
|
|
||||||
/* Library inits. */
|
/* Library inits. */
|
||||||
zprivs_init (&ripngd_privs);
|
zprivs_init (&ripngd_privs);
|
||||||
signal_init ();
|
signal_init (master, Q_SIGC(ripng_signals), ripng_signals);
|
||||||
cmd_init (1);
|
cmd_init (1);
|
||||||
vty_init (master);
|
vty_init (master);
|
||||||
memory_init ();
|
memory_init ();
|
||||||
|
|
55
zebra/main.c
55
zebra/main.c
|
@ -30,6 +30,7 @@
|
||||||
#include "prefix.h"
|
#include "prefix.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "privs.h"
|
#include "privs.h"
|
||||||
|
#include "sigevent.h"
|
||||||
|
|
||||||
#include "zebra/rib.h"
|
#include "zebra/rib.h"
|
||||||
#include "zebra/zserv.h"
|
#include "zebra/zserv.h"
|
||||||
|
@ -131,7 +132,7 @@ Report bugs to %s\n", progname, ZEBRA_BUG_ADDRESS);
|
||||||
|
|
||||||
/* SIGHUP handler. */
|
/* SIGHUP handler. */
|
||||||
void
|
void
|
||||||
sighup (int sig)
|
sighup (void)
|
||||||
{
|
{
|
||||||
zlog_info ("SIGHUP received");
|
zlog_info ("SIGHUP received");
|
||||||
|
|
||||||
|
@ -141,7 +142,7 @@ sighup (int sig)
|
||||||
|
|
||||||
/* SIGINT handler. */
|
/* SIGINT handler. */
|
||||||
void
|
void
|
||||||
sigint (int sig)
|
sigint (void)
|
||||||
{
|
{
|
||||||
/* Decrared in rib.c */
|
/* Decrared in rib.c */
|
||||||
void rib_close ();
|
void rib_close ();
|
||||||
|
@ -156,44 +157,26 @@ sigint (int sig)
|
||||||
|
|
||||||
/* SIGUSR1 handler. */
|
/* SIGUSR1 handler. */
|
||||||
void
|
void
|
||||||
sigusr1 (int sig)
|
sigusr1 (void)
|
||||||
{
|
{
|
||||||
zlog_rotate (NULL);
|
zlog_rotate (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Signale wrapper. */
|
struct quagga_signal_t zebra_signals[] =
|
||||||
RETSIGTYPE *
|
|
||||||
signal_set (int signo, void (*func)(int))
|
|
||||||
{
|
{
|
||||||
int ret;
|
{
|
||||||
struct sigaction sig;
|
.signal = SIGHUP,
|
||||||
struct sigaction osig;
|
.handler = &sighup,
|
||||||
|
},
|
||||||
sig.sa_handler = func;
|
{
|
||||||
sigemptyset (&sig.sa_mask);
|
.signal = SIGUSR1,
|
||||||
sig.sa_flags = 0;
|
.handler = &sigusr1,
|
||||||
#ifdef SA_RESTART
|
},
|
||||||
sig.sa_flags |= SA_RESTART;
|
{
|
||||||
#endif /* SA_RESTART */
|
.signal = SIGINT,
|
||||||
|
.handler = &sigusr1,
|
||||||
ret = sigaction (signo, &sig, &osig);
|
},
|
||||||
|
};
|
||||||
if (ret < 0)
|
|
||||||
return (SIG_ERR);
|
|
||||||
else
|
|
||||||
return (osig.sa_handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Initialization of signal handles. */
|
|
||||||
void
|
|
||||||
signal_init ()
|
|
||||||
{
|
|
||||||
signal_set (SIGHUP, sighup);
|
|
||||||
signal_set (SIGINT, sigint);
|
|
||||||
signal_set (SIGTERM, sigint);
|
|
||||||
signal_set (SIGPIPE, SIG_IGN);
|
|
||||||
signal_set (SIGUSR1, sigusr1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Main startup routine. */
|
/* Main startup routine. */
|
||||||
int
|
int
|
||||||
|
@ -289,7 +272,7 @@ main (int argc, char **argv)
|
||||||
zprivs_init (&zserv_privs);
|
zprivs_init (&zserv_privs);
|
||||||
|
|
||||||
/* Vty related initialize. */
|
/* Vty related initialize. */
|
||||||
signal_init ();
|
signal_init (zebrad.master, Q_SIGC(zebra_signals), zebra_signals);
|
||||||
cmd_init (1);
|
cmd_init (1);
|
||||||
vty_init (zebrad.master);
|
vty_init (zebrad.master);
|
||||||
memory_init ();
|
memory_init ();
|
||||||
|
|
Loading…
Reference in a new issue