#include "recvbuff.h"
#ifdef SYS_WINNT
-#define exit service_exit
-extern void service_exit (int);
+#define exit ntservice_exit
+extern void ntservice_exit (int);
/* declare the service threads */
void service_main (DWORD, LPTSTR *);
void service_ctrl (DWORD);
/* ntp_io.c */
extern struct interface *findinterface P((struct sockaddr_storage *));
extern struct interface *findbcastinter P((struct sockaddr_storage *));
+extern void enable_broadcast P((struct interface *, struct sockaddr_storage *));
extern void init_io P((void));
extern void input_handler P((l_fp *));
extern void refclock_unpeer P((struct peer *));
extern void refclock_receive P((struct peer *));
extern void refclock_transmit P((struct peer *));
-extern void refclock_timeout P((struct peer *));
extern void init_refclock P((void));
#endif /* REFCLOCK */
extern u_char sys_poll; /* system poll interval (log2 s) */
extern int state; /* clock discipline state */
extern int tc_counter; /* poll-adjust counter */
+extern u_long last_time; /* time of last clock update (s) */
extern double last_offset; /* last clock offset (s) */
extern double allan_xpt; /* Allan intercept (s) */
extern double clock_jitter; /* clock jitter (s) */
extern s_char sys_precision; /* local clock precision */
extern double sys_rootdelay; /* distance to current sync source */
extern double sys_rootdispersion; /* dispersion of system clock */
-extern u_long sys_clocktime; /* last system clock update */
extern u_int32 sys_refid; /* reference source for local clock */
extern l_fp sys_reftime; /* time we were last updated */
extern struct peer *sys_peer; /* our current peer */
}
}
+/*
+ * This is just a wrapper around an internal function so we can
+ * make other changes as necessary later on
+ */
+void
+enable_broadcast(struct interface *iface, struct sockaddr_storage *baddr)
+{
+#ifdef SO_BROADCAST
+ socket_broadcast_enable(iface, baddr);
+#endif
+}
+
#ifdef OPEN_BCAST_SOCKET
/*
* Enable a broadcast address to a given socket
netsyslog(LOG_ERR, "setsockopt(SO_BROADCAST) enable failure on address %s: %m",
stoa(maddr));
}
+#ifdef DEBUG
+ else if (debug > 1) {
+ printf("Broadcast enabled on socket %d for address %s\n",
+ iface->fd, stoa(maddr));
+ }
+#endif
}
iface->flags |= INT_BCASTOPEN;
modify_addr_in_list(maddr, iface->flags);
peer->dstadr = dstadr;
else
peer->dstadr = findinterface(srcadr);
+
+ /*
+ * Broadcast needs the socket enabled for broadcast
+ */
+ if (cast_flags & (MDF_BCLNT | MDF_BCAST)) {
+ enable_broadcast(peer->dstadr, srcadr);
+ }
+
peer->srcadr = *srcadr;
peer->hmode = (u_char)hmode;
peer->version = (u_char)version;