Re: [Admin] irc.uugrn.org per IPv6

Autor: Robert Schiele (rschiele_at_uni-mannheim.de)
Datum: 23. Nov 2003


On Sun, Nov 23, 2003 at 04:36:28AM +0100, Raphael H. Becker wrote:
> On Sun, Nov 23, 2003 at 12:31:21AM +0100, Christian Leber wrote:
> > On Sat, Nov 22, 2003 at 10:08:37PM +0100, Raphael H. Becker wrote:
> > > Vielleicht weiß hier jemand, was da bei OpenBSD faul ist und wie man das
> > > repariert?
> > Von http://bulk.fefe.de/scalability/:
> >
> > OpenBSD also caused a lot of grief on the IPv6 front. The OpenBSD guys
>
> Moment mal. Das geht mir hier jetzt eindeutig in eine zu
> religiös-fanatische Richtung ;)

Nein, es stimmt tatsaechlich.

> "intentionally broke their IPv6 stack to not allow IPv4 connections to
> and from IPv6 sockets"
>
> Bitte WIESO sollte sollte man v4 via v6 handlen? Meinem eher laienhaften
> Verständnis nach sind v4 und v6 eigentlich völlig getrennt zu
> betrachten, mal abgesehen davon, daß man die jeweiligen IP-Stacks
> durch- und miteinander tunneln kann.

Das steht halt so in rfc2553:

---
3.7 Compatibility with IPv4 Nodes
   The API also provides a different type of compatibility: the ability
   for IPv6 applications to interoperate with IPv4 applications.  This
   feature uses the IPv4-mapped IPv6 address format defined in the IPv6
   addressing architecture specification [2].  This address format
   allows the IPv4 address of an IPv4 node to be represented as an IPv6
   address.  The IPv4 address is encoded into the low-order 32 bits of
   the IPv6 address, and the high-order 96 bits hold the fixed prefix
   0:0:0:0:0:FFFF.  IPv4- mapped addresses are written as follows:
      ::FFFF:<IPv4-address>
   These addresses can be generated automatically by the
   getipnodebyname() function when the specified host has only IPv4
   addresses (as described in Section 6.1).
   Applications may use PF_INET6 sockets to open TCP connections to IPv4
   nodes, or send UDP packets to IPv4 nodes, by simply encoding the
   destination's IPv4 address as an IPv4-mapped IPv6 address, and
   passing that address, within a sockaddr_in6 structure, in the
   connect() or sendto() call.  When applications use PF_INET6 sockets
   to accept TCP connections from IPv4 nodes, or receive UDP packets
   from IPv4 nodes, the system returns the peer's address to the
   application in the accept(), recvfrom(), or getpeername() call using
   a sockaddr_in6 structure encoded this way.
   Few applications will likely need to know which type of node they are
   interoperating with.  However, for those applications that do need to
   know, the IN6_IS_ADDR_V4MAPPED() macro, defined in Section 6.7, is
   provided.
---
Ob das schlau ist, das so zu definieren, kann man sich natuerlich streiten.
Die Argumente in der OpenBSD-Dokumentation hoeren sich fuer mich letztlich wie
etwas chaotisches Rumgestammele an, welches die Entscheidung, vom Standard
abzuweichen, rechtfertigen soll. Also, wenn jemand das konkrete Problem
versteht, was die fuer unklares Verhalten bezeichnen, dann soll er mir das mal
erklaeren.
Die Idee der Standardisierung dieses Features ist ja ganz klar eine
Abstraktionsschicht zu erstellen, so dass sich eben _nicht_ jedes
Einzelprogramm darum kuemmern muss, wie die Verhaeltnisse auf der Maschine,
auf der es sich befindet, sind, sondern einfach sagen kann: Ich will alle
Verbindungen auf Port xyz. Ueber welchen Stack die geroutet werden kann dem
Programm doch erst mal egal sein. Wenn es ihm _nicht_ egal ist, gibt es dafuer
ja eigentlich das IN6_IS_ADDR_V4MAPPED() Makro, wie oben beschrieben.
> Ich hätte erwartet, daß ircd sich innerhalb der jeweiligen Adressfamilie
> gemäß seiner Konfiguration an entsprechende Sockets (v4 / v6) bindet,
> andere Software tut dies doch auch?
Und warum tut andere Software das? Vielleicht weil sie nicht-standardkonforme
Implementationen unterstuetzen wollen?
Robert
-- 
Robert Schiele			Tel.: +49-621-181-2517
Dipl.-Wirtsch.informatiker	mailto:rschiele_at_uni-mannheim.de



Dieses Archiv wurde generiert von hypermail 2.1.7 : 23. Nov 2003 CET