Jumped into the code and had a look at the existing IPv6 implementation. I managed to figure out how to enable it again (with the right #defines in config.h) and was able to dump information about each IPv6 packet passing through the system. So far so good! The next steps will be getting IPv6 packets to the next layer up (ICMPv6, UDP and TCP) so I can start working on stateless autoconfiguration.
Zero-compression went in without a hitch, as per the project plan, but I'm going to have to come back to it. The code is fairly ugly…
I'm going to have to talk to Marty and Guo-Fu about the best way to integrate IPv6 for use in scripts and on the command line. I've been thinking (to myself) of having two new commands: “ipv6” to IPv6-enable an interface and set a link-local address, and “dhcpv6” to obtain an IPv6 address via DHCPv6. Not sure whether “dhcpv6” is a good name though as it'll break tab-completion for the “dhcp” command.
At this stage the work done so far is just in a patch file and a git commit.
All up, a good first day of GSoC 2011!
Managed to get some more progress on the IPv6 implementation today. I figured out how to create a command and added the “ipv6” command to begin testing stateless autoconfiguration (as per the project plan). So far so good - the only thing I really need to do now is actually assign IPv6 addresses to netdevices so they can begin talking on the network for NDP and other ICMPv6 stuff (in week 2). That'll come soon.
I also created a Google Picasa album for my work on this project, so I can look back on screenshots and photographs and see my progress :). I uploaded a photo of one of my test machines creating a useful autoconfiguration IPv6 address, and it also shows some IPv6 traffic passing through.
Guo-Fu gave some good advice for the code I've written so far - mainly with respect to committing it.
I didn't manage to get any code written today - a few appointments and work commitments.
Marty set me up with an account on the server though, so I now have a non-github git repository to work in.
Started working on getting gPXE to recognise IPv6 addresses in URLs - so things such as http://[fc00::1]/test.bin will work. Managed to get inet6_aton implemented and some work towards URI parsing for IPv6 addresses.
I created a develop branch in the git repository to do all my development in, so I can bring commits across into master and squash them with git-rebase as needed.
I'm hoping to get this sorted ready for week 2 where I'll get neighbour solicit and advertisements working and maybe get some ICMPv6 echo responses out.
Haven't managed to get much working tonight - need to figure out how to convince HTTP to transmit TCP over IPv6, as it seems to be struggling to do that at the moment. Tonight's commits are valid and working though.
Been having some issues with the gPXE and the serial port on my primary test machine, might switch focus and fix that while I figure out the HTTP/IPv6 stuff.
Spent some time figuring out how requesting a kernel over HTTP works at each layer in gPXE - once I have a better idea of the links between each layer I can figure out where connecting to an IPv6 host is failing.
I can at least use QEMU for this part of the testing as I don't need actual IPv6 traffic from the network to test with - that's improved my compile/test cycle speed significantly! :)