I managed to get my commits rebased and merged ready for upstream merge today… finally! It still took quite a while but I managed to sort out the conflicts as they came and it's all come together quite nicely. I also realised I've forgotten to sign off all my commits as they are committed, so I went through and signed them all off as well.
Still not sure if the new set of commits needs work before upstream merge, but it is at least far cleaner than the development branch.
I'm certainly glad I'm not using SVN right now :)
This evening I mainly read up on DHCPv6. Whilst I have read the specification, there is a wealth of information on the Internet that covers real-world usage cases - something that the RFC alone cannot tell me about.
DHCPv6 by Shane Kerr (ISC) - 2006. An overview of the protocol in light of stateless autoconfiguration.
Wikipedia's overview is sparse but links to the relevant RFCs.
TCP/IP Guide pages on DHCPv6. I've always found the TCP/IP guide to be very useful, and it's IPv6 overview is handy.
ISC's dhcpd - source code and documentation for the ISC dhcpd, which supports IPv6.
I found two nasty regressions today so I spent most of my time debugging those. The first was an issue with the value of a constant in the code which caused the wrong code path to be used for ICMPv6 RX. After the recent revert of the tcpip module changes, this caused a NULL pointer to be called as a function, which obviously did not end too well. Fixing the constant value has resolved this now.
Another regression came in ipv6_tx_csum - for some reason it has begun to fail, when it used to work fine. I'm not sure exactly what conditions caused this one, but the fix was quite simple in the end: set the checksum psuedo-header's “length” field to the payload length in the IPv6 header.
I won't be able to do much work tomorrow as I have a work commitment that will probably take me out until about 9 PM my time. It'll be an 8 AM to 9 PM day, so very little time for coding.
I was busy with other commitments (both work and real life) over most of these days so I didn't get a chance to work on gPXE. I'll use the weekend to catch up.
I managed to implement blocking via monojob for router solicits today. This means that until a valid, globally routable address is assigned, other work on the command line cannot be done. This should stop a lot of “no route to host” spam on startup, and also lets me pass a status code back to the requester of the router solicit. This is important, as I need to be able to identify whether to also begin DHCPv6 operations in ip6mgmt.c.
Now that flash6.etherboot.org is up, I can start putting testing images and scripts there and hopefully make use of them in my regular testing. This will mean my testing environment is consistent with the testing environment of the community.