Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
soc:2011:pcmattman:notes:start [2011/05/22 05:58] pcmattman created a notes page ready to be filled with notes |
soc:2011:pcmattman:notes:start [2011/08/15 18:34] (current) pcmattman added information about building from source |
||
---|---|---|---|
Line 5: | Line 5: | ||
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. | 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 ==== | ||
+ | * [[http://www.faqs.org/rfcs/rfc2460.html|RFC 2460 (IPv6 Spec)]] | ||
+ | * [[http://tools.ietf.org/html/rfc4861|RFC 4861 (Neighbour Discovery Protocol)]] | ||
+ | * [[http://www.faqs.org/rfcs/rfc2462.html|RFC 2462 (IPv6 Stateless Address Autoconfiguration)]] | ||
+ | * [[http://www.faqs.org/rfcs/rfc3315.html|RFC 3315 (DHCPv6)]] | ||
+ | * [[http://wiki.tools.ietf.org/html/rfc5970|RFC 5970 (DHCPv6 Network boot options)]] | ||
+ | ==== Code ==== | ||
+ | * [[http://pedigree-project.org/projects/pedigree/repository/revisions/develop/entry/src/modules/system/network-stack|Pedigree's network stack]] with IPv6 support (new BSD license) | ||
+ | ==== Repo Notes ==== | ||
+ | * Developing on branch 'develop' | ||
+ | * Will bring commits into master when they are ready for upstream merging. This way I can rebase them and merge several related commits into one larger commit for submission upstream (or mix several "oops" commits into the commit that originally contained the mistake). | ||
+ | * Can bring upstream changes into develop branch via master | ||
+ | ==== Notes to Self ==== | ||
+ | * Can't get network interface's MAC address within a TCPIP protocol (eg ICMP, UDP). Will need to have a user begin the process of autoconfiguration for a link-local address manually! | ||
+ | * Link-local address must always be present, globally routed address can be obtained via router advertisements or DHCPv6 (and may not exist). How do we manage this for potential users? | ||
+ | * Probably worth fixing DNS to use AAAA records earlier rather than later. | ||
+ | * [[soc/2011/pcmattman/notes/packetdumps/start|Packet Dumps]] and relevant notes. | ||
+ | |||
+ | ===== 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: | ||
+ | * ipv6 - the IPv6 protocol itself. Use to see errors in traffic coming in and out, and to see address assignment and other routing information. | ||
+ | * ip6mgmt - the IPv6 commands. This will output extra information during the process of configuring IPv6 at runtime. | ||
+ | * icmpv6 - ICMPv6. Mostly just errors. | ||
+ | * ndp - Neighbour Discovery Protocol. A lot of debugging here related to router and neighbour discovery. Recommended if you are having trouble enabling IPv6 in your environment. | ||
+ | * dhcp6 - DHCPv6. Debugging related to DHCPv6. Only really worth using if you actually have a DHCPv6 server, and if you are having trouble with it. | ||
+ | |||
+ | ==== 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, [[http://www.tunnelbroker.net|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: | ||
+ | <code> | ||
+ | #!gpxe | ||
+ | ipv6 any | ||
+ | kernel http://flash6.etherboot.org/gpxe/bz2bzImage root=100 | ||
+ | initrd http://flash6.etherboot.org/gpxe/initrd.bz2 | ||
+ | boot | ||
+ | </code> | ||
+ | |||
+ | (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: | ||
+ | <code> | ||
+ | http://[2001:ab:cd:ef::1]:1234/file.bin | ||
+ | </code> | ||
+ | |||
+ | Note that [[http://msdn.microsoft.com/en-us/library/aa921042.aspx|zero compression ("Compressing Zeroes" section)]] can be used for all IPv6 addresses. |