X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fntpd.c;h=9841e3155a95c077ac7b84d8d975890e25d34caa;hb=b6052ac362c1d289aec7e3a0397b18b99ca071a3;hp=15e60a5d0317735a00f75b6a1ae1391c827ac0aa;hpb=f2696c0e21e9226d3911457250ef64138900aa2b;p=collectd.git diff --git a/src/ntpd.c b/src/ntpd.c index 15e60a5d..9841e315 100644 --- a/src/ntpd.c +++ b/src/ntpd.c @@ -52,12 +52,18 @@ static const char *config_keys[] = { "Host", "Port", - "ReverseLookups" + "ReverseLookups", + "IncludeUnitID" }; static int config_keys_num = STATIC_ARRAY_SIZE (config_keys); static int do_reverse_lookups = 1; +/* This option only exists for backward compatibility. If it is false and two + * ntpd peers use the same refclock driver, the plugin will try to write + * simultaneous measurements from both to the same type instance. */ +static int include_unit_id = 0; + # define NTPD_DEFAULT_HOST "localhost" # define NTPD_DEFAULT_PORT "123" static int sock_descr = -1; @@ -283,6 +289,13 @@ static int ntpd_config (const char *key, const char *value) else do_reverse_lookups = 0; } + else if (strcasecmp (key, "IncludeUnitID") == 0) + { + if (IS_TRUE (value)) + include_unit_id = 1; + else + include_unit_id = 0; + } else { return (-1); @@ -852,18 +865,26 @@ static int ntpd_read (void) { struct in_addr addr_obj; char *addr_str; + int name_refclock; refclock_id = (ntohl (ptr->srcadr) >> 8) & 0x000000FF; - if (refclock_id < refclock_names_num) + name_refclock = refclock_id < refclock_names_num; + + if (name_refclock && include_unit_id) { /* The unit number is in the lowest byte. */ ssnprintf (peername, sizeof (peername), - "%s%i", + "%s-%u", refclock_names[refclock_id], ntohl (ptr->srcadr) & 0xFF); } - else + else if (name_refclock && !include_unit_id) + { + sstrncpy (peername, refclock_names[refclock_id], + sizeof (peername)); + } + else /* !name_refclock */ { memset ((void *) &addr_obj, '\0', sizeof (addr_obj)); addr_obj.s_addr = ptr->srcadr;