summaryrefslogtreecommitdiff
path: root/hurd/translator/pfinet/ipv6.mdwn
blob: d864e2560d341080e7945b253cb6054700c868e0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
[[!meta copyright="Copyright © 2007, 2008, 2010, 2012, 2013 Free Software
Foundation, Inc."]]

[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the license
is included in the section entitled [[GNU Free Documentation
License|/fdl]]."]]"""]]

[[Stefan_Siegl|stesie]] 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|translator]] 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|active]]
on specified nodes, using **-4** and **-6** options.  This is, you have to
install a [[passive_translator|passive]] 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 /dev/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 /dev/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 /dev/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 /dev/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

[[!tag open_issue_hurd]]

Amongst other things, support for [[IOCTL]]s 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>
      https://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:)