X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fntpd.c;h=9841e3155a95c077ac7b84d8d975890e25d34caa;hb=b6052ac362c1d289aec7e3a0397b18b99ca071a3;hp=8bbf74d7d965b94ac0d21939fc3a4776116a7539;hpb=a294a8d4bc4779fc893575d62b7e50f969a94772;p=collectd.git diff --git a/src/ntpd.c b/src/ntpd.c index 8bbf74d7..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,15 +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-%u", + refclock_names[refclock_id], + ntohl (ptr->srcadr) & 0xFF); + } + else if (name_refclock && !include_unit_id) { sstrncpy (peername, refclock_names[refclock_id], sizeof (peername)); } - else + else /* !name_refclock */ { memset ((void *) &addr_obj, '\0', sizeof (addr_obj)); addr_obj.s_addr = ptr->srcadr;