summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 00c9009)
raw | patch | inline | side by side (parent: 00c9009)
author | Claudius Zingerli <gitmail@zeuz.ch> | |
Fri, 3 Jun 2016 14:38:23 +0000 (16:38 +0200) | ||
committer | Claudius Zingerli <gitmail@zeuz.ch> | |
Fri, 3 Jun 2016 14:38:23 +0000 (16:38 +0200) |
src/chrony.c | patch | blob | history |
diff --git a/src/chrony.c b/src/chrony.c
index a8f6f62e3d58280221e7d55fb38be57d56cf56ca..4554f4990e36183e6e45eab3ce2b6cf462dc7672 100644 (file)
--- a/src/chrony.c
+++ b/src/chrony.c
} eDaemonReplies;
-#if defined(__GNUC__) || defined(__clang__)
+#if defined(__GNUC__)
+# /* GNU gcc extension to enforce struct packing. */
# define ATTRIB_PACKED __attribute__((packed))
#else
-# warning Not defining packed attribute (unknown compiler)
+# error Not defining packed attribute (unknown compiler)
# define ATTRIB_PACKED
#endif
{
int rc = 1;
unsigned long a, b, c, d, ip;
- const uint8_t *ip6;
switch (ntohs(addr->f_family))
{
break;
case IPADDR_INET6:
{
- ip6 = addr->addr.ip6;
-
-#if 1
- /* XXX: Use feature test macro? */
- const char *rp = inet_ntop(AF_INET6, ip6, p_buf, p_buf_size);
+ const char *rp = inet_ntop(AF_INET6, addr->addr.ip6, p_buf, p_buf_size);
if (rp == NULL)
{
ERROR(PLUGIN_NAME ": Error converting ipv6 address to string. Errno = %d", errno);
rc = snprintf(p_buf, p_buf_size, "[UNKNOWN]");
}
-#else
-# if defined(BYTE_ORDER) && (BYTE_ORDER == BIG_ENDIAN)
- rc =
- snprintf(p_buf, p_buf_size,
- "%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x",
- ip6[15], ip6[14], ip6[13], ip6[12], ip6[11], ip6[10], ip6[9],
- ip6[8], ip6[7], ip6[6], ip6[5], ip6[4], ip6[3], ip6[2],
- ip6[1], ip6[0]);
-# else
- rc =
- snprintf(p_buf, p_buf_size,
- "%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x",
- ip6[0], ip6[1], ip6[2], ip6[3], ip6[4], ip6[5], ip6[6],
- ip6[7], ip6[8], ip6[9], ip6[10], ip6[11], ip6[12], ip6[13],
- ip6[14], ip6[15]);
-# endif
-#endif
break;
}
default:
}
if (valid_command == 0)
- {
break;
- }
uint32_t seq_nr = rand_r(&g_chrony_rand);
p_req->header.f_cmd = htons(p_command);
DEBUG(PLUGIN_NAME ": Sending request (.cmd = %d, .seq = %d)", p_command,
seq_nr);
if (chrony_send_request(p_req, req_size) != 0)
- {
break;
- }
DEBUG(PLUGIN_NAME ": Waiting for response");
if (chrony_recv_response(p_resp, resp_size, p_resp_size) != 0)
- {
break;
- }
+
DEBUG(PLUGIN_NAME
": Received response: .version = %u, .type = %u, .cmd = %u, .reply = %u, .status = %u, .seq = %u",
p_resp->header.f_version, p_resp->header.f_type,
uval = ntohl(p_float.value);
exp = (uval >> FLOAT_COEF_BITS) - FLOAT_COEF_BITS;
if (exp >= 1 << (FLOAT_EXP_BITS - 1))
- {
exp -= 1 << FLOAT_EXP_BITS;
- }
/* coef = (x << FLOAT_EXP_BITS) >> FLOAT_EXP_BITS; */
coef = uval % (1U << FLOAT_COEF_BITS);
if (coef >= 1 << (FLOAT_COEF_BITS - 1))
- {
coef -= 1 << FLOAT_COEF_BITS;
- }
+
return coef * pow(2.0, exp);
}
sizeof(vl.plugin_instance));
}
if (p_type != NULL)
- {
sstrncpy(vl.type, p_type, sizeof(vl.type));
- }
+
if (p_type_inst != NULL)
- {
sstrncpy(vl.type_instance, p_type_inst, sizeof(vl.type_instance));
- }
plugin_dispatch_values(&vl);
}
{
/* Push real value if p_is_valid is true, push NAN if p_is_valid is not true (idea from ntp plugin) */
if (p_is_valid == 0)
- {
p_value = NAN;
- }
+
chrony_push_data(p_type, p_type_inst, p_value);
}
if (strcasecmp(p_key, CONFIG_KEY_HOST) == 0)
{
if (g_chrony_host != NULL)
- {
free(g_chrony_host);
- }
+
if ((g_chrony_host = strdup(p_value)) == NULL)
{
ERROR(PLUGIN_NAME ": Error duplicating host name");
if (strcasecmp(p_key, CONFIG_KEY_PORT) == 0)
{
if (g_chrony_port != NULL)
- {
free(g_chrony_port);
- }
+
if ((g_chrony_port = strdup(p_value)) == NULL)
{
ERROR(PLUGIN_NAME ": Error duplicating port name");
/* Seed RNG for sequence number generation */
rc = chrony_init_seq();
if (rc != CHRONY_RC_OK)
- {
return rc;
- }
+
g_chrony_seq_is_initialized = 1;
}
/* Get daemon stats */
rc = chrony_request_daemon_stats();
if (rc != CHRONY_RC_OK)
- {
return rc;
- }
/* Get number of time sources, then check every source for status */
rc = chrony_request_sources_count(&n_sources);
if (rc != CHRONY_RC_OK)
- {
return rc;
- }
for (now_src = 0; now_src < n_sources; ++now_src)
{
int is_reachable;
rc = chrony_request_source_data(now_src, &is_reachable);
if (rc != CHRONY_RC_OK)
- {
return rc;
- }
rc = chrony_request_source_stats(now_src, &is_reachable);
if (rc != CHRONY_RC_OK)
- {
return rc;
- }
+
}
return CHRONY_RC_OK;
}
g_chrony_is_connected = 0;
}
if (g_chrony_host != NULL)
- {
sfree(g_chrony_host);
- }
+
if (g_chrony_port != NULL)
- {
sfree(g_chrony_port);
- }
+
if (g_chrony_plugin_instance != NULL)
- {
sfree(g_chrony_plugin_instance);
- }
+
return CHRONY_RC_OK;
}