Mark offline sources unreachable
This commit is contained in:
parent
5fb5551c36
commit
2ea87490f4
3 changed files with 22 additions and 2 deletions
|
@ -1709,6 +1709,8 @@ NCR_TakeSourceOffline(NCR_Instance inst)
|
|||
SCH_RemoveTimeout(inst->timeout_id);
|
||||
inst->timer_running = 0;
|
||||
inst->opmode = MD_OFFLINE;
|
||||
/* Mark source unreachable */
|
||||
SRC_UnsetReachable(inst->source);
|
||||
}
|
||||
break;
|
||||
case MD_OFFLINE:
|
||||
|
@ -1923,3 +1925,10 @@ NCR_GetRemoteAddress(NCR_Instance inst)
|
|||
}
|
||||
|
||||
/* ================================================== */
|
||||
|
||||
int NCR_IsSyncPeer(NCR_Instance inst)
|
||||
{
|
||||
return SRC_IsSyncPeer(inst->source);
|
||||
}
|
||||
|
||||
/* ================================================== */
|
||||
|
|
|
@ -104,4 +104,6 @@ extern void NCR_IncrementActivityCounters(NCR_Instance inst, int *online, int *o
|
|||
|
||||
extern NTP_Remote_Address *NCR_GetRemoteAddress(NCR_Instance instance);
|
||||
|
||||
extern int NCR_IsSyncPeer(NCR_Instance instance);
|
||||
|
||||
#endif /* GOT_NTP_CORE_H */
|
||||
|
|
|
@ -355,20 +355,29 @@ NSR_TakeSourcesOnline(IPAddr *mask, IPAddr *address)
|
|||
int
|
||||
NSR_TakeSourcesOffline(IPAddr *mask, IPAddr *address)
|
||||
{
|
||||
int i;
|
||||
int any;
|
||||
int i, any, syncpeer;
|
||||
|
||||
any = 0;
|
||||
syncpeer = -1;
|
||||
for (i=0; i<N_RECORDS; i++) {
|
||||
if (records[i].remote_addr) {
|
||||
if (address->family == IPADDR_UNSPEC ||
|
||||
!UTI_CompareIPs(&records[i].remote_addr->ip_addr, address, mask)) {
|
||||
any = 1;
|
||||
if (NCR_IsSyncPeer(records[i].data)) {
|
||||
syncpeer = i;
|
||||
continue;
|
||||
}
|
||||
NCR_TakeSourceOffline(records[i].data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Take sync peer offline as last to avoid reference switching */
|
||||
if (syncpeer >= 0) {
|
||||
NCR_TakeSourceOffline(records[syncpeer].data);
|
||||
}
|
||||
|
||||
return any;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue