cmdmon: make length of manual list constant
Make the length of responses containing manual samples constant to
simplify the protocol. It was the only type of response that had a
variable length.
This reverts commit 2343e7a89c
.
This commit is contained in:
parent
c6dd749687
commit
eda4b111d3
5 changed files with 22 additions and 33 deletions
3
candm.h
3
candm.h
|
@ -470,7 +470,8 @@ typedef struct {
|
||||||
#define RPY_CLIENT_ACCESSES_BY_INDEX2 15
|
#define RPY_CLIENT_ACCESSES_BY_INDEX2 15
|
||||||
#define RPY_NTP_DATA 16
|
#define RPY_NTP_DATA 16
|
||||||
#define RPY_MANUAL_TIMESTAMP2 17
|
#define RPY_MANUAL_TIMESTAMP2 17
|
||||||
#define N_REPLY_TYPES 18
|
#define RPY_MANUAL_LIST2 18
|
||||||
|
#define N_REPLY_TYPES 19
|
||||||
|
|
||||||
/* Status codes */
|
/* Status codes */
|
||||||
#define STT_SUCCESS 0
|
#define STT_SUCCESS 0
|
||||||
|
|
13
client.c
13
client.c
|
@ -1429,9 +1429,14 @@ submit_request(CMD_Request *request, CMD_Reply *reply)
|
||||||
DEBUG_LOG("Received %d bytes", recv_status);
|
DEBUG_LOG("Received %d bytes", recv_status);
|
||||||
|
|
||||||
read_length = recv_status;
|
read_length = recv_status;
|
||||||
expected_length = PKL_ReplyLength(reply, read_length);
|
if (read_length >= offsetof(CMD_Reply, data)) {
|
||||||
|
expected_length = PKL_ReplyLength(reply);
|
||||||
|
} else {
|
||||||
|
expected_length = 0;
|
||||||
|
}
|
||||||
|
|
||||||
bad_length = !expected_length || read_length < expected_length;
|
bad_length = (read_length < expected_length ||
|
||||||
|
expected_length < offsetof(CMD_Reply, data));
|
||||||
|
|
||||||
if (!bad_length) {
|
if (!bad_length) {
|
||||||
bad_sequence = reply->sequence != request->sequence;
|
bad_sequence = reply->sequence != request->sequence;
|
||||||
|
@ -2539,7 +2544,7 @@ process_cmd_manual_list(const char *line)
|
||||||
struct timespec when;
|
struct timespec when;
|
||||||
|
|
||||||
request.command = htons(REQ_MANUAL_LIST);
|
request.command = htons(REQ_MANUAL_LIST);
|
||||||
if (!request_reply(&request, &reply, RPY_MANUAL_LIST, 0))
|
if (!request_reply(&request, &reply, RPY_MANUAL_LIST2, 0))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
n_samples = ntohl(reply.data.manual_list.n_samples);
|
n_samples = ntohl(reply.data.manual_list.n_samples);
|
||||||
|
@ -2547,7 +2552,7 @@ process_cmd_manual_list(const char *line)
|
||||||
|
|
||||||
print_header("# Date Time(UTC) Slewed Original Residual");
|
print_header("# Date Time(UTC) Slewed Original Residual");
|
||||||
|
|
||||||
for (i = 0; i < n_samples; i++) {
|
for (i = 0; i < n_samples && i < MAX_MANUAL_LIST_SAMPLES; i++) {
|
||||||
sample = &reply.data.manual_list.samples[i];
|
sample = &reply.data.manual_list.samples[i];
|
||||||
UTI_TimespecNetworkToHost(&sample->when, &when);
|
UTI_TimespecNetworkToHost(&sample->when, &when);
|
||||||
|
|
||||||
|
|
11
cmdmon.c
11
cmdmon.c
|
@ -279,8 +279,7 @@ do_size_checks(void)
|
||||||
for (i = 1; i < N_REPLY_TYPES; i++) {
|
for (i = 1; i < N_REPLY_TYPES; i++) {
|
||||||
reply.reply = htons(i);
|
reply.reply = htons(i);
|
||||||
reply.status = STT_SUCCESS;
|
reply.status = STT_SUCCESS;
|
||||||
reply.data.manual_list.n_samples = htonl(MAX_MANUAL_LIST_SAMPLES);
|
reply_length = PKL_ReplyLength(&reply);
|
||||||
reply_length = PKL_ReplyLength(&reply, sizeof (reply));
|
|
||||||
if ((reply_length && reply_length < offsetof(CMD_Reply, data)) ||
|
if ((reply_length && reply_length < offsetof(CMD_Reply, data)) ||
|
||||||
reply_length > sizeof (CMD_Reply))
|
reply_length > sizeof (CMD_Reply))
|
||||||
assert(0);
|
assert(0);
|
||||||
|
@ -394,7 +393,7 @@ transmit_reply(CMD_Reply *msg, union sockaddr_all *where_to)
|
||||||
assert(0);
|
assert(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
tx_message_length = PKL_ReplyLength(msg, sizeof (*msg));
|
tx_message_length = PKL_ReplyLength(msg);
|
||||||
status = sendto(sock_fd, (void *) msg, tx_message_length, 0,
|
status = sendto(sock_fd, (void *) msg, tx_message_length, 0,
|
||||||
&where_to->sa, addrlen);
|
&where_to->sa, addrlen);
|
||||||
|
|
||||||
|
@ -1105,10 +1104,14 @@ handle_manual_list(CMD_Request *rx_message, CMD_Reply *tx_message)
|
||||||
RPY_ManualListSample *sample;
|
RPY_ManualListSample *sample;
|
||||||
RPT_ManualSamplesReport report[MAX_MANUAL_LIST_SAMPLES];
|
RPT_ManualSamplesReport report[MAX_MANUAL_LIST_SAMPLES];
|
||||||
|
|
||||||
tx_message->reply = htons(RPY_MANUAL_LIST);
|
tx_message->reply = htons(RPY_MANUAL_LIST2);
|
||||||
|
|
||||||
MNL_ReportSamples(report, MAX_MANUAL_LIST_SAMPLES, &n_samples);
|
MNL_ReportSamples(report, MAX_MANUAL_LIST_SAMPLES, &n_samples);
|
||||||
tx_message->data.manual_list.n_samples = htonl(n_samples);
|
tx_message->data.manual_list.n_samples = htonl(n_samples);
|
||||||
|
|
||||||
|
memset(tx_message->data.manual_list.samples, 0,
|
||||||
|
sizeof (tx_message->data.manual_list.samples));
|
||||||
|
|
||||||
for (i=0; i<n_samples; i++) {
|
for (i=0; i<n_samples; i++) {
|
||||||
sample = &tx_message->data.manual_list.samples[i];
|
sample = &tx_message->data.manual_list.samples[i];
|
||||||
UTI_TimespecHostToNetwork(&report[i].when, &sample->when);
|
UTI_TimespecHostToNetwork(&report[i].when, &sample->when);
|
||||||
|
|
26
pktlength.c
26
pktlength.c
|
@ -133,13 +133,14 @@ static const uint16_t reply_lengths[] = {
|
||||||
0, /* SUBNETS_ACCESSED - not supported */
|
0, /* SUBNETS_ACCESSED - not supported */
|
||||||
0, /* CLIENT_ACCESSES - not supported */
|
0, /* CLIENT_ACCESSES - not supported */
|
||||||
0, /* CLIENT_ACCESSES_BY_INDEX - not supported */
|
0, /* CLIENT_ACCESSES_BY_INDEX - not supported */
|
||||||
0, /* MANUAL_LIST - variable length */
|
0, /* MANUAL_LIST - not supported */
|
||||||
RPY_LENGTH_ENTRY(activity), /* ACTIVITY */
|
RPY_LENGTH_ENTRY(activity), /* ACTIVITY */
|
||||||
RPY_LENGTH_ENTRY(smoothing), /* SMOOTHING */
|
RPY_LENGTH_ENTRY(smoothing), /* SMOOTHING */
|
||||||
RPY_LENGTH_ENTRY(server_stats), /* SERVER_STATS */
|
RPY_LENGTH_ENTRY(server_stats), /* SERVER_STATS */
|
||||||
RPY_LENGTH_ENTRY(client_accesses_by_index), /* CLIENT_ACCESSES_BY_INDEX2 */
|
RPY_LENGTH_ENTRY(client_accesses_by_index), /* CLIENT_ACCESSES_BY_INDEX2 */
|
||||||
RPY_LENGTH_ENTRY(ntp_data), /* NTP_DATA */
|
RPY_LENGTH_ENTRY(ntp_data), /* NTP_DATA */
|
||||||
RPY_LENGTH_ENTRY(manual_timestamp), /* MANUAL_TIMESTAMP2 */
|
RPY_LENGTH_ENTRY(manual_timestamp), /* MANUAL_TIMESTAMP2 */
|
||||||
|
RPY_LENGTH_ENTRY(manual_list), /* MANUAL_LIST2 */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* ================================================== */
|
/* ================================================== */
|
||||||
|
@ -184,39 +185,18 @@ PKL_CommandPaddingLength(CMD_Request *r)
|
||||||
/* ================================================== */
|
/* ================================================== */
|
||||||
|
|
||||||
int
|
int
|
||||||
PKL_ReplyLength(CMD_Reply *r, int read_length)
|
PKL_ReplyLength(CMD_Reply *r)
|
||||||
{
|
{
|
||||||
uint32_t type;
|
uint32_t type;
|
||||||
|
|
||||||
assert(sizeof (reply_lengths) / sizeof (reply_lengths[0]) == N_REPLY_TYPES);
|
assert(sizeof (reply_lengths) / sizeof (reply_lengths[0]) == N_REPLY_TYPES);
|
||||||
|
|
||||||
if (read_length < (int)offsetof(CMD_Reply, data))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
type = ntohs(r->reply);
|
type = ntohs(r->reply);
|
||||||
|
|
||||||
/* Note that reply type codes start from 1, not 0 */
|
/* Note that reply type codes start from 1, not 0 */
|
||||||
if (type < 1 || type >= N_REPLY_TYPES)
|
if (type < 1 || type >= N_REPLY_TYPES)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Length of MANUAL_LIST depends on number of samples stored in it */
|
|
||||||
if (type == RPY_MANUAL_LIST) {
|
|
||||||
uint32_t ns;
|
|
||||||
|
|
||||||
if (r->status != htons(STT_SUCCESS))
|
|
||||||
return offsetof(CMD_Reply, data);
|
|
||||||
|
|
||||||
if (read_length < (int)offsetof(CMD_Reply, data.manual_list.samples))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
ns = ntohl(r->data.manual_list.n_samples);
|
|
||||||
if (ns > MAX_MANUAL_LIST_SAMPLES)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return offsetof(CMD_Reply, data.manual_list.samples) +
|
|
||||||
ns * sizeof (RPY_ManualListSample);
|
|
||||||
}
|
|
||||||
|
|
||||||
return reply_lengths[type];
|
return reply_lengths[type];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,6 @@ extern int PKL_CommandLength(CMD_Request *r);
|
||||||
|
|
||||||
extern int PKL_CommandPaddingLength(CMD_Request *r);
|
extern int PKL_CommandPaddingLength(CMD_Request *r);
|
||||||
|
|
||||||
extern int PKL_ReplyLength(CMD_Reply *r, int read_length);
|
extern int PKL_ReplyLength(CMD_Reply *r);
|
||||||
|
|
||||||
#endif /* GOT_PKTLENGTH_H */
|
#endif /* GOT_PKTLENGTH_H */
|
||||||
|
|
Loading…
Reference in a new issue