Table of Contents

Matthew Iselin: IPv6 Implementation

Notes

I'll update this with notes and links to websites I find as I'm working on the project that might be handy later on. The notes here may also be the foundation for the IPv6 documentation later on.

Useful RFCs

Code

Repo Notes

Notes to Self

Tutorials

Building gPXE with IPv6 Enabled

By default, IPv6 is disabled in gPXE. You must explicitly build IPv6 support into gPXE in order to use it.

The easiest way to do this is to use ROM-o-matic (http://rom-o-matic.net) with the “current-top-of-git-tree” and make sure NET_PROTO_IPV6 and IPV6_CMD are both ticked before you finish creating your image. However, if you do not want to use ROM-o-matic, you can uncomment/define NET_PROTO_IPV6 and IPV6_CMD in src/config/general.h. These should both already exist in the file (in a disabled state).

The following are valid DEBUG entries if you wish to enable debugging:

Setting up IPv6 on your network

To work with IPv6 in gPXE on your network, you will need both an IPv6 prefix and a router advertisement daemon. If you like, you can set up DHCPv6 for your network for address assignment. A router advertisement daemon will still be required for routing, but in the future DHCPv6 will offer boot filenames and other boot-related options.

The best place to get an IPv6 is your ISP, but if your ISP does not offer IPv6, Hurricane Electric offers a fairly stable and easy-to-use tunnel. HE also provides configuration commands for a wide range of operating systems. These should be able to be copied and pasted into a terminal on your workstation to set up IPv6 connectivity quickly and easily. There are a variety of tutorials on the internet that will cover adding router advertisements and/or DHCPv6 to an IPv6 tunnel.

Booting over IPv6 in gPXE is quite simple: instead of using the 'dhcp' command (ala IPv4), you use the 'ipv6' command. This obtains an address and sets up routing for IPv6 so that you can use IPv6 servers.

You can use the following script to test gPXE's HTTP boot over IPv6:

#!gpxe
ipv6 any
kernel http://flash6.etherboot.org/gpxe/bz2bzImage root=100
initrd http://flash6.etherboot.org/gpxe/initrd.bz2
boot

(note: flash6 may need these image files uploaded - TODO!)

This should boot a Linux kernel.

If you don't have a DNS name for an IPv6 host, you can boot from an IPv6 address using the following syntax:

http://[2001:ab:cd:ef::1]:1234/file.bin

Note that zero compression ("Compressing Zeroes" section) can be used for all IPv6 addresses.