Stefan Siegl has added IPv6 support to the pfinet translator. This was GNU Savannah task #5470.

Implementation

Because the IPv4 and IPv6 protocols are quite related to each other (think of mapped IPv4 addresses, etc.), there is no separate server for IPv6 but support for the latter has been incorporated into the common pfinet. Unfortunately it's a little bit clumsy now to set the translator up, since it has to be bound to /servers/socket/2 (like before) as well as /servers/socket/26 (for IPv6).

To achieve this, you can tell pfinet to install ?active translators on specified nodes, using -4 and -6 options. This is, you have to install a ?passive translator on /servers/socket/2 that also binds the IPv6 port and vice versa.

Examples

Normal IPv4 network setup, address 192.168.7.23/24 and gateway 192.168.7.1. IPv6 address shall be assigned using IPv6 auto-configuration.

settrans -fgp /servers/socket/2 ↩
  /hurd/pfinet -6 /servers/socket/26 ↩
  -i eth0 -a 192.168.7.23 -m 255.255.255.0 -g 192.168.7.1
settrans -fgp /servers/socket/26 ↩
  /hurd/pfinet -4 /servers/socket/2 ↩
  -i eth0 -a 192.168.7.23 -m 255.255.255.0 -g 192.168.7.1

Quite the same, but with static IPv6 address assignment:

settrans -fgp /servers/socket/2 ↩
  /hurd/pfinet -6 /servers/socket/26 ↩
  -i eth0 -a 192.168.7.23 -m 255.255.255.0 -g 192.168.7.1 ↩
  -A 2001:4b88:10e4:0:216:3eff:feff:4223/64 -G 2001:4b88:10e4::1
settrans -fgp /servers/socket/26 ↩
  /hurd/pfinet -4 /servers/socket/2 ↩
  -i eth0 -a 192.168.7.23 -m 255.255.255.0 -g 192.168.7.1 ↩
  -A 2001:4b88:10e4:0:216:3eff:feff:4223/64 -G 2001:4b88:10e4::1

Missing Functionality

Amongst other things, support for ?IOCTLs is missing.

IRC, freenode, #hurd, 2012-12-12

<braunr> hm, pfinet seems not to support ipv6 well at all :(
<pinotree> braunr: really?
<braunr> pinotree: i can't manage to set a global address statically and
  make it communicate with neighbours
<braunr> pfinet receives the advertisement (during neighbour discovery) but
  immediately resends the same solicitation again
<gnu_srs> According to the pfinet/README IPv6 support was added in 2007
  from Linux 2.2.14 while the rest is from 2.2.12
<braunr> according to me, bugs were added at the same time
<braunr> :p
<braunr> in addition, ipv6 in linux 2.2 was, uh, not working well either
<braunr> even with 2.4, it was still messy
<gnu_srs> maybe we should try to upgrade the TCP/IP stack to something
  2.6+?
<gnu_srs> (a lot of work though)
<braunr> we've already had that discussion
<gnu_srs> Yes. What is the best way forward, a GSoC task? 
<gnu_srs> There is one already:
  http://www.gnu.org/software/hurd/community/gsoc/project_ideas/tcp_ip_stack.html
<braunr> personally, i'd advocate resuing code from netbsd

IRC, freenode, #hurd, 2013-02-23

<braunr> we're beginning to seriously lack ipv6 though
<youpi> what is the actual problem?
<youpi> (again)
<youpi> lack?
<youpi> we do have ipv6 working
<braunr> i couldn't have it work with public addresses
<youpi> uh?
<youpi> I believe it worked for me
<braunr> yes i told you a few months back
<gnu_srs> braunr reported recently that v6 did not work as expected?
<youpi> I don't remember about that (and my inbox neither)
<braunr> it was only on irc
<braunr> routing would be nice to have too
<braunr> the stack can do it but we lack the interface
<braunr> anyway, there would be benefits on working on it, but what we have
  now is fine and again, there are priorities
<youpi> braunr: it seems ndp doesn't work indeed, I wonder why, it was
  working for me
<braunr> that's what i found too
<braunr> there have been other additions to the ipv6 spec over time, i
  don't know what else we might be lacking 
<youpi> ndp is elder
<braunr> yes ndp isn't lacking
<youpi> and pfinet *does* actually do ndp :)
<braunr> that's a different issue
<braunr> my debugging session ended in the routing code
<braunr> and i didn't investigate further
<youpi> braunr: it seems the BPF filter on /dev/eth0 doesn't include IPv6
  frames
<youpi> that'd explain that it worked before but not any more
<braunr> oh
<braunr> good
<braunr> i'd love to assign global addresses to our VMs :)
<youpi> ok, it goes through, there is just a remaining multicast join issue
<youpi> yep, ethernet_set_multi is empty :)
<youpi> ok, enabling ALLMULTI was enough to fix it
<youpi> you can ping6 2001:910:1059:2:5054:00ff:fe12:3456 :)

Indeed, IPv6 now works properly, and the very machine hosting this wiki (darnassus.sceen.net) can be reached with that protocol.

IRC, freenode, #hurd, 2013-01-13

<youpi> gnu_srs, gnu_srs1: fyi, I'm having a look at cherry-picking the
  v6only  option from linux

IRC, freenode, #hurd, 2013-02-23

<gnu_srs> youpi: From when is the Linux
  524354b4d086a4f013343d727eaccb7b4c39eb25 commit (IPV6_V6ONLY)?
<youpi> which repo?
<youpi> I don't have such commit here
<gnu_srs>
  http://git.savannah.gnu.org/cgit/hurd/hurd.git/commit/?id=2b2d7fdc42475019e5ce3eabc9c9673e3c13d89f
<gnu_srs> From which release, 2.4.x, 2.6.x?
<youpi> it's very old
<youpi> 2002
<youpi> it's not in the current linux git tree, but in the "history" tree
<youpi> I don't remember its url
<braunr> git://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git
<braunr> might be even older

IRC, freenode, #hurd, 2013-04-01

<congzhan`> hi, the ipv6 route works or not?
<congzhan`> I can use ipv6 to connect vms, but the vm can't access other
  host except the router
<congzhan`> the ipv6 route -G seems not work for me, anyone make it work?
<youpi> I'm using SLAAC
<congzhan`> youpi: you mean static config not work?
<youpi> I mean automatic config does work
<youpi> I don't use static config myself
<congzhang> youpi: My ipv6 works now, just because not fully enable ipv6
  forwarding and firewall, thank you:)