Table of Contents

Enable IPv6 in pping

Specification for blueprint: https://blueprints.launchpad.net/nav/+spec/pping-ipv6

Overview

NAV supports collecting information about IPv6 addresses and prefixes, but does not yet support communication over IPv6. A first step to make NAV more IPv6-compatible would be to enable ICMPv6 ECHO requests in the pping daemon.

Pointers

Relevant RFCS:

ICMPv6 is based on ICMPv4, but the echo request/echo reply packets do not use the same codes. Also, the checksum of an ICMPv6 packet appears to be calculated based on both an IPv6 header and the ICMP packet itself (from a quick glance at RFC 2463). The pping code embeds an old Python library for ICMP packet manipulation, written by Jeremy Hylton. The exact license of this library seems unclear at the moment; regardless, it does not support ICMPv6 packets. It should likely be replaced with something that supports both versions and whose license is clearly GPL compatible.

A few places in the pping code makes assumptions about what an IP address string looks like, and currently, a single AF_INET socket is used for sending ICMPv4 packets. Probably the best way to go is to add an AF_INET6 socket as well, then select the sending socket based on the destination IP address family, and adding the new socket to the socket list of the select() call used to receive data.

This ICMP-packet manipulating code can probably be reused in NAV: http://code.activestate.com/recipes/409689-icmplib-library-for-creating-and-reading-icmp-pack/ (PSF license, which I believe is compatible with GPL)