[collectd] ntpd plugin complaining

Luboš Staněk lubek at users.sourceforge.net
Tue Oct 31 19:16:35 CET 2006


Hi Florian,
I tried to resolve the problem, I cannot let it be wrong.

My findings:

getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host,
size_t hostlen, char *serv, size_t servlen, int flags);

"The getnameinfo() function is used to convert a sockaddr structure to a
pair of host name and service strings. The sockaddr structure sa should
point to either a sockaddr_in or sockaddr_in6 structure (for IPv4 or
IPv6 respectively) that is salen bytes long."

sockaddr_in6 in our case (you check the ntpd's `v6_flag')
struct sockaddr_in6 {
        unsigned short int      sin6_family;    /* AF_INET6 */
        __u16                   sin6_port;      /* Transport layer port # */
        __u32                   sin6_flowinfo;  /* IPv6 flow information */
        struct in6_addr         sin6_addr;      /* IPv6 address */
        __u32                   sin6_scope_id;  /* scope id (new in
RFC2553) */
};

But the ntpd uses in6_addr (you have this structure in info_peer_summary):
struct in6_addr
{
        union
        {
                __u8            u6_addr8[16];
                __u16           u6_addr16[8];
                __u32           u6_addr32[4];
        } in6_u;

When I modified the function parameters to sockaddr_in6, I got
unresolved numeric addresses , ex: ::2f70:726f:632f:3130:3635:342f and
.rrd files. And the famous "ntpd plugin: getnameinfo failed: ai_family
not supported" was a history.
I did not tested it but I am convinced that in case of the working IPV6
only network the unmodified call returns empty peername.


The test should be whether the system supports and works with IPV6 and
only after successful test we should try to resolve the ipv6 address
returned in the ntpd response. In all other case we should use only IPV4.


In the 1) case the ipv6 module is not loaded and /proc/net/if_inet6 does
not exist. The interfaces have no ipv6 addresses.
In the 2) case the ipv6 module is loaded  and /proc/net/if_inet6 exists
but the interfaces have only "Scope:Link" inet6 addresses (except ::1).
The IPV6 working interface should have more than HW address.


I hope this helps,
Lubos


Florian Forster napsal(a):
> On Fri, Oct 27, 2006 at 03:09:25PM +0200, Lubo?? Stan??k wrote:
>>> That'd be my fault, I'm afraid.. Why's that error occuring in your case?
>>> AF_INET6 should be supported by pretty much all operating systems now -
>>> even that evil one ;)
> 
>> Everything I cannot handle is evil. :)
> 
> I smell yet another proof for the evilness of women.. *smirk*
> 
>> 1) The system is configured for only IPV4, module ipv6 is disabled.
>> /etc/modprobe.conf - alias net-pf-10 off
>> /ets/sysconfig/network-scripts/ifcfg-<interface> - IPV6INIT=no
>> Module ipv6 is not loaded.
>> ntpd does not listen on ::#123.
>> Every 10 seconds collectd[*]: ntpd plugin: getnameinfo failed: ai_family
>> not supported.
> 
> That is surprising, because `getnameinfo' is only ever called if one of
> ntpd's peers has the `v6_flag' set. However, no explicit address family
> is passed to `getnameinfo', but it examines the `struct sockaddr', which
> is provided by the NTP-daemon.
> 
>> Oct 27 14:56:03 ls collectd[23815]: rrd_update failed:
>>   ntpd/time_offset-0.0.0.0.rrd: illegal attempt to update using time
>>   1161953762 when last update time is 1161953762 (minimum one second
>>   step)
> 
> The problem here appears to be, that the peer could not be resolved. At
> least it's not normal, that the IP-address 0.0.0.0 is being used.
> 
> All in all I have the suspicion that your ntpd is returning funky data.
> Could you tell me which version you're using and if the following
> command works:
>   ntpdc -c peers localhost
> 
> Regards,
> -octo




More information about the collectd mailing list