mirror of
https://gitlab.com/chrony/chrony.git
synced 2025-12-03 18:25:07 -05:00
Drop support for SUBNETS_ACCESSED and CLIENT_ACCESSES commands
Support for the SUBNETS_ACCESSED and CLIENT_ACCESSES commands was enabled in chronyd, but in chronyc it was always disabled and the CLIENT_ACCESSES_BY_INDEX command was used instead. As there is no plan to enable it in the future, remove the support completely.
This commit is contained in:
201
client.c
201
client.c
@@ -1991,207 +1991,6 @@ process_cmd_rtcreport(char *line)
|
||||
|
||||
/* ================================================== */
|
||||
|
||||
#if 0
|
||||
|
||||
/* This is a previous attempt at implementing the clients command. It
|
||||
could be re-instated sometime as a way of looking at all clients in a
|
||||
particular subnet. The problem with it is that is requires at least 5
|
||||
round trips to the server even if the server only has one client to
|
||||
report. */
|
||||
|
||||
typedef struct XSubnetToDo {
|
||||
struct XSubnetToDo *next;
|
||||
unsigned long ip;
|
||||
unsigned long bits;
|
||||
} SubnetToDo;
|
||||
|
||||
static void
|
||||
process_cmd_clients(char *line)
|
||||
{
|
||||
CMD_Request request;
|
||||
CMD_Reply reply;
|
||||
SubnetToDo *head, *todo, *tail, *p, *next_node, *new_node;
|
||||
int i, j, nets_looked_up, clients_looked_up;
|
||||
int word;
|
||||
unsigned long mask;
|
||||
unsigned long ip, bits;
|
||||
unsigned long client_hits;
|
||||
unsigned long peer_hits;
|
||||
unsigned long cmd_hits_auth;
|
||||
unsigned long cmd_hits_normal;
|
||||
unsigned long cmd_hits_bad;
|
||||
unsigned long last_ntp_hit_ago;
|
||||
unsigned long last_cmd_hit_ago;
|
||||
char hostname_buf[50];
|
||||
|
||||
int n_replies;
|
||||
|
||||
head = todo = MallocNew(SubnetToDo);
|
||||
todo->next = NULL;
|
||||
/* Set up initial query = root subnet */
|
||||
todo->ip = 0;
|
||||
todo->bits = 0;
|
||||
tail = todo;
|
||||
|
||||
do {
|
||||
|
||||
request.command = htons(REQ_SUBNETS_ACCESSED);
|
||||
/* Build list of subnets to examine */
|
||||
i=0;
|
||||
p=todo;
|
||||
while((i < MAX_SUBNETS_ACCESSED) &&
|
||||
p &&
|
||||
(p->bits < 32)) {
|
||||
|
||||
request.data.subnets_accessed.subnets[i].ip = htonl(p->ip);
|
||||
request.data.subnets_accessed.subnets[i].bits_specd = htonl(p->bits);
|
||||
p = p->next;
|
||||
i++;
|
||||
}
|
||||
|
||||
nets_looked_up = i;
|
||||
|
||||
if (nets_looked_up == 0) {
|
||||
/* No subnets need examining */
|
||||
break;
|
||||
}
|
||||
|
||||
request.data.subnets_accessed.n_subnets = htonl(nets_looked_up);
|
||||
|
||||
if (request_reply(&request, &reply, RPY_SUBNETS_ACCESSED, 0)) {
|
||||
n_replies = ntohl(reply.data.subnets_accessed.n_subnets);
|
||||
for (j=0; j<n_replies; j++) {
|
||||
ip = ntohl(reply.data.subnets_accessed.subnets[j].ip);
|
||||
bits = ntohl(reply.data.subnets_accessed.subnets[j].bits_specd);
|
||||
for (i=0; i<256; i++) {
|
||||
word = i/32;
|
||||
mask = 1UL << (i%32);
|
||||
if (ntohl(reply.data.subnets_accessed.subnets[j].bitmap[word]) & mask) {
|
||||
/* Add this subnet to the todo list */
|
||||
new_node = MallocNew(SubnetToDo);
|
||||
new_node->next = NULL;
|
||||
new_node->bits = bits + 8;
|
||||
new_node->ip = ip | (i << (24 - bits));
|
||||
tail->next = new_node;
|
||||
tail = new_node;
|
||||
#if 0
|
||||
printf("%08lx %2d %3d %08lx\n", ip, bits, i, new_node->ip);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Skip the todo pointer forwards by the number of nets looked
|
||||
up. Can't do this earlier, because we might have to point
|
||||
at the next layer of subnets that have only just been
|
||||
concatenated to the linked list. */
|
||||
for (i=0; i<nets_looked_up; i++) {
|
||||
todo = todo->next;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
} while (1); /* keep going until all subnets have been expanded,
|
||||
down to single nodes */
|
||||
|
||||
/* Now the todo list consists of client records */
|
||||
request.command = htons(REQ_CLIENT_ACCESSES);
|
||||
|
||||
#if 0
|
||||
printf("%d %d\n", sizeof (RPY_ClientAccesses_Client), offsetof(CMD_Reply, data.client_accesses.clients));
|
||||
#endif
|
||||
|
||||
printf("Hostname Client Peer CmdAuth CmdNorm CmdBad LstN LstC\n"
|
||||
"========================= ====== ====== ====== ====== ====== ==== ====\n");
|
||||
|
||||
do {
|
||||
|
||||
i = 0;
|
||||
p = todo;
|
||||
while ((i < MAX_CLIENT_ACCESSES) &&
|
||||
p) {
|
||||
|
||||
request.data.client_accesses.client_ips[i] = htonl(p->ip);
|
||||
p = p->next;
|
||||
i++;
|
||||
}
|
||||
|
||||
clients_looked_up = i;
|
||||
|
||||
if (clients_looked_up == 0) {
|
||||
/* No more clients to do */
|
||||
break;
|
||||
}
|
||||
|
||||
request.data.client_accesses.n_clients = htonl(clients_looked_up);
|
||||
|
||||
if (request_reply(&request, &reply, RPY_CLIENT_ACCESSES, 0)) {
|
||||
n_replies = ntohl(reply.data.client_accesses.n_clients);
|
||||
for (j=0; j<n_replies; j++) {
|
||||
ip = ntohl(reply.data.client_accesses.clients[j].ip);
|
||||
if (ip != 0UL) {
|
||||
/* ip == 0 implies that the node could not be found in
|
||||
the daemon's tables; we shouldn't ever generate this
|
||||
case, but ignore it if we do. (In future there might
|
||||
be a protocol to reset the client logging; if another
|
||||
administrator runs that while we're doing the clients
|
||||
command, there will be a race condition that could
|
||||
cause this). */
|
||||
|
||||
client_hits = ntohl(reply.data.client_accesses.clients[j].client_hits);
|
||||
peer_hits = ntohl(reply.data.client_accesses.clients[j].peer_hits);
|
||||
cmd_hits_auth = ntohl(reply.data.client_accesses.clients[j].cmd_hits_auth);
|
||||
cmd_hits_normal = ntohl(reply.data.client_accesses.clients[j].cmd_hits_normal);
|
||||
cmd_hits_bad = ntohl(reply.data.client_accesses.clients[j].cmd_hits_bad);
|
||||
last_ntp_hit_ago = ntohl(reply.data.client_accesses.clients[j].last_ntp_hit_ago);
|
||||
last_cmd_hit_ago = ntohl(reply.data.client_accesses.clients[j].last_cmd_hit_ago);
|
||||
|
||||
if (no_dns) {
|
||||
snprintf(hostname_buf, sizeof(hostname_buf),
|
||||
"%s", UTI_IPToDottedQuad(ip));
|
||||
} else {
|
||||
DNS_IPAddress2Name(ip, hostname_buf, sizeof(hostname_buf));
|
||||
hostname_buf[25] = 0;
|
||||
}
|
||||
printf("%-25s %6d %6d %6d %6d %6d ",
|
||||
hostname_buf,
|
||||
client_hits, peer_hits,
|
||||
cmd_hits_auth, cmd_hits_normal, cmd_hits_bad);
|
||||
print_seconds(last_ntp_hit_ago);
|
||||
printf(" ");
|
||||
print_seconds(last_cmd_hit_ago);
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
|
||||
/* Skip the todo pointer forwards by the number of nets looked
|
||||
up. Can't do this earlier, because we might have to point
|
||||
at the next layer of subnets that have only just been
|
||||
concatenated to the linked list. */
|
||||
for (i=0; i<clients_looked_up; i++) {
|
||||
todo = todo->next;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} while (1);
|
||||
|
||||
cleanup:
|
||||
for (p = head; p; ) {
|
||||
next_node = p->next;
|
||||
Free(p);
|
||||
p = next_node;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* New implementation of clients command */
|
||||
|
||||
static int
|
||||
process_cmd_clients(char *line)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user