ntp: split local_ip_addr from NTP_Remote_Address struct
This commit is contained in:
parent
6823109cfb
commit
308de81221
9 changed files with 50 additions and 40 deletions
|
@ -46,9 +46,12 @@ typedef struct {
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
IPAddr ip_addr;
|
IPAddr ip_addr;
|
||||||
IPAddr local_ip_addr;
|
|
||||||
unsigned short port;
|
unsigned short port;
|
||||||
} NTP_Remote_Address;
|
} NTP_Remote_Address;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
IPAddr ip_addr;
|
||||||
|
} NTP_Local_Address;
|
||||||
|
|
||||||
#endif /* GOT_ADDRESSING_H */
|
#endif /* GOT_ADDRESSING_H */
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
NTP_Remote_Address addr;
|
NTP_Remote_Address addr;
|
||||||
|
NTP_Local_Address local_addr;
|
||||||
int interval;
|
int interval;
|
||||||
} Destination;
|
} Destination;
|
||||||
static Destination *destinations = 0;
|
static Destination *destinations = 0;
|
||||||
|
@ -114,7 +115,7 @@ timeout_handler(void *arbitrary)
|
||||||
ts_fuzz = UTI_GetNTPTsFuzz(message.precision);
|
ts_fuzz = UTI_GetNTPTsFuzz(message.precision);
|
||||||
LCL_ReadCookedTime(&local_transmit, NULL);
|
LCL_ReadCookedTime(&local_transmit, NULL);
|
||||||
UTI_TimevalToInt64(&local_transmit, &message.transmit_ts, ts_fuzz);
|
UTI_TimevalToInt64(&local_transmit, &message.transmit_ts, ts_fuzz);
|
||||||
NIO_SendNormalPacket(&message, &d->addr);
|
NIO_SendNormalPacket(&message, &d->addr, &d->local_addr);
|
||||||
|
|
||||||
/* Requeue timeout. Don't care if interval drifts gradually, so just do it
|
/* Requeue timeout. Don't care if interval drifts gradually, so just do it
|
||||||
* at the end. */
|
* at the end. */
|
||||||
|
@ -141,8 +142,8 @@ BRD_AddDestination(IPAddr *addr, unsigned short port, int interval)
|
||||||
}
|
}
|
||||||
|
|
||||||
destinations[n_destinations].addr.ip_addr = *addr;
|
destinations[n_destinations].addr.ip_addr = *addr;
|
||||||
destinations[n_destinations].addr.local_ip_addr.family = IPADDR_UNSPEC;
|
|
||||||
destinations[n_destinations].addr.port = port;
|
destinations[n_destinations].addr.port = port;
|
||||||
|
destinations[n_destinations].local_addr.ip_addr.family = IPADDR_UNSPEC;
|
||||||
destinations[n_destinations].interval = interval;
|
destinations[n_destinations].interval = interval;
|
||||||
|
|
||||||
SCH_AddTimeoutInClass((double) interval, 1.0, 0.0,
|
SCH_AddTimeoutInClass((double) interval, 1.0, 0.0,
|
||||||
|
|
2
cmdmon.c
2
cmdmon.c
|
@ -1276,7 +1276,6 @@ handle_add_source(NTP_Source_Type type, CMD_Request *rx_message, CMD_Reply *tx_m
|
||||||
NSR_Status status;
|
NSR_Status status;
|
||||||
|
|
||||||
UTI_IPNetworkToHost(&rx_message->data.ntp_source.ip_addr, &rem_addr.ip_addr);
|
UTI_IPNetworkToHost(&rx_message->data.ntp_source.ip_addr, &rem_addr.ip_addr);
|
||||||
rem_addr.local_ip_addr.family = IPADDR_UNSPEC;
|
|
||||||
rem_addr.port = (unsigned short)(ntohl(rx_message->data.ntp_source.port));
|
rem_addr.port = (unsigned short)(ntohl(rx_message->data.ntp_source.port));
|
||||||
params.minpoll = ntohl(rx_message->data.ntp_source.minpoll);
|
params.minpoll = ntohl(rx_message->data.ntp_source.minpoll);
|
||||||
params.maxpoll = ntohl(rx_message->data.ntp_source.maxpoll);
|
params.maxpoll = ntohl(rx_message->data.ntp_source.maxpoll);
|
||||||
|
@ -1324,7 +1323,6 @@ handle_del_source(CMD_Request *rx_message, CMD_Reply *tx_message)
|
||||||
NSR_Status status;
|
NSR_Status status;
|
||||||
|
|
||||||
UTI_IPNetworkToHost(&rx_message->data.del_source.ip_addr, &rem_addr.ip_addr);
|
UTI_IPNetworkToHost(&rx_message->data.del_source.ip_addr, &rem_addr.ip_addr);
|
||||||
rem_addr.local_ip_addr.family = IPADDR_UNSPEC;
|
|
||||||
rem_addr.port = 0;
|
rem_addr.port = 0;
|
||||||
|
|
||||||
status = NSR_RemoveSource(&rem_addr);
|
status = NSR_RemoveSource(&rem_addr);
|
||||||
|
|
22
ntp_core.c
22
ntp_core.c
|
@ -64,6 +64,7 @@ typedef enum {
|
||||||
|
|
||||||
struct NCR_Instance_Record {
|
struct NCR_Instance_Record {
|
||||||
NTP_Remote_Address remote_addr; /* Needed for routing transmit packets */
|
NTP_Remote_Address remote_addr; /* Needed for routing transmit packets */
|
||||||
|
NTP_Local_Address local_addr; /* Local address used when sending packets */
|
||||||
NTP_Mode mode; /* The source's NTP mode
|
NTP_Mode mode; /* The source's NTP mode
|
||||||
(client/server or symmetric active peer) */
|
(client/server or symmetric active peer) */
|
||||||
OperatingMode opmode; /* Whether we are sampling this source
|
OperatingMode opmode; /* Whether we are sampling this source
|
||||||
|
@ -282,6 +283,8 @@ NCR_GetInstance(NTP_Remote_Address *remote_addr, NTP_Source_Type type, SourcePar
|
||||||
result = MallocNew(struct NCR_Instance_Record);
|
result = MallocNew(struct NCR_Instance_Record);
|
||||||
|
|
||||||
result->remote_addr = *remote_addr;
|
result->remote_addr = *remote_addr;
|
||||||
|
result->local_addr.ip_addr.family = IPADDR_UNSPEC;
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case NTP_SERVER:
|
case NTP_SERVER:
|
||||||
result->mode = MODE_CLIENT;
|
result->mode = MODE_CLIENT;
|
||||||
|
@ -562,7 +565,8 @@ transmit_packet(NTP_Mode my_mode, /* The mode this machine wants to be */
|
||||||
(including adjustment to
|
(including adjustment to
|
||||||
reference), ignored if
|
reference), ignored if
|
||||||
NULL */
|
NULL */
|
||||||
NTP_Remote_Address *where_to /* Where to address the reponse to */
|
NTP_Remote_Address *where_to, /* Where to address the reponse to */
|
||||||
|
NTP_Local_Address *from /* From what address to send it */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
NTP_Packet message;
|
NTP_Packet message;
|
||||||
|
@ -650,7 +654,7 @@ transmit_packet(NTP_Mode my_mode, /* The mode this machine wants to be */
|
||||||
(unsigned char *)&message.auth_data, sizeof (message.auth_data));
|
(unsigned char *)&message.auth_data, sizeof (message.auth_data));
|
||||||
if (auth_len > 0) {
|
if (auth_len > 0) {
|
||||||
message.auth_keyid = htonl(key_id);
|
message.auth_keyid = htonl(key_id);
|
||||||
NIO_SendAuthenticatedPacket(&message, where_to,
|
NIO_SendAuthenticatedPacket(&message, where_to, from,
|
||||||
sizeof (message.auth_keyid) + auth_len);
|
sizeof (message.auth_keyid) + auth_len);
|
||||||
} else {
|
} else {
|
||||||
DEBUG_LOG(LOGF_NtpCore,
|
DEBUG_LOG(LOGF_NtpCore,
|
||||||
|
@ -660,7 +664,7 @@ transmit_packet(NTP_Mode my_mode, /* The mode this machine wants to be */
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
UTI_TimevalToInt64(&local_transmit, &message.transmit_ts, ts_fuzz);
|
UTI_TimevalToInt64(&local_transmit, &message.transmit_ts, ts_fuzz);
|
||||||
NIO_SendNormalPacket(&message, where_to);
|
NIO_SendNormalPacket(&message, where_to, from);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (local_tx) {
|
if (local_tx) {
|
||||||
|
@ -714,7 +718,7 @@ transmit_timeout(void *arg)
|
||||||
!inst->presend_done) {
|
!inst->presend_done) {
|
||||||
|
|
||||||
/* Send */
|
/* Send */
|
||||||
NIO_SendEcho(&inst->remote_addr);
|
NIO_SendEcho(&inst->remote_addr, &inst->local_addr);
|
||||||
|
|
||||||
inst->presend_done = 1;
|
inst->presend_done = 1;
|
||||||
|
|
||||||
|
@ -753,7 +757,8 @@ transmit_timeout(void *arg)
|
||||||
inst->do_auth, inst->auth_key_id,
|
inst->do_auth, inst->auth_key_id,
|
||||||
&inst->remote_orig,
|
&inst->remote_orig,
|
||||||
&inst->local_rx, &inst->local_tx, &inst->local_ntp_tx,
|
&inst->local_rx, &inst->local_tx, &inst->local_ntp_tx,
|
||||||
&inst->remote_addr);
|
&inst->remote_addr,
|
||||||
|
&inst->local_addr);
|
||||||
|
|
||||||
switch (inst->opmode) {
|
switch (inst->opmode) {
|
||||||
case MD_BURST_WAS_ONLINE:
|
case MD_BURST_WAS_ONLINE:
|
||||||
|
@ -1315,7 +1320,8 @@ NCR_ProcessKnown
|
||||||
one of the secondaries to flywheel it. The behaviour coded here
|
one of the secondaries to flywheel it. The behaviour coded here
|
||||||
is required in the secondaries to make this possible. */
|
is required in the secondaries to make this possible. */
|
||||||
|
|
||||||
NCR_ProcessUnknown(message, now, now_err, &inst->remote_addr, length);
|
NCR_ProcessUnknown(message, now, now_err,
|
||||||
|
&inst->remote_addr, &inst->local_addr, length);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1428,6 +1434,7 @@ NCR_ProcessUnknown
|
||||||
struct timeval *now, /* timestamp at time of receipt */
|
struct timeval *now, /* timestamp at time of receipt */
|
||||||
double now_err, /* assumed error in the timestamp */
|
double now_err, /* assumed error in the timestamp */
|
||||||
NTP_Remote_Address *remote_addr,
|
NTP_Remote_Address *remote_addr,
|
||||||
|
NTP_Local_Address *local_addr,
|
||||||
int length /* the length of the received packet */
|
int length /* the length of the received packet */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -1488,7 +1495,8 @@ NCR_ProcessUnknown
|
||||||
now, /* Time we received the packet */
|
now, /* Time we received the packet */
|
||||||
NULL, /* Don't care when we send reply, we aren't maintaining state about this client */
|
NULL, /* Don't care when we send reply, we aren't maintaining state about this client */
|
||||||
NULL, /* Ditto */
|
NULL, /* Ditto */
|
||||||
remote_addr);
|
remote_addr,
|
||||||
|
local_addr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (!LOG_RateLimited()) {
|
} else if (!LOG_RateLimited()) {
|
||||||
|
|
|
@ -58,7 +58,7 @@ extern void NCR_ProcessKnown(NTP_Packet *message, struct timeval *now, double no
|
||||||
|
|
||||||
/* This routine is called when a new packet arrives off the network,
|
/* This routine is called when a new packet arrives off the network,
|
||||||
and we do not recognize its source */
|
and we do not recognize its source */
|
||||||
extern void NCR_ProcessUnknown(NTP_Packet *message, struct timeval *now, double now_err, NTP_Remote_Address *remote_addr, int length);
|
extern void NCR_ProcessUnknown(NTP_Packet *message, struct timeval *now, double now_err, NTP_Remote_Address *remote_addr, NTP_Local_Address *local_addr, int length);
|
||||||
|
|
||||||
/* Slew receive and transmit times in instance records */
|
/* Slew receive and transmit times in instance records */
|
||||||
extern void NCR_SlewTimes(NCR_Instance inst, struct timeval *when, double dfreq, double doffset);
|
extern void NCR_SlewTimes(NCR_Instance inst, struct timeval *when, double dfreq, double doffset);
|
||||||
|
|
40
ntp_io.c
40
ntp_io.c
|
@ -301,6 +301,7 @@ read_from_socket(void *anything)
|
||||||
struct timeval now, now_raw;
|
struct timeval now, now_raw;
|
||||||
double now_err;
|
double now_err;
|
||||||
NTP_Remote_Address remote_addr;
|
NTP_Remote_Address remote_addr;
|
||||||
|
NTP_Local_Address local_addr;
|
||||||
char cmsgbuf[256];
|
char cmsgbuf[256];
|
||||||
struct msghdr msg;
|
struct msghdr msg;
|
||||||
struct iovec iov;
|
struct iovec iov;
|
||||||
|
@ -331,8 +332,6 @@ read_from_socket(void *anything)
|
||||||
reponse on a subsequent recvfrom). */
|
reponse on a subsequent recvfrom). */
|
||||||
|
|
||||||
if (status > 0) {
|
if (status > 0) {
|
||||||
memset(&remote_addr, 0, sizeof (remote_addr));
|
|
||||||
|
|
||||||
switch (where_from.u.sa_family) {
|
switch (where_from.u.sa_family) {
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
remote_addr.ip_addr.family = IPADDR_INET4;
|
remote_addr.ip_addr.family = IPADDR_INET4;
|
||||||
|
@ -351,14 +350,16 @@ read_from_socket(void *anything)
|
||||||
assert(0);
|
assert(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
local_addr.ip_addr.family = IPADDR_UNSPEC;
|
||||||
|
|
||||||
for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
|
for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
|
||||||
#ifdef IP_PKTINFO
|
#ifdef IP_PKTINFO
|
||||||
if (cmsg->cmsg_level == IPPROTO_IP && cmsg->cmsg_type == IP_PKTINFO) {
|
if (cmsg->cmsg_level == IPPROTO_IP && cmsg->cmsg_type == IP_PKTINFO) {
|
||||||
struct in_pktinfo ipi;
|
struct in_pktinfo ipi;
|
||||||
|
|
||||||
memcpy(&ipi, CMSG_DATA(cmsg), sizeof(ipi));
|
memcpy(&ipi, CMSG_DATA(cmsg), sizeof(ipi));
|
||||||
remote_addr.local_ip_addr.addr.in4 = ntohl(ipi.ipi_spec_dst.s_addr);
|
local_addr.ip_addr.addr.in4 = ntohl(ipi.ipi_spec_dst.s_addr);
|
||||||
remote_addr.local_ip_addr.family = IPADDR_INET4;
|
local_addr.ip_addr.family = IPADDR_INET4;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -367,9 +368,9 @@ read_from_socket(void *anything)
|
||||||
struct in6_pktinfo ipi;
|
struct in6_pktinfo ipi;
|
||||||
|
|
||||||
memcpy(&ipi, CMSG_DATA(cmsg), sizeof(ipi));
|
memcpy(&ipi, CMSG_DATA(cmsg), sizeof(ipi));
|
||||||
memcpy(&remote_addr.local_ip_addr.addr.in6, &ipi.ipi6_addr.s6_addr,
|
memcpy(&local_addr.ip_addr.addr.in6, &ipi.ipi6_addr.s6_addr,
|
||||||
sizeof (remote_addr.local_ip_addr.addr.in6));
|
sizeof (local_addr.ip_addr.addr.in6));
|
||||||
remote_addr.local_ip_addr.family = IPADDR_INET6;
|
local_addr.ip_addr.family = IPADDR_INET6;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -387,7 +388,8 @@ read_from_socket(void *anything)
|
||||||
|
|
||||||
if (status >= NTP_NORMAL_PACKET_SIZE && status <= sizeof(NTP_Packet)) {
|
if (status >= NTP_NORMAL_PACKET_SIZE && status <= sizeof(NTP_Packet)) {
|
||||||
|
|
||||||
NSR_ProcessReceive((NTP_Packet *) &message.ntp_pkt, &now, now_err, &remote_addr, status);
|
NSR_ProcessReceive((NTP_Packet *) &message.ntp_pkt, &now, now_err,
|
||||||
|
&remote_addr, &local_addr, status);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
@ -401,7 +403,7 @@ read_from_socket(void *anything)
|
||||||
/* Send a packet to given address */
|
/* Send a packet to given address */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
send_packet(void *packet, int packetlen, NTP_Remote_Address *remote_addr)
|
send_packet(void *packet, int packetlen, NTP_Remote_Address *remote_addr, NTP_Local_Address *local_addr)
|
||||||
{
|
{
|
||||||
union sockaddr_in46 remote;
|
union sockaddr_in46 remote;
|
||||||
struct msghdr msg;
|
struct msghdr msg;
|
||||||
|
@ -452,7 +454,7 @@ send_packet(void *packet, int packetlen, NTP_Remote_Address *remote_addr)
|
||||||
cmsglen = 0;
|
cmsglen = 0;
|
||||||
|
|
||||||
#ifdef IP_PKTINFO
|
#ifdef IP_PKTINFO
|
||||||
if (remote_addr->local_ip_addr.family == IPADDR_INET4) {
|
if (local_addr->ip_addr.family == IPADDR_INET4) {
|
||||||
struct cmsghdr *cmsg;
|
struct cmsghdr *cmsg;
|
||||||
struct in_pktinfo *ipi;
|
struct in_pktinfo *ipi;
|
||||||
|
|
||||||
|
@ -465,12 +467,12 @@ send_packet(void *packet, int packetlen, NTP_Remote_Address *remote_addr)
|
||||||
cmsg->cmsg_len = CMSG_LEN(sizeof(struct in_pktinfo));
|
cmsg->cmsg_len = CMSG_LEN(sizeof(struct in_pktinfo));
|
||||||
|
|
||||||
ipi = (struct in_pktinfo *) CMSG_DATA(cmsg);
|
ipi = (struct in_pktinfo *) CMSG_DATA(cmsg);
|
||||||
ipi->ipi_spec_dst.s_addr = htonl(remote_addr->local_ip_addr.addr.in4);
|
ipi->ipi_spec_dst.s_addr = htonl(local_addr->ip_addr.addr.in4);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(IPV6_PKTINFO) && defined(HAVE_IN6_PKTINFO)
|
#if defined(IPV6_PKTINFO) && defined(HAVE_IN6_PKTINFO)
|
||||||
if (remote_addr->local_ip_addr.family == IPADDR_INET6) {
|
if (local_addr->ip_addr.family == IPADDR_INET6) {
|
||||||
struct cmsghdr *cmsg;
|
struct cmsghdr *cmsg;
|
||||||
struct in6_pktinfo *ipi;
|
struct in6_pktinfo *ipi;
|
||||||
|
|
||||||
|
@ -483,7 +485,7 @@ send_packet(void *packet, int packetlen, NTP_Remote_Address *remote_addr)
|
||||||
cmsg->cmsg_len = CMSG_LEN(sizeof(struct in6_pktinfo));
|
cmsg->cmsg_len = CMSG_LEN(sizeof(struct in6_pktinfo));
|
||||||
|
|
||||||
ipi = (struct in6_pktinfo *) CMSG_DATA(cmsg);
|
ipi = (struct in6_pktinfo *) CMSG_DATA(cmsg);
|
||||||
memcpy(&ipi->ipi6_addr.s6_addr, &remote_addr->local_ip_addr.addr.in6,
|
memcpy(&ipi->ipi6_addr.s6_addr, &local_addr->ip_addr.addr.in6,
|
||||||
sizeof(ipi->ipi6_addr.s6_addr));
|
sizeof(ipi->ipi6_addr.s6_addr));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -515,18 +517,18 @@ send_packet(void *packet, int packetlen, NTP_Remote_Address *remote_addr)
|
||||||
/* Send an unauthenticated packet to a given address */
|
/* Send an unauthenticated packet to a given address */
|
||||||
|
|
||||||
void
|
void
|
||||||
NIO_SendNormalPacket(NTP_Packet *packet, NTP_Remote_Address *remote_addr)
|
NIO_SendNormalPacket(NTP_Packet *packet, NTP_Remote_Address *remote_addr, NTP_Local_Address *local_addr)
|
||||||
{
|
{
|
||||||
send_packet((void *) packet, NTP_NORMAL_PACKET_SIZE, remote_addr);
|
send_packet((void *) packet, NTP_NORMAL_PACKET_SIZE, remote_addr, local_addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ================================================== */
|
/* ================================================== */
|
||||||
/* Send an authenticated packet to a given address */
|
/* Send an authenticated packet to a given address */
|
||||||
|
|
||||||
void
|
void
|
||||||
NIO_SendAuthenticatedPacket(NTP_Packet *packet, NTP_Remote_Address *remote_addr, int auth_len)
|
NIO_SendAuthenticatedPacket(NTP_Packet *packet, NTP_Remote_Address *remote_addr, NTP_Local_Address *local_addr, int auth_len)
|
||||||
{
|
{
|
||||||
send_packet((void *) packet, NTP_NORMAL_PACKET_SIZE + auth_len, remote_addr);
|
send_packet((void *) packet, NTP_NORMAL_PACKET_SIZE + auth_len, remote_addr, local_addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ================================================== */
|
/* ================================================== */
|
||||||
|
@ -535,7 +537,7 @@ NIO_SendAuthenticatedPacket(NTP_Packet *packet, NTP_Remote_Address *remote_addr,
|
||||||
#define ECHO_PORT 7
|
#define ECHO_PORT 7
|
||||||
|
|
||||||
void
|
void
|
||||||
NIO_SendEcho(NTP_Remote_Address *remote_addr)
|
NIO_SendEcho(NTP_Remote_Address *remote_addr, NTP_Local_Address *local_addr)
|
||||||
{
|
{
|
||||||
unsigned long magic_message = 0xbe7ab1e7UL;
|
unsigned long magic_message = 0xbe7ab1e7UL;
|
||||||
NTP_Remote_Address addr;
|
NTP_Remote_Address addr;
|
||||||
|
@ -543,5 +545,5 @@ NIO_SendEcho(NTP_Remote_Address *remote_addr)
|
||||||
addr = *remote_addr;
|
addr = *remote_addr;
|
||||||
addr.port = ECHO_PORT;
|
addr.port = ECHO_PORT;
|
||||||
|
|
||||||
send_packet((void *) &magic_message, sizeof(unsigned long), &addr);
|
send_packet((void *) &magic_message, sizeof(unsigned long), &addr, local_addr);
|
||||||
}
|
}
|
||||||
|
|
6
ntp_io.h
6
ntp_io.h
|
@ -38,12 +38,12 @@ extern void NIO_Initialise(int family);
|
||||||
extern void NIO_Finalise(void);
|
extern void NIO_Finalise(void);
|
||||||
|
|
||||||
/* Function to transmit a packet */
|
/* Function to transmit a packet */
|
||||||
extern void NIO_SendNormalPacket(NTP_Packet *packet, NTP_Remote_Address *remote_addr);
|
extern void NIO_SendNormalPacket(NTP_Packet *packet, NTP_Remote_Address *remote_addr, NTP_Local_Address *local_addr);
|
||||||
|
|
||||||
/* Function to transmit an authenticated packet */
|
/* Function to transmit an authenticated packet */
|
||||||
extern void NIO_SendAuthenticatedPacket(NTP_Packet *packet, NTP_Remote_Address *remote_addr, int auth_len);
|
extern void NIO_SendAuthenticatedPacket(NTP_Packet *packet, NTP_Remote_Address *remote_addr, NTP_Local_Address *local_addr, int auth_len);
|
||||||
|
|
||||||
/* Function to send a datagram to a remote machine's UDP echo port. */
|
/* Function to send a datagram to a remote machine's UDP echo port. */
|
||||||
extern void NIO_SendEcho(NTP_Remote_Address *remote_addr);
|
extern void NIO_SendEcho(NTP_Remote_Address *remote_addr, NTP_Local_Address *local_addr);
|
||||||
|
|
||||||
#endif /* GOT_NTP_IO_H */
|
#endif /* GOT_NTP_IO_H */
|
||||||
|
|
|
@ -220,8 +220,6 @@ resolve_sources(void *arg)
|
||||||
struct UnresolvedSource *us, **i;
|
struct UnresolvedSource *us, **i;
|
||||||
DNS_Status s;
|
DNS_Status s;
|
||||||
|
|
||||||
memset(&address.local_ip_addr, 0, sizeof (address.local_ip_addr));
|
|
||||||
|
|
||||||
DNS_Reload();
|
DNS_Reload();
|
||||||
|
|
||||||
for (i = &unresolved_sources; *i; ) {
|
for (i = &unresolved_sources; *i; ) {
|
||||||
|
@ -344,7 +342,7 @@ NSR_RemoveSource(NTP_Remote_Address *remote_addr)
|
||||||
/* This routine is called by ntp_io when a new packet arrives off the network,
|
/* This routine is called by ntp_io when a new packet arrives off the network,
|
||||||
possibly with an authentication tail */
|
possibly with an authentication tail */
|
||||||
void
|
void
|
||||||
NSR_ProcessReceive(NTP_Packet *message, struct timeval *now, double now_err, NTP_Remote_Address *remote_addr, int length)
|
NSR_ProcessReceive(NTP_Packet *message, struct timeval *now, double now_err, NTP_Remote_Address *remote_addr, NTP_Local_Address *local_addr, int length)
|
||||||
{
|
{
|
||||||
int slot, found;
|
int slot, found;
|
||||||
|
|
||||||
|
@ -360,7 +358,7 @@ NSR_ProcessReceive(NTP_Packet *message, struct timeval *now, double now_err, NTP
|
||||||
if (found == 2) { /* Must match IP address AND port number */
|
if (found == 2) { /* Must match IP address AND port number */
|
||||||
NCR_ProcessKnown(message, now, now_err, records[slot].data, length);
|
NCR_ProcessKnown(message, now, now_err, records[slot].data, length);
|
||||||
} else {
|
} else {
|
||||||
NCR_ProcessUnknown(message, now, now_err, remote_addr, length);
|
NCR_ProcessUnknown(message, now, now_err, remote_addr, local_addr, length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,7 @@ extern void NSR_ResolveSources(void);
|
||||||
extern NSR_Status NSR_RemoveSource(NTP_Remote_Address *remote_addr);
|
extern NSR_Status NSR_RemoveSource(NTP_Remote_Address *remote_addr);
|
||||||
|
|
||||||
/* This routine is called by ntp_io when a new packet arrives off the network */
|
/* This routine is called by ntp_io when a new packet arrives off the network */
|
||||||
extern void NSR_ProcessReceive(NTP_Packet *message, struct timeval *now, double now_err, NTP_Remote_Address *remote_addr, int length);
|
extern void NSR_ProcessReceive(NTP_Packet *message, struct timeval *now, double now_err, NTP_Remote_Address *remote_addr, NTP_Local_Address *local_addr, int length);
|
||||||
|
|
||||||
/* Initialisation function */
|
/* Initialisation function */
|
||||||
extern void NSR_Initialise(void);
|
extern void NSR_Initialise(void);
|
||||||
|
|
Loading…
Reference in a new issue