[ntp:bk-ntp-dev-send] Bitkeeper diffs
Harlan Stenn
stenn at deacon.udel.edu
Thu Jul 20 00:30:28 UTC 2006
#### ChangeSet ####
2006-07-19 20:28:32-04:00, stenn at pogo.udel.edu
Merge bk://www.ntp.org/ntp-dev
into pogo.udel.edu:/pogo/users/kardel/main-line/ntp-dev
==== ntpd/ntp_io.c ====
2006-07-19 20:28:29-04:00, stenn at pogo.udel.edu +0 -0
Auto merged
#### ChangeSet ####
2006-07-15 09:35:45+00:00, kardel at pogo.udel.edu
ntp_io.c:
cleanup debug messages
add RTM_REDIRECT, RTM_CHANGE as additional interface list scan
routing message triggers
ntpd.h:
select_peerinterface() is comletely private to ntp_peer.c
ntp_peer.c:
- clear peer crypto when disconnecting from a bound interface
- re-arrange initialization for more usable debug output
- only bind to non wildcard interfaces even if the OS
would offer to send via such an interface
==== include/ntpd.h ====
2006-07-15 09:06:47+00:00, kardel at pogo.udel.edu +0 -1
select_peerinterface() is comletely private to ntp_peer.c
--- 1.92/include/ntpd.h 2006-07-19 20:30:29 -04:00
+++ 1.93/include/ntpd.h 2006-07-19 20:30:29 -04:00
@@ -140,7 +140,6 @@ extern struct peer *findexistingpeer P((
extern struct peer *findpeer P((struct sockaddr_storage *, struct interface *, int, int *));
extern struct peer *findpeerbyassoc P((u_int));
extern void set_peerdstadr P((struct peer *peer, struct interface *interface));
-extern struct interface *select_peerinterface P((struct peer *, struct sockaddr_storage *, struct interface *, u_char));
extern struct peer *newpeer P((struct sockaddr_storage *, struct interface *, int, int, int, int, u_int, u_char, int, keyid_t));
extern void peer_all_reset P((void));
extern void peer_clr_stats P((void));
==== ntpd/ntp_io.c ====
2006-07-15 08:59:23+00:00, kardel at pogo.udel.edu +9 -3
cleanup debug messages
add RTM_REDIRECT, RTM_CHANGE as additional interface list scan
routing message triggers
--- 1.229/ntpd/ntp_io.c 2006-07-19 20:30:29 -04:00
+++ 1.230/ntpd/ntp_io.c 2006-07-19 20:30:29 -04:00
@@ -1123,10 +1123,10 @@ update_interfaces(
*/
init_interface(&interface);
- DPRINT_INTERFACE(1, (&interface, "examining", "\n"));
-
convert_isc_if(&isc_if, &interface, port);
+ DPRINT_INTERFACE(1, (&interface, "examining ", "\n"));
+
if (!(interface.flags & INT_UP)) { /* interfaces must be UP to be usable */
DPRINTF(1, ("skipping interface %s (%s) - DOWN\n", interface.name, stoa(&interface.sin)));
continue;
@@ -3634,6 +3634,12 @@ process_routing_msgs(struct asyncio_read
#ifdef RTM_DELETE
case RTM_DELETE:
#endif
+#ifdef RTM_REDIRECT
+ case RTM_REDIRECT:
+#endif
+#ifdef RTM_CHANGE
+ case RTM_CHANGE:
+#endif
#ifdef RTM_LOSING
case RTM_LOSING:
#endif
@@ -3647,7 +3653,7 @@ process_routing_msgs(struct asyncio_read
* we are keen on new and deleted addresses and if an interface goes up and down or routing changes
*/
DPRINTF(1, ("routing message op = %d: scheduling interface update\n", rtm->rtm_type));
- timer_interfacetimeout(current_time + 2);
+ timer_interfacetimeout(current_time);
break;
default:
/*
==== ntpd/ntp_peer.c ====
2006-07-15 09:04:48+00:00, kardel at pogo.udel.edu +43 -31
- clear crypto when leaving a bound interface
- re-arrange initialization for more usable debug output
- only bind to non wildcard interfaces even if the OS
would offer to send via such an interface
--- 1.94/ntpd/ntp_peer.c 2006-07-19 20:30:29 -04:00
+++ 1.95/ntpd/ntp_peer.c 2006-07-19 20:30:29 -04:00
@@ -104,6 +104,7 @@ int peer_preempt; /* preemptable assoc
static struct peer init_peer_alloc[INIT_PEER_ALLOC]; /* init alloc */
static void getmorepeermem P((void));
+static struct interface *select_peerinterface P((struct peer *, struct sockaddr_storage *, struct interface *, u_char));
/*
* init_peer - initialize peer data structures and counters
@@ -529,31 +530,31 @@ void
set_peerdstadr(struct peer *peer, struct interface *interface)
{
if (peer->dstadr != interface) {
+ struct interface *prev_dstadr = peer->dstadr;
+
if (peer->dstadr != NULL)
{
peer->dstadr->peercnt--;
ISC_LIST_UNLINK_TYPE(peer->dstadr->peers, peer, ilink, struct peer);
}
- if (interface == NULL)
- {
+ DPRINTF(1, ("set_peerdstadr(%s): change interface from %s to %s\n",
+ stoa(&peer->srcadr),
+ (peer->dstadr != NULL) ? stoa(&peer->dstadr->sin) : "<null>",
+ (interface != NULL) ? stoa(&interface->sin) : "<null>"));
+
+ peer->dstadr = interface;
+
+ if (prev_dstadr != NULL) {
/*
- * reset crypto information if we disconnect from
- * an interface - other crypto updates are handled
- * by the crypto machinery
+ * reset crypto information if we change from an
+ * active interface
+ * all other crypto updates are handled by the crypto
+ * machinery
*/
-#ifdef DEBUG
- msyslog(LOG_INFO, "set_peerdstadr: disconnecting peer from interface - clearing crypto");
-#endif
peer_crypto_clear(peer);
}
- DPRINTF(1, ("set_peerdstadr: at %ld next %ld assoc ID %d\n",
- current_time, peer->nextdate, peer->associd));
-
-
- peer->dstadr = interface;
-
if (peer->dstadr != NULL)
{
ISC_LIST_APPEND(peer->dstadr->peers, peer, ilink);
@@ -633,7 +634,7 @@ refresh_all_peerinterfaces(void)
int n;
/*
- * this is called when te interfac list has changed
+ * this is called when the interface list has changed
* give all peers a chance to find a better interface
*/
for (n = 0; n < NTP_HASH_SIZE; n++) {
@@ -648,7 +649,7 @@ refresh_all_peerinterfaces(void)
/*
* find an interface suitable for the src address
*/
-struct interface *
+static struct interface *
select_peerinterface(struct peer *peer, struct sockaddr_storage *srcadr, struct interface *dstadr, u_char cast_flags)
{
struct interface *interface;
@@ -687,6 +688,15 @@ select_peerinterface(struct peer *peer,
interface = dstadr;
else
interface = findinterface(srcadr);
+
+ /*
+ * we do not bind to the wildcard interfaces for output
+ * as our (network) source address would be undefined and
+ * crypto will not work without knowing the own transmit address
+ */
+ if (interface != NULL && interface->flags & INT_WILDCARD)
+ interface = NULL;
+
return interface;
}
@@ -758,7 +768,24 @@ newpeer(
return (NULL);
}
+ peer->srcadr = *srcadr;
+ peer->hmode = (u_char)hmode;
+ peer->version = (u_char)version;
+ peer->minpoll = (u_char)max(NTP_MINPOLL, minpoll);
+ peer->maxpoll = (u_char)min(NTP_MAXPOLL, maxpoll);
+ peer->flags = flags;
+
set_peerdstadr(peer, dstadr);
+
+#ifdef DEBUG
+ if (debug>2) {
+ if (peer->dstadr)
+ printf("newpeer: using fd %d and our addr %s\n",
+ peer->dstadr->fd, stoa(&peer->dstadr->sin));
+ else
+ printf("newpeer: local interface currently not bound\n");
+ }
+#endif
/*
* Broadcast needs the socket enabled for broadcast
@@ -772,21 +799,6 @@ newpeer(
if (cast_flags & MDF_MCAST && peer->dstadr) {
enable_multicast_if(peer->dstadr, srcadr);
}
-#ifdef DEBUG
- if (debug>2) {
- if (peer->dstadr)
- printf("newpeer: using fd %d and our addr %s\n",
- peer->dstadr->fd, stoa(&peer->dstadr->sin));
- else
- printf("newpeer: local interface currently not bound\n");
- }
-#endif
- peer->srcadr = *srcadr;
- peer->hmode = (u_char)hmode;
- peer->version = (u_char)version;
- peer->minpoll = (u_char)max(NTP_MINPOLL, minpoll);
- peer->maxpoll = (u_char)min(NTP_MAXPOLL, maxpoll);
- peer->flags = flags;
if (key != 0)
peer->flags |= FLAG_AUTHENABLE;
if (key > NTP_MAXKEY)
#### ChangeSet ####
2006-07-10 18:08:35+00:00, kardel at pogo.udel.edu
ntp_io.c:
fix prototype argument type to match implementation
==== ntpd/ntp_io.c ====
2006-07-10 18:07:50+00:00, kardel at pogo.udel.edu +1 -1
fix prototype argument type to match implementation
--- 1.228/ntpd/ntp_io.c 2006-07-19 20:30:29 -04:00
+++ 1.229/ntpd/ntp_io.c 2006-07-19 20:30:29 -04:00
@@ -160,7 +160,7 @@ static void update_interfaces P((u_shor
static void remove_interface P((struct interface *));
static struct interface *create_interface P((u_short, struct interface *));
-static int move_fd P((int));
+static int move_fd P((SOCKET));
/*
* Multicast functions
More information about the bk-ntp-dev-send
mailing list