aboutsummaryrefslogtreecommitdiff
path: root/sbin/routed/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'sbin/routed/main.c')
-rw-r--r--sbin/routed/main.c48
1 files changed, 29 insertions, 19 deletions
diff --git a/sbin/routed/main.c b/sbin/routed/main.c
index 15ad6ef7ea3c..58dbd1459605 100644
--- a/sbin/routed/main.c
+++ b/sbin/routed/main.c
@@ -40,18 +40,18 @@
#include <fcntl.h>
#include <sys/file.h>
-#if !defined(sgi) && !defined(__NetBSD__)
-char copyright[] =
-"@(#) Copyright (c) 1983, 1988, 1993\n\
- The Regents of the University of California. All rights reserved.\n";
-static char sccsid[] __attribute__((unused)) = "@(#)main.c 8.1 (Berkeley) 6/5/93";
-#elif defined(__NetBSD__)
+__COPYRIGHT("@(#) Copyright (c) 1983, 1988, 1993\n"
+ "The Regents of the University of California."
+ " All rights reserved.\n");
+#ifdef __NetBSD__
__RCSID("$NetBSD$");
-__COPYRIGHT("@(#) Copyright (c) 1983, 1988, 1993\n\
- The Regents of the University of California. All rights reserved.\n");
+#include <util.h>
+#elif defined(__FreeBSD__)
+__RCSID("$FreeBSD$");
+#else
+__RCSID("$Revision: 2.27 $");
+#ident "$Revision: 2.27 $"
#endif
-#ident "$Revision: 2.22 $"
-
pid_t mypid;
@@ -119,7 +119,7 @@ main(int argc,
*/
signal(SIGHUP, SIG_IGN);
- openlog("routed", LOG_PID | LOG_ODELAY, LOG_DAEMON);
+ openlog("routed", LOG_PID, LOG_DAEMON);
ftrace = stdout;
gettimeofday(&clk, 0);
@@ -221,7 +221,7 @@ main(int argc,
case 'v':
/* display version */
verbose++;
- msglog("version 2.22");
+ msglog("version 2.25");
break;
default:
@@ -294,6 +294,9 @@ usage:
BADERR(0,"daemon()");
#endif
+#if defined(__NetBSD__)
+ pidfile(0);
+#endif
mypid = getpid();
srandom((int)(clk.tv_sec ^ clk.tv_usec ^ mypid));
@@ -638,7 +641,7 @@ static int /* <0 or file descriptor */
get_rip_sock(naddr addr,
int serious) /* 1=failure to bind is serious */
{
- struct sockaddr_in sin;
+ struct sockaddr_in rsin;
unsigned char ttl;
int s;
@@ -646,14 +649,14 @@ get_rip_sock(naddr addr,
if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
BADERR(1,"rip_sock = socket()");
- memset(&sin, 0, sizeof(sin));
+ memset(&rsin, 0, sizeof(rsin));
#ifdef _HAVE_SIN_LEN
- sin.sin_len = sizeof(sin);
+ rsin.sin_len = sizeof(rsin);
#endif
- sin.sin_family = AF_INET;
- sin.sin_port = htons(RIP_PORT);
- sin.sin_addr.s_addr = addr;
- if (bind(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) {
+ rsin.sin_family = AF_INET;
+ rsin.sin_port = htons(RIP_PORT);
+ rsin.sin_addr.s_addr = addr;
+ if (bind(s, (struct sockaddr *)&rsin, sizeof(rsin)) < 0) {
if (serious)
BADERR(errno != EADDRINUSE, "bind(rip_sock)");
return -1;
@@ -717,9 +720,13 @@ rip_mcast_on(struct interface *ifp)
#endif
&& !(ifp->int_state & IS_ALIAS)) {
m.imr_multiaddr.s_addr = htonl(INADDR_RIP_GROUP);
+#ifdef MCAST_IFINDEX
+ m.imr_interface.s_addr = htonl(ifp->int_index);
+#else
m.imr_interface.s_addr = ((ifp->int_if_flags & IFF_POINTOPOINT)
? ifp->int_dstaddr
: ifp->int_addr);
+#endif
if (setsockopt(rip_sock,IPPROTO_IP, IP_ADD_MEMBERSHIP,
&m, sizeof(m)) < 0)
LOGERR("setsockopt(IP_ADD_MEMBERSHIP RIP)");
@@ -861,6 +868,7 @@ msglog(const char *p, ...)
(void)vfprintf(ftrace, p, args);
(void)fputc('\n', ftrace);
}
+ va_end(args);
}
@@ -923,6 +931,7 @@ msglim(struct msg_limit *lim, naddr addr, const char *p, ...)
(void)vfprintf(ftrace, p, args);
(void)fputc('\n', ftrace);
}
+ va_end(args);
}
@@ -940,6 +949,7 @@ logbad(int dump, const char *p, ...)
(void)vfprintf(stderr, p, args);
(void)fputs("; giving up\n",stderr);
(void)fflush(stderr);
+ va_end(args);
if (dump)
abort();