params.iburst = ntohl(rx_message->data.ntp_source.flags) & REQ_ADDSRC_IBURST ? 1 : 0;
params.max_delay = UTI_FloatNetworkToHost(rx_message->data.ntp_source.max_delay);
params.max_delay_ratio = UTI_FloatNetworkToHost(rx_message->data.ntp_source.max_delay_ratio);
- status = NSR_AddServer(&rem_addr, ¶ms);
+ status = NSR_AddSource(&rem_addr, NTP_SERVER, ¶ms);
switch (status) {
case NSR_Success:
tx_message->status = htons(STT_SUCCESS);
params.iburst = ntohl(rx_message->data.ntp_source.flags) & REQ_ADDSRC_IBURST ? 1 : 0;
params.max_delay = UTI_FloatNetworkToHost(rx_message->data.ntp_source.max_delay);
params.max_delay_ratio = UTI_FloatNetworkToHost(rx_message->data.ntp_source.max_delay_ratio);
- status = NSR_AddPeer(&rem_addr, ¶ms);
+ status = NSR_AddSource(&rem_addr, NTP_PEER, ¶ms);
switch (status) {
case NSR_Success:
tx_message->status = htons(STT_SUCCESS);
/* ================================================== */
-typedef enum {
- SERVER, PEER
-} NTP_Source_Type;
-
typedef struct {
NTP_Source_Type type;
IPAddr ip_addr;
static void
parse_server(const char *line)
{
- parse_source(line, SERVER);
+ parse_source(line, NTP_SERVER);
}
/* ================================================== */
static void
parse_peer(const char *line)
{
- parse_source(line, PEER);
+ parse_source(line, NTP_PEER);
}
/* ================================================== */
memset(&server.local_ip_addr, 0, sizeof (server.local_ip_addr));
server.port = ntp_sources[i].port;
- switch (ntp_sources[i].type) {
- case SERVER:
- NSR_AddServer(&server, &ntp_sources[i].params);
- break;
-
- case PEER:
- NSR_AddPeer(&server, &ntp_sources[i].params);
- break;
- }
-
+ NSR_AddSource(&server, ntp_sources[i].type, &ntp_sources[i].params);
}
return;
/* ================================================== */
-static NCR_Instance
-create_instance(NTP_Remote_Address *remote_addr, NTP_Mode mode, SourceParameters *params)
+NCR_Instance
+NCR_GetInstance(NTP_Remote_Address *remote_addr, NTP_Source_Type type, SourceParameters *params)
{
NCR_Instance result;
result = MallocNew(struct NCR_Instance_Record);
result->remote_addr = *remote_addr;
- result->mode = mode;
+ switch (type) {
+ case NTP_SERVER:
+ result->mode = MODE_CLIENT;
+ break;
+ case NTP_PEER:
+ result->mode = MODE_ACTIVE;
+ break;
+ default:
+ assert(0);
+ }
result->minpoll = params->minpoll;
result->maxpoll = params->maxpoll;
/* ================================================== */
-/* Get a new instance for a server */
-NCR_Instance
-NCR_GetServerInstance(NTP_Remote_Address *remote_addr, SourceParameters *params)
-{
- return create_instance(remote_addr, MODE_CLIENT, params);
-}
-
-/* ================================================== */
-
-/* Get a new instance for a peer */
-NCR_Instance
-NCR_GetPeerInstance(NTP_Remote_Address *remote_addr, SourceParameters *params)
-{
- return create_instance(remote_addr, MODE_ACTIVE, params);
-}
-
-/* ================================================== */
-
/* Destroy an instance */
void
NCR_DestroyInstance(NCR_Instance instance)
#include "ntp.h"
#include "reports.h"
+typedef enum {
+ NTP_SERVER, NTP_PEER
+} NTP_Source_Type;
+
/* This is a private data type used for storing the instance record for
each source that we are chiming with */
typedef struct NCR_Instance_Record *NCR_Instance;
extern void NCR_Initialise(void);
extern void NCR_Finalise(void);
-/* Get a new instance for a server */
-extern NCR_Instance NCR_GetServerInstance(NTP_Remote_Address *remote_addr, SourceParameters *params);
-
-/* Get a new instance for a peer */
-extern NCR_Instance NCR_GetPeerInstance(NTP_Remote_Address *remote_addr, SourceParameters *params);
+/* Get a new instance for a server or peer */
+extern NCR_Instance NCR_GetInstance(NTP_Remote_Address *remote_addr, NTP_Source_Type type, SourceParameters *params);
/* Destroy an instance */
extern void NCR_DestroyInstance(NCR_Instance instance);
/* ================================================== */
-/* Procedure to add a new server source (to which this machine will be
- a client) */
+/* Procedure to add a new source */
NSR_Status
-NSR_AddServer(NTP_Remote_Address *remote_addr, SourceParameters *params)
+NSR_AddSource(NTP_Remote_Address *remote_addr, NTP_Source_Type type, SourceParameters *params)
{
int slot, found;
return NSR_InvalidAF;
} else {
n_sources++;
- records[slot].data = NCR_GetServerInstance(remote_addr, params); /* Will need params passing through */
- records[slot].remote_addr = NCR_GetRemoteAddress(records[slot].data);
- return NSR_Success;
- }
- }
-}
-
-/* ================================================== */
-
-/* Procedure to add a new peer. */
-NSR_Status
-NSR_AddPeer(NTP_Remote_Address *remote_addr, SourceParameters *params)
-{
- int slot, found;
-
- assert(initialised);
-
-#if 0
- LOG(LOGS_INFO, LOGF_NtpSources, "IP=%s port=%d", UTI_IPToString(&remote_addr->ip_addr), remote_addr->port);
-#endif
-
- /* Find empty bin & check that we don't have the address already */
- find_slot(remote_addr, &slot, &found);
- if (found) {
- return NSR_AlreadyInUse;
- } else {
- if (n_sources == MAX_SOURCES) {
- return NSR_TooManySources;
- } else if (remote_addr->ip_addr.family != IPADDR_INET4 &&
- remote_addr->ip_addr.family != IPADDR_INET6) {
- return NSR_InvalidAF;
- } else {
- n_sources++;
- records[slot].data = NCR_GetPeerInstance(remote_addr, params); /* Will need params passing through */
+ records[slot].data = NCR_GetInstance(remote_addr, type, params); /* Will need params passing through */
records[slot].remote_addr = NCR_GetRemoteAddress(records[slot].data);
return NSR_Success;
}
typedef enum {
NSR_Success, /* Operation successful */
NSR_NoSuchSource, /* Remove - attempt to remove a source that is not known */
- NSR_AlreadyInUse, /* AddServer, AddPeer - attempt to add a source that is already known */
- NSR_TooManySources, /* AddServer, AddPeer - too many sources already present */
- NSR_InvalidAF /* AddServer, AddPeer - attempt to add a source with invalid address family */
+ NSR_AlreadyInUse, /* AddSource - attempt to add a source that is already known */
+ NSR_TooManySources, /* AddSource - too many sources already present */
+ NSR_InvalidAF /* AddSource - attempt to add a source with invalid address family */
} NSR_Status;
-/* Procedure to add a new server source (to which this machine will be
- a client) */
-extern NSR_Status NSR_AddServer(NTP_Remote_Address *remote_addr, SourceParameters *params);
-
-/* Procedure to add a new peer source. We will use symmetric active
- mode packets when communicating with this source */
-extern NSR_Status NSR_AddPeer(NTP_Remote_Address *remote_addr, SourceParameters *params);
+/* Procedure to add a new server or peer source. */
+extern NSR_Status NSR_AddSource(NTP_Remote_Address *remote_addr, NTP_Source_Type type, SourceParameters *params);
/* Procedure to remove a source */
extern NSR_Status NSR_RemoveSource(NTP_Remote_Address *remote_addr);