Skip to content

Commit

Permalink
2004-01-19 Paul Jakma <paul@dishone.st>
Browse files Browse the repository at this point in the history
        * 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.
  • Loading branch information
paul committed Jan 19, 2004
1 parent 9a76e2d commit 2d75d05
Show file tree
Hide file tree
Showing 8 changed files with 138 additions and 246 deletions.
7 changes: 7 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -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>

* Makefile.am: redhat/ is a dist subdir too.
Expand Down
64 changes: 26 additions & 38 deletions bgpd/bgp_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "prefix.h"
#include "log.h"
#include "privs.h"
#include "sigevent.h"

#include "bgpd/bgpd.h"
#include "bgpd/bgp_attr.h"
Expand All @@ -52,6 +53,27 @@ struct option longopts[] =
{ 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. */
char config_current[] = BGP_DEFAULT_CONFIG;
char config_default[] = SYSCONFDIR BGP_DEFAULT_CONFIG;
Expand Down Expand Up @@ -123,7 +145,7 @@ Report bugs to %s\n", progname, ZEBRA_BUG_ADDRESS);

/* SIGHUP handler. */
void
sighup (int sig)
sighup (void)
{
zlog (NULL, LOG_INFO, "SIGHUP received");

Expand All @@ -143,7 +165,7 @@ sighup (int sig)

/* SIGINT handler. */
void
sigint (int sig)
sigint (void)
{
zlog (NULL, LOG_INFO, "Terminating on signal");

Expand All @@ -155,44 +177,10 @@ sigint (int sig)

/* SIGUSR1 handler. */
void
sigusr1 (int sig)
sigusr1 (void)
{
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
state machine is handled at here. */
Expand Down Expand Up @@ -282,7 +270,7 @@ main (int argc, char **argv)

/* Initializations. */
srand (time (NULL));
signal_init ();
signal_init (master, Q_SIGC(bgp_signals), bgp_signals);
zprivs_init (&bgpd_privs);
cmd_init (1);
vty_init (master);
Expand Down
74 changes: 26 additions & 48 deletions isisd/isis_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
#include "stream.h"
#include "if.h"
#include "privs.h"
#include "sigevent.h"

#include "isisd/dict.h"
#include "include-netbsd/iso.h"
Expand Down Expand Up @@ -148,8 +149,9 @@ terminate (int i)
/*
* Signal handlers
*/

void
sighup (int sig)
sighup (void)
{
zlog_info ("SIGHUP received");
reload ();
Expand All @@ -158,7 +160,7 @@ sighup (int sig)
}

void
sigint (int sig)
sigint (void)
{
zlog_info ("SIGINT received");
terminate (0);
Expand All @@ -167,62 +169,38 @@ sigint (int sig)
}

void
sigterm (int sig)
sigterm (void)
{
zlog_info ("SIGTERM received");
terminate (0);
}

void
sigusr1 (int sig)
sigusr1 (void)
{
zlog_info ("SIGUSR1 received");
zlog_rotate (NULL);
}

/*
* Signal 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);
}

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);
}
struct quagga_signal_t isisd_signals[] =
{
{
.signal = SIGHUP,
.handler = &sighup,
},
{
.signal = SIGUSR1,
.handler = &sigusr1,
},
{
.signal = SIGINT,
.handler = &sigint,
},
{
.signal = SIGTERM,
.handler = &sigterm,
},
};

/*
* Main routine of isisd. Parse arguments and handle IS-IS state machine.
Expand Down Expand Up @@ -315,7 +293,7 @@ main (int argc, char **argv, char **envp)
* initializations
*/
zprivs_init (&isisd_privs);
signal_init ();
signal_init (master, Q_SIGC(isisd_signals), isisd_signals);
cmd_init (1);
vty_init (master);
memory_init ();
Expand Down
5 changes: 3 additions & 2 deletions lib/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ libzebra_a_SOURCES = \
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 \
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@

Expand All @@ -21,7 +22,7 @@ pkginclude_HEADERS = \
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 \
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

Expand Down
69 changes: 19 additions & 50 deletions ospfd/ospf_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
#include "memory.h"
#include "privs.h"
#include "debug.h"
#include "sigevent.h"

#include "ospfd/ospfd.h"
#include "ospfd/ospf_interface.h"
Expand Down Expand Up @@ -125,14 +126,14 @@ Report bugs to %s\n", progname, ZEBRA_BUG_ADDRESS);

/* SIGHUP handler. */
void
sighup (int sig)
sighup (void)
{
zlog (NULL, LOG_INFO, "SIGHUP received");
}

/* SIGINT handler. */
void
sigint (int sig)
sigint (void)
{
zlog (NULL, LOG_INFO, "Terminating on signal");

Expand All @@ -143,58 +144,26 @@ sigint (int sig)

/* SIGUSR1 handler. */
void
sigusr1 (int sig)
sigusr1 (void)
{
zlog_rotate (NULL);
}

/* Signal wrapper. */
RETSIGTYPE *
signal_set (int signo, void (*func)(int))
struct quagga_signal_t ospf_signals[] =
{
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);
#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 */
}
{
.signal = SIGHUP,
.handler = &sighup,
},
{
.signal = SIGUSR1,
.handler = &sigusr1,
},
{
.signal = SIGINT,
.handler = &sigint,
},
};

/* OSPFd main routine. */
int
Expand Down Expand Up @@ -285,7 +254,7 @@ main (int argc, char **argv)

/* Library inits. */
zprivs_init (&ospfd_privs);
signal_init ();
signal_init (master, Q_SIGC(ospf_signals), ospf_signals);
cmd_init (1);
debug_init ();
vty_init (master);
Expand Down
Loading

0 comments on commit 2d75d05

Please sign in to comment.