Monthly Archives: June 2011

Note to self: IPv6 on Hetzner

Hetzner has a strange IPv6 routing setup where the default gateway is not in the same subnet as the host. Clearly, this is to avoid wasting space on glue nets, but it does not look pretty. Obviously, Linux just ignores the fact that it isn’t supposed to work, but no such luck on FreeBSD. As Bitmand wrote some time ago, it can be solved with a static route but the FreeBSD startup scripts, apply the default route before static routes, leaving it no other option but to reject the default route as it has no route to its target at that time. Instead of hacking the startup scripts, this can be solved easier with two static routes with fixed order, which is still a hack though not as ugly and less error prone when upgrading the system files. For reference, especially for myself next time I need this, here’s my full ipv6 startup configuration:

rc.conf:
ipv6_enable="YES"
ipv6_default_interface="re0"
ipv6_static_routes="defgw def"
ipv6_route_defgw="2a01:XXXX:XXXX:XXXX::1/59 -prefixlen 59 -iface re0"
ipv6_route_def="default 2a01:XXXX:XXXX:XXXX::1"
ipv6_ifconfig_re0="2a01:YYYY:YYYY:YYYY::2/64"

systctl.conf
net.inet6.ip6.accept_rtadv=1

Implementing 11n TX aggregation, why it’s not so easy..

The only real missing bit from the initial 11n support for ath(4) in FreeBSD is now TX aggregation. This is also quite a tricky thing to do right, because (like everything related to these Atheros NICs) it's all done in software.

I'm about half way through the first part - implementing per-node, per-TID software queues. Since A-MPDU sessions are implemented using TIDs (although in net80211 they're linked to WME access classes (AC), hm!) traffic for each TID has to be individually managed.

The basic premise is quite simple. Frames are queued based on the destination node and TID. Non-QoS frames to a unicast destination (ie, a known station) go to the "non-QoS TID" (TID 16 in FreeBSD's net80211 stack.) Multicast frames go to the software-driven multicast/content-after-beacon (cabq) queue. Then a separate task handles de-queuing packets form these queues and queuing them to the hardware.

The reality however is a little more difficult than that.

Firstly, frames are queued from multiple contexts. The most obvious is the per-interface queue (ie wlanX). These may run in parallel and target the same hardware, so now I need to add locking to the per-node structure. Previously this wasn't (much) of a problem since the TX code simply directly dispatched to the hardware, and these queues are correctly locked. However now there's software-driven queues (which need new locks) along with some more per-node state. That all needs locking.

Next, the rate control code wasn't at all locked. I've begun wrapping them in per-node locks. Making sure I get this correct isn't easy.

Then there's the question of marking nodes and TIDs that have traffic to send. Right now that's done by adding each node to a linked list of "ready nodes". I then check all the TIDs for that node and dequeue what packets I have to. It's ugly code, but it works well enough for testing. I'll finish off implementing what ath9k and the Atheros reference code does (ie, maintaining both a "node" and "TID" linked list, so I can directly walk which TIDs need walking), but there's implications here for getting "QoS" right. (Ie, which order do you dequeue packets? How many do you dequeue from which queue in order for things to be "fair" ?) I'm going to leave all of these questions unanswered for now (as they're not handled in the current code anyway) and hope someone else steps up to it!

At this point I now have a mostly-clean (for values of "clean") implementation of per-node, per-TID software queues. I'm still in the process of tidying all of this up in preparation to commit to -HEAD before I begin the aggregation code. I'll cover that in a moment.

Then there's handling the aggregation session stuff.

Firstly, there's handling the ADDBA exchange (ie, establishing an A-MPDU session.) When this is done, any unicast traffic pending to that node/TID needs to be paused and kept around until the ADDBA request/response occurs. This is known as "pausing" the queue. I've a hack in place to do this and will implement a correct "pause" API soon to clean it up.

Next there's handling packets already queued to the hardware. This crept up on me without warning.

Firstly - a little background. The ADDBA exchange establishes the initial sequence number and window size to use as the "window" for subsequent data exchanges. After that, any packets being queued to the destination must fall within this window (typically say 64 sequence numbers long.) The window stays a fixed size, but the window itself slides along when TX packets are successfully completed. Since packets may be lost at any time (whether aggregate or not), the window doesn't move until the sequence numbers at the beginning of the window are successfully received.

So for example, say my window begins at "0", my window size is "4" and the station sends 4 packets with sequence numbers "0", "1", "2", "3". If I receive all four packets correctly and thus send back a block-ACK indicating this, the new window position will begin at "4". I can then send packets "4", "5", "6" and "7". I can't send "8", even if I have it in my queue.

But say the other end only received "0", "1" and "3". "2" wasn't received, so I have to retransmit it. I can only advance the window to "2". I can't advance it to "3", since I didn't receive "2". I could advance it to "1", but that'd be pointless as I've already received it. So in this instance, both the station and access point would advance the window position to "2" and the station would then retransmit "2". If it's coded correctly, it could transmit "2", "4", "5". It can't transmit "6", as that's outside the window size of 4 packets. It could just retransmit "2" if it wanted to and not the others. In fact, it could transmit "4", "5" and "2" - the receiver would then be responsible for re-ordering the packets and only passing them up to the network layer once all the packets in the correct order are available.

Finally, if I don't receive "2" (say I just can't seem to transmit it), the STA need to do a few things. It first has to pause the queue so no further packets are queued to the hardware. At this point, packets may be queued to the hardware, but they'll be for sequence numbers greater than "2" but still within the block-ack window. Once the hardware has finished completing packets (successfully or not), it needs to send a "BAR" frame to the access point to establish a new starting point for the sequence number window. In this instance it could set it to "3", but what if "3" was already in the hardware queue and was successfully transmitted? That would confuse the hell out of the other end. So it looks at the last successfully transmitted sequence number was, then sends the "BAR" with a starting sequence number 1 after that.

So, if "2" came back as having failed too many times, but "3" and "4" were in the hardware TX queue, the driver will pause the queue, wait for pending frames to complete, then look at what happened. If "3" and "4" were successfully transmitted, it would send a BAR with the sequence beginning at "5". If "3" was successfully transmitted but not "4", it would send a BAR with the sequence beginning at "4". But if "3" failed, and "4" didn't - it would set the BAR at "3" and then try retransmitting it. Finally (and this is another strange corner case I have to handle!) if "3" came back as having failed - and it failed too many times! - but "4" TX'ed ok, then I have to set the initial sequence number at "5" and send the BAR.

The other end (in this instance, the hostap) would then receive the BAR, set the new expected sequence number to be whatever was sent (say "5" in this instance), flush all pending packets in the reorder queue - even if there are missing packets (in the above example, "3" may be missing but "4" was received ok, so the receive stack would've been waiting for "3" to be received before sending it all up to the network layer!) and send back a block-ACK to the STA confirming the new window position.

Now (phew!) given all of that, you can see what kind of complicated stuff is needed to properly handle all corner cases when doing software (re)transmitting of packets. I haven't even begun to talk about how to handle sending and re-sending aggregate frames! All of the above needs to be implemented before I can do that.

So! The above is what I'm now working on. Once that's done, I'll work on handling what's known as "filtered frames" (and that'll be brain-dumped in a future blog post, but it has to do with handling power save stations correctly, or A-MPDU sessions will be torn down prematurely!) and then when THAT is all done and stable, I'll look at handling aggregates.

And when I handle aggregates correctly, we'll finally have fast 11n TX in FreeBSD. Then I can enable "ATH_ENABLE_11N" by default. :-)

BSDCan Trip Report: Baptiste Daroussin

The Foundation recently sponsored Baptiste Daroussin to attend BSDCan 2011. Here is his trip report:

This year I had the privilege to attend BSDCan 2011 thanks to the generous sponsorship of the Foundation. I was invited by Erwin Lansing to participate in the Ports Workgroup by presenting the project I am working on with Julien Laffaye: pkgng. That was really important to me because I was able to meet Julien face to face and have a real discussion with him about the future of pkgng. I delivered two presentations for pkgng, one during the Developer Summit (for the Ports Workgroup) and one during the BSDCan short talk. I have to confess that I wasn't really confident about the presentations as it was the first time I had to make a technical presentation in English (I now dread to watch the videos if any) and also the first time we publicly discussed pkgng.

The Ports Workgroup was really interesting and pkgng couldn't have beeen made public at a better time. It fits exactly the need for a better way to distribute packages and perform binary upgrades in the future. We received really good feedback from people concerning pkgng and the project gained a new member, Will Andrews, which brings in new views to further pkgng development. During BSDCan and since then Will has contributed a lot of good code to the project and it was a great pleasure to meet him.

BSDCan is not only technical but also human. I was privileged to meet and discuss with many people and put a face on login names. I was able to meet in person my mentor, Thomas Abthorpe, as well as Rene Ladan who had been my vacation mentor and with whom I have often worked. I have been able to discover the best place in Ottawa to get good Scottish whisky :).

BSDCan was not only about the good points as I was there to present a project that I was expecting to be quite controversial. But it was greatly accepted, and we now have a lot of work to finish it! But it seems that was not enough for some people as I was personally punished during BSDCan when the portmgrs forced me to become one of them! It's unfair :)

Alberto Villa, FreeBSD committer

While KDE SC 4.6.4 makes his debut in the ports tree, we decided not to push KDE PIM 4.6.0, and keep the stable 4.4.11.1 a little longer. Nonetheless, we encourage you all brave people (well, it’s stable software, you don’t really need to be brave… but, as a FreeBSD user, you surely are) to install […]

WantedPorts and how it works

Jason Helfman from Experts Exchange recently submitted a libvirt and virt-manager port. Both ports were listed on our WantedPorts page in the FreeBSD wiki where he found it and decided to work on those ports.

At last years EuroBSDCon DevSummit we talked with Dru and Kris from PC-BSD about some central place where we can maintain a list of projects that should be ported to FreeBSD and agreed on creating a wiki page for that. Well the wiki page was already there but nobody knew about it at that time. So I used that and added my private list of missing projects to it. Then I searched a few forums where people also created such lists and added it all to the list with some additional information.

If you know some very cool project that does not exist in the FreeBSD Ports Tree yet but should be added give me a note and I add it to the WantedPorts page.

So if you want to contribute to the FreeBSD ports but don't know where to start then please have a look at the FreeBSD Porters Handbook and look for an interesting project from the WantedPorts.

See: Jason Helfman blog post about his contributions

BSDCan Trip Report: Julien Laffaye

The Foundation recently sponsored Julien Laffaye to attend BSDCan 2011. Here is his trip report:

During my trip in Ottawa, I met Baptiste Daroussin, with whom I developed the pkg_install replacement pkgng. It was nice to meet face-to-face and to discuss the future goals of pkgng development. I also met Will Andrews (who was interested by our project and has since joined our effort), Thomas Abthorpe and Rene Ladan. I was also able to put a face to many FreeBSD logins for the first time.

Indeed, the main purpose of my trip to Ottawa was to present pkgng in the Ports and Binary Package workgroup at the FreeBSD DevSummit. In the working group, we discussed issues such as the state of packages building. The agreement was that the project should build packages sets weekly, and monthly sets with an extended support. This approach raised some concerns for the disk space required by the mirrors, and we had a very interesting discussion about the current infrastructure of the project. Here, the agreement was to setup a kind of Content Distribution Network. The main idea behind this new policy of package building is to facilitate the installation and upgrade process of binary packages.

I was very pleased that our effort has been well received. We had a discussion about the state of pkgng, and if it should be commited into HEAD for the 9 release. We thought that pkgng will be ready around the date targeted by the 9 release, but we preferred to have more time to test it. So the agreement was to ship it in 10, and maybe in 9.1 but not as the default package manager.

Then we talked about the migration process and defined the tasks that must be done to make it happen. At the end of the workgroup, we had a very clear list of tasks, and each team (the Ports managers, the cluster administrators and pkgng developers)
knew their part in the process.

BSDCan Trip Report: Simon Nielsen

The Foundation recently sponsored Simon Nielsen to attend BSDCan 2011. Here is his trip report:

My main goal of attending BSDCan 2011 and the preceding Developers Summit was "networking", talking in person to many of the people I normally only interact with via email or IRC. Both to discuss some of the many smaller and larger outstanding issues but also just to generally meet people and talk to them in person which always help working together in the future. This certainly happened both during the "work day" time at the DevSummit and conference, but also at other times like during breakfast, lunch, and dinner which was almost always done with other FreeBSD'ers.

With my "FreeBSD.org admins hat" I spent some time talking to Brad Davis and Peter Losher about ways to improve administration of FreeBSD.org systems in the future. Among the discussed topics were ISC's use of Kerberos which might be useful at FreeBSD.org and the Puppet system for system administration. Some time was spent talking with Mark Linimon and Brad Davis about future plans for the nyi.FreeBSD.org site. I also attended Mark's talk about lessons learned from the nyi.FreeBSD.org rollout to date.

The FreeBSD Security Team held an informal meeting during the conference where we discussed how to try and improve the workings of the Security Team which will hopefully stir things up a bit.

One evening we had a DNSSEC dinner where it was discussed how to integrate support for DNSSEC into the FreeBSD base system. The main goal was to be able to support DNSSEC verification in normal applications. It was discussed both at the API level (e.g. should applications be able to know about DNSSEC verification failures) and the system level on how to actually implement this in FreeBSD. The primary conclusion was that this needed to be built into the NSS system, and likely integrated with nscd somehow.

I briefly talked to Hiroki Sato about the possibility for setting up an IPv6 tunnel broker for FreeBSD developers as some can't easily get local IPv6 connectivity.

The ports developers have been talking about changing the version control system for the Ports Collection from CVS to Subversion. I had a few discussions in this regard about how to practically do this, including repository layout and a time limited svn2cvs.

During the DevSummit I attended the Ports Working Group where the future of the FreeBSD package system, including distribution, was discussed. I attended the working group both with my hat of FreeBSD.org admin and Security Team member. The discussions were very useful and a rough consensus was agreed upon both for the future of packages, where they can hopefully be a lot more useful, and for how to handle distribution. From the security perspective the proposed system will allow us to build security into the system in the future. The new package system, coupled with the proposed "package set" concept, will require a radically different way of distributing packages. We discussed a workable model where we move to a more centralized system with fewer but better nodes for distribution. This will also allow us to better utilize our current sites and possibly add other sites in the future.

For the main conference, the "BHyVe a Native BSD Hypervisor" presentation was very interesting both from a general technical perspective and because it might allow the FreeBSD.org admins team to run some virtualization of servers without having to run other operating systems as is required today. George Neville-Neil's "Synchronizing Systems on a LAN: An Introduction to PTPd" presentation was very interesting from the technical perspective in hearing about all the challenges of very accurate timekeeping. The talk also had a lot of audience participation from people who knew a lot about the topic which made it even more interesting.

My Photo Album from the trip is available here.

BSDCan Trip Report: Thomas Abthorpe

The Foundation recently sponsored Thomas Abthorpe to attend BSDCan 2011. Here is his trip report:

The first time I was privileged to attend BSDCan was in 2009, a generous sponsorship from the FreeBSD Foundation enabled me to attend. Of the many topics I could have reported on, I chose to identify the human aspect of FreeBSD, the people that make it happen, and why the Foundation sends developers to conferences.

To me, people are still the most valuable resource in the project. I have mentored in many committers to the ports tree, and at BSDCan 2011, I was pleased to learn that two of my mentees would be attending. Rene Ladan (rene@) and Baptiste Daroussin (bapt@) would be in Ottawa, and for the first time ever, I would meet my proteges face to face. Julien Laffaye had been collaborating with Bapt, and was here for the presentations. Our sense of camaraderie in IRC made the initial meeting feel like a well established friendship. Our travels around Ottawa became a standing joke, “A Canadian, Dutchman and a pair of Frenchmen walk into a ...

v4l2 support in the linuxulator now in 8-stable

I MFCed the v4l2 support in the linuxulator to 8–stable. This allows now to use v4l2–webcams in skype/flash on 8-stable too.

Share

Bullet cache

I have written before on mdcached - my not-so-pet-project I've been doing over the years, which I'm looking forward to bring to a really usable state in the coming weeks. I've cleaned it up a lot since March and I'm confident that the core of the system is correct and reasonably bug-free. I am renaming it to "Bullet Cache" but I am still calling it "alpha" code as it is not yet feature complete (some commands are missing). Anyway, it looks like due to the combination of advances in hardware and some algorithmical improvements, its performance is really good, close to 1M transactions per second.

Read more...

Bullet cache

I have written before on mdcached - my not-so-pet-project I've been doing over the years, which I'm looking forward to bring to a really usable state in the coming weeks. I've cleaned it up a lot since March and I'm confident that the core of the system is correct and reasonably bug-free. I am renaming it to "Bullet Cache" but I am still calling it "alpha" code as it is not yet feature complete (some commands are missing). Anyway, it looks like due to the combination of advances in hardware and some algorithmical improvements, its performance is really good, close to 1M transactions per second.

Read more...

BSDCan Trip Report: Sergio Ligregni

The Foundation recently sponsored Sergio Ligregni to attend BSDCan 2011. Here is his trip report:

The travel started at Mexico City's International Airport, flying to Montreal and then to Ottawa.

The first day of BSD activity was Wednesday, May 11th, when the FreeBSD DevSummit took place at the University of Ottawa. We arrived, got our badges and started discussing development stuff. I was invited by Robert Watson to the Capsicum DevSummit. Unfortunately he was not there in person, instead of that, we talked to the Watson Box (Robert via Skype); I think this will remain famous through the years.

The DevSummit was interesting. It was my first Summit and I thought it would be like other conferences but with more participation from the audience. I was happily surprised when I found that there were opinions and really technical discussions on how to follow the development of the Capsicum framework. Pawel Dawidek explained how he performs some process "jailing" and how Capsicum is helping to achieve his goal, but also what he does not like too much and some ideas how to improve it. I felt surrounded by really serious security people, like my mentor in GSoC 2010, Stacey Son, who I finally was able to meet in person.

After that Summit I had the opportunity to talk to Dru Lavigne and ask her some final questions before taking my BSDA Certification Exam, like if it is needed to know all about the four BSDs regarding the certification goals (the answer: yes!).

In the second day of the Summit, Justin Gibbs gave a FreeBSD Foundation Report. I learned how the Foundation helps to spread the word on FreeBSD by sponsoring events and attendees. I analyzed that there's a gap in the Latin America area (north and central). I asked Justin how can the Foundation help to get a BSDCon in Latin American north area (since there a couple of events in South America). I think that Justin's answer changed the purpose of my trip to Ottawa: "the FreeBSD Foundation would help to get a BSDCon there, but we need a local contact to organize it". I started thinking on a next BSDCon in Mexico that covers the Mexico & Central America area.

The seed is set, it's just a matter of getting the elements to bring BSD to Mexico. I decided to give my mobile phone a better use than texting friends and I started interviewing people, important *BSD people, like:

* Michael Lucas - BSD books author
* Pawel Dawidek - FreeBSD commiter
* Stacey Son - FreeBSD/TrustedBSD developer
* Matt Olander
* Dan Langille - BSDCan organizer
* Brett Davis - iXsystems sales manager (I am trying to get more FreeBSD users by letting they know they will have strong support services)
* Dru Lavigne
* Josh Paetzel - FreeBSD developer (iXsystems)
* Julio Merino - NetBSD developer
* George Neville-Neil

The goal is to let the Universities know that *BSD is serious, in order to get some sponsorship and a venue. Also to let the company managers know that the OS is not only a learning OS or a hobby. BSD can be used in a really serious way and it is not just saving money, it's about investing in improving the product and giving back to the community.

After the FreeBSD Foundation report, I saw how FreeBSD is "cooked". I was in the "kitchen" looking at how the new ideas and features are discussed, and the greatest part: once the board is full of items, it is time to assign them to the developers. I'd like to say "me" next time I am there. I want to be more prepared as I know there is a release in 4 months.

The first day of the BSDCan conference was on Friday. I was a little nervous since I was taking my BSDA Certification Exam in a couple of hours. We started with a talk about UNICS in an architectural view. It was more than the non-technical view of UNIX development and it was fun and interesting to hear that from someone that actually lived it.

Then I took my certification exam. I asked Dru how many BSDA certified professionals are out there and it was great to hear that more than 150 professionals are certified. I think, however, we need to keep pushing to get more people certified. I can speak from my experience that the test is not impossible, but it really tests you. I found it really interesting, actually. I am still waiting for my result and hope to pass the exam.

I attended some other conference sessions at BSDCan, both ones where I know about the topic and others where I didn't know it actually existed. It was great to meet such professionals and to learn about new features.

Some of the talks I remember were the Kris Moore talk about the new PBI format for PC-BSD/FreeBSD. I think that will help newcomers to get involved using the system by its simplicity but at the same time its robustness. Also, Josh Paetzel's talk about a project I am currently working on, the new installer pc-sysinstall. It felt great to know that my code will impact a lot of systems.

There were these talks of previously unknown but interesting things: like the new SQL for monitoring systems and the Superpages for memory management. I found those really interesting and will read and digest their papers.

About the conference: I can say that I met great and interesting people and became curious about a lot of stuff. I am willing to get a project finished and present it to the community at a future BSD conference.

I also have a lot of materials to start moving things in Latin America, such as the videos I recorded. There is already a guy in Mexico that started the FreeBSD community and its website. BSD is getting stronger here: in the last Latin American Open Source Install Festival, PC-BSD was the second most asked for OS. I am sure that with a lot of effort, the help from the community and Foundation, and a little bit of luck, we will plan the next Mexico BSDCon. I talked with a guy in the hostel about the conference I was attending and the plan to get one in Mexico, and he proposed SalsaBSDCon. I think that name is great and will help attract people here in Latin America. I think I can help to bring BSD to Mexico even though we are "so close Berkeley, so far BSD".

World IPv6 Day – How to run 6to4 on FreeBSD

As you know, or should know, today (or tomorrow, depending on the timezone) is World IPv6 Day. What this means in practice is that a lot of top-tier IT businesses will make their web sites available via both IPv6 and IPv4, at least for a day. If you want to join in testing but your ISP is following the rest of the herd and isn't doing anything with IPv6, you can use various methods to tunnel your IPv6 traffic over IPv4.

Read more...

World IPv6 Day – How to run 6to4 on FreeBSD

As you know, or should know, today (or tomorrow, depending on the timezone) is World IPv6 Day. What this means in practice is that a lot of top-tier IT businesses will make their web sites available via both IPv6 and IPv4, at least for a day. If you want to join in testing but your ISP is following the rest of the herd and isn't doing anything with IPv6, you can use various methods to tunnel your IPv6 traffic over IPv4.

Read more...

FreeBSD Foundation and iXsystems Announce IPv6-only Testing Versions of FreeBSD and PC-BSD

The Foundation is pleased to announce that Bjoern Zeeb has made good progress in the Improved IPv6 Support project and that testing snapshots for both FreeBSD and PC-BSD are now available in time for World IPv6 Day. From the press release:

The FreeBSD Foundation and iXsystems announced today their commitment to support the efforts of World IPv6 Day to accelerate global IPv6 deployment. Earlier this year, the FreeBSD Foundation and iXsystems jointly awarded Bjoern Zeeb a grant to create an IPv6-only version of the FreeBSD and PC-BSD open source operating systems.

FreeBSD is well-known as a network stack research and reference platform and its KAME-based reference implementation appeared over a decade ago. With the help of the community, FreeBSD has been serving releases from IPv6 enabled servers for more than 8 years and FreeBSD's website, mailing lists, and developer infrastructure have been IPv6 enabled since 2007. FreeBSD is used by critical Internet infrastructure such as root name servers, routers, firewalls and some of the world's busiest and most reliable web sites. PC-BSD is a complete desktop operating system, based on FreeBSD, having the casual computer user in mind.

Bjoern Zeeb explains the work as follows: "Similar to many modern operating systems, IPv6 in FreeBSD was an optional feature that implied IPv4 support. Since most "IPv6-ready" applications rely on dual-stack behavior, broken IPv6 support often goes unnoticed given the IPv4 fallback option. Providing an implementation of an IPv6-only kernel without IPv4 support provides the FreeBSD Project with the ability to test and fix such regressions while encouraging other software developers to improve their code for true IPv6 readiness. With PC-BSD serving the desktop community and FreeBSD targeting the server, infrastructure and embedded markets, we have created an ideal development and test platform for other open source and proprietary IPv6-aware application software."

Kris Moore, founder and lead developer of the PC-BSD Project notes that "PC-BSD, with its FreeBSD base, makes an ideal platform for the testing of end-user desktop applications and utilities in an IPv6 environment. We are proud to be able to offer an IPv6 desktop testing environment for World IPv6 Day."

FreeBSD testing snapshots are available here and PC-BSD testing snapshots are available here.

FreeBSD Foundation and iXsystems Announce IPv6-only Testing Versions of FreeBSD and PC-BSD

The Foundation is pleased to announce that Bjoern Zeeb has made good progress in the Improved IPv6 Support project and that testing snapshots for both FreeBSD and PC-BSD are now available in time for World IPv6 Day. From the press release:

The FreeBSD Foundation and iXsystems announced today their commitment to support the efforts of World IPv6 Day to accelerate global IPv6 deployment. Earlier this year, the FreeBSD Foundation and iXsystems jointly awarded Bjoern Zeeb a grant to create an IPv6-only version of the FreeBSD and PC-BSD open source operating systems.

FreeBSD is well-known as a network stack research and reference platform and its KAME-based reference implementation appeared over a decade ago. With the help of the community, FreeBSD has been serving releases from IPv6 enabled servers for more than 8 years and FreeBSD's website, mailing lists, and developer infrastructure have been IPv6 enabled since 2007. FreeBSD is used by critical Internet infrastructure such as root name servers, routers, firewalls and some of the world's busiest and most reliable web sites. PC-BSD is a complete desktop operating system, based on FreeBSD, having the casual computer user in mind.

Bjoern Zeeb explains the work as follows: "Similar to many modern operating systems, IPv6 in FreeBSD was an optional feature that implied IPv4 support. Since most "IPv6-ready" applications rely on dual-stack behavior, broken IPv6 support often goes unnoticed given the IPv4 fallback option. Providing an implementation of an IPv6-only kernel without IPv4 support provides the FreeBSD Project with the ability to test and fix such regressions while encouraging other software developers to improve their code for true IPv6 readiness. With PC-BSD serving the desktop community and FreeBSD targeting the server, infrastructure and embedded markets, we have created an ideal development and test platform for other open source and proprietary IPv6-aware application software."

Kris Moore, founder and lead developer of the PC-BSD Project notes that "PC-BSD, with its FreeBSD base, makes an ideal platform for the testing of end-user desktop applications and utilities in an IPv6 environment. We are proud to be able to offer an IPv6 desktop testing environment for World IPv6 Day."

FreeBSD testing snapshots are available here and PC-BSD testing snapshots are available here.