IPv6 CARE
IPv6 CARE, βIPv6 Compliance Automatic Runtime Experimentβ, is a Linux tool able to diagnose the IPv6 compliance of programs at run time.
Mainly, it detects non IPv6 compliant function calls performed by the running program, for example gethostbyname().
For each problem detected, it generates :
- a description of the problem
- a tip explaining how to avoid this problem
- the function calls stack, which is useful in order to know where the calls were performed in the source code
Moreover it generates a log file of all network related function calls.
IPv6 CARE works with all programs linked to the standard shared library (libc), which means:
- Programs compiled (C/C++, β¦) in a standard way (that is, not statically compiled).
- Programs written in some "Interpreted" language (Java, Perl, Python,β¦) if the interpreter or the virtual machine is compiled in a standard way (see limits below).
This shows how to test the IPv6 compliance of the telnet program:
$ ipv6_care check -v telnet localhost 7777
IPV6 CARE detected: getaddrinfo() with [ ai_family=AF_UNSPEC ai_socktype=SOCK_STREAM nodename=localhost servname=7777 ]
IPV6 CARE detected: getnameinfo() with [ sa.ip=127.0.0.1 sa.port=7777 ]
Trying 127.0.0.1β¦
IPV6 CARE detected: socket() with [ domain=AF_INET type=SOCK_STREAM protocol=ip ]
IPV6 CARE detected: connect() with [ socket=3 address.ip=127.0.0.1 address.port=7777 ]
IPV6 CARE detected: getnameinfo() with [ sa.ip=::1 sa.port=7777 ]
Trying ::1β¦
IPV6 CARE detected: close() with [ fd=3 ]
IPV6 CARE detected: socket() with [ domain=AF_INET6 type=SOCK_STREAM protocol=ip ]
IPV6 CARE detected: connect() with [ socket=3 address.ip=::1 address.port=7777 ]
telnet: Unable to connect to remote host: Connection refused
IPV6 CARE detected: close() with [ fd=3 ]
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
IPv6 diagnosis for βtelnet localhost 7777β was generated in: /tmp/ipv6_diagnosis/telnet/by_pid/pid_16537
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
$
The generated messages show that telnet has an IPv6 compliant behavior (mainly because it uses getaddrinfo).
For more information, we can check the details of the diagnosis in the directory indicated.
Interoperability:
Until now IPv6 CARE has only been tested on Linux systems.
It should also work on other UNIX-like systems if they allow dynamic loading of shared libraries (defined by the environment variable LD_PRELOAD) and if they have the program βaddr2lineβ.
Limits:
In the case of "interpreted" langages (in the sense that they are not compiled into machine code), the tool interacts between the interpreter and the standard library (libc). For this reason IPv6 CARE diagnoses the behavior of the interpreter and not directly the script's behavior, which makes the diagnosis harder to be understood. Please refer to the documentation for further information on this issue.
Durability indicators:
IPv6 CARE is open source software and it is published on the sourceforge server in order to extend its audience and to allow a continuation of the development, even after the end of the EGEE project.
Downloads statistics:
http://sourceforge.net/project/stats/detail.php?gr...
Help and documentation
Forum: http://sourceforge.net/forum/forum.php?forum_id=89...
User guide: https://sourceforge.net/project/showfiles.php?grou...
Wikipedia article (in french) : http://fr.wikipedia.org/wiki/IPv6_CARE
Article explaining how to use IPv6 CARE (french, early version) : http://www.g6.asso.fr/blog/?p=33
Examples of IPv6 compliance reports using IPv6 CARE: https://edms.cern.ch/document/980424, https://edms.cern.ch/document/980820.
Contribution:
For contributions to IPv6 CARE please contact the author of this card.