]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
Modification to have broadcast servers enable the socket for broadcast
authorDanny Mayer <mayer@ntp.org>
Fri, 8 Oct 2004 02:40:57 +0000 (22:40 -0400)
committerDanny Mayer <mayer@ntp.org>
Fri, 8 Oct 2004 02:40:57 +0000 (22:40 -0400)
bk: 4165fe39bPdXmAD8_PGqI9lNVpy8wA

include/ntpd.h
ntpd/ntp_io.c
ntpd/ntp_peer.c

index 616161b640ff32500d5ed60049fdae79cf7402ad..a4d3bc5e505e26a12250fba1c4bbba2f36341626 100644 (file)
@@ -11,8 +11,8 @@
 #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);
@@ -73,6 +73,7 @@ extern        void    ntp_intres      P((void));
 /* 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 *));
@@ -178,7 +179,6 @@ extern      int     refclock_newpeer P((struct peer *));
 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 */
 
@@ -312,6 +312,7 @@ extern int  forground_process;      /* run the process in the forground */
 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) */
@@ -350,7 +351,6 @@ extern u_char       sys_stratum;            /* stratum of system */
 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 */
index a43e89ad0e1eee0fa9697770598b1fe9fb05e7da..19b2232666d7f020839d08dfda785be1297e5b8a 100644 (file)
@@ -615,6 +615,18 @@ set_reuseaddr(int flag) {
        }
 }
 
+/*
+ * 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
@@ -636,6 +648,12 @@ socket_broadcast_enable(struct interface *iface, int ind, struct sockaddr_storag
                        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);
index d9ad7040dd10ee3609b3cb70706eb22fe72f2dda..164b5b8f82e30968d4af1abe0ba49f93bca73797 100644 (file)
@@ -590,6 +590,14 @@ newpeer(
                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;