IPV6
Section: Manuel de l'administrateur Linux (7) Updated: 25 juillet 2003 Index
NOM
SYNOPSIS
DESCRIPTION
FORMAT D'ADRESSE
OPTIONS DES SOCKETS
VERSIONS
NOTES DE PORTABILITÉ
BOGUES
VOIR AUSSI
TRADUCTION
NOM
ipv6, PF_INET6 - Implémentation Linux du protocole IPv6
SYNOPSIS
#include <sys/socket.h>
#include <netinet/in.h>
tcp6_socket = socket(PF_INET6, SOCK_STREAM, 0);
raw6_socket = socket(PF_INET6, SOCK_RAW, protocol);
udp6_socket = socket(PF_INET6, SOCK_DGRAM, protocol);
DESCRIPTION
Linux 2.2 implémente en option le protocole internet version 6 (IPv6).
Cette page de manuel contient la description de l'API IPv6 de base, telle
qu'implémentée dans le noyau Linux et la GlibC 2.1 L'interface est
basée sur l'interface des sockets BSD. Voir
socket(7).
L'API IPv6 est conçue pour être essentiellement compatible avec l'API
ip(7)
v4. Seules les différences sont décrites dans cette page de manuel.
pour attacher une socket
AF_INET6,
l'adresse locale doit être copiée dans une variable
in6addr_any
qui a le
type
in6_addr.
Dans les initialisations statiques,
IN6ADDR_ANY_INIT
peut servir aussi et se développe en une expression constante.
Toutes les valeurs sont dans l'ordre des octets du réseau.
L'adresse de boucle IPv6 (::1) est disponible dans la variable globale
in6addr_loopback.
Pour les initialisation, on doit
utiliser
IN6ADDR_LOOPBACK_INIT.
Les connexions IPv4 peuvent être traitée avec l'API v6 en utilisant le type d'adresse
v4-projeté-dans-v6. Ainsi un programme n'a qu'un seul type d'API à utiliser pour
supporter les deux protocoles. Ceci est géré de manière transparente par les fonctions
d'adressage de la LibC.
IPv4 et IPv6 partagent l'espace des ports locaux. Lorsqu'une connexion IPv4 ou un paquet
est obtenu sur une socket IPv6, son adresse source sera projetée
en v6.
FORMAT D'ADRESSE
-
struct sockaddr_in6 {
u_int16_t sin6_family;/* AF_INET6 */
u_int16_t sin6_port;/* numéro port */
u_int32_t sin6_flowinfo;/* information flux IPv6 */
struct in6_addr sin6_addr;/* adresse IPv6 */
u_int32_t sin6_scope_id; /* Scope id (nouveauté 2.4) */
};
struct in6_addr {
unsigned char s6_addr[16];/* adresse IPv6 */
};
sin6_family
est toujours rempli avec
AF_INET6 ;
sin6_port
est le port du protocole (voir
sin_port
dans
ip(7));
sin6_flowinfo
est l'identificateur de flux IPv6,
sin6_addr
est l'adresse IPv6 sur 128 bits.
sin6_scope_id
est un identificateur qui dépend de la portée de l'adresse. C'est une nouveauté Linux 2.4.
Linux ne le supporte que pour les adresse ayant une portée liaison, dans ce cas
sin6_scope_id
contient le numéro d'interface (voir
netdevice(7))
IPv6 supporte plusieurs types d'adresses : unicast pour représenter un hôte unique,
multicast pour un groupe d'hôtes, anycast pour indiquer le membre le plus proche d'un
groupe d'hôtes (non implémenté sous Linux), IPv4-on-IPv6 pour un hôte
IPv4, et d'autres types d'adresse réservés.
La notation d'adresse pour l'IPv6 est un groupe de 16 nombres hexadécimaux sur 2 chiffres,
séparés par un deux-points `:'. Un `::' représente une chaîne de zéros. Les adresses spéciales
sont ::1 pour le bouclage loopback et ::FFFF:<adresse IPv4> pour les projections d'adresses IPv4
sur l'IPv6.
L'espace des ports de l'IPv6 est partagé avec l'IPv4.
OPTIONS DES SOCKETS
IPv6 supporte quelques options des sockets spécifiques du protocole, qui peuvent être fixées avec
setsockopt(2)
et consultées avec
getsockopt(2).
Le niveau d'option de socket pour l'IPv6 est
IPPROTO_IPV6.
Un entier booléen est faux quand il est nul et vrai sinon.
- IPV6_UNICAST_HOPS
-
Fixe la limite du nombre de sauts (hops) unicast. L'argument est un pointeur sur un entier.
La valeur -1 correspond à la valeur par défaut de routage, sinon il doit s'agir
d'un entier entre 0 et 255.
- IPV6_MULTICAST_HOPS
-
Fixe la limite du nombre de sauts (hops) multicast. L'argument est un pointeur sur un entier.
La valeur -1 correspond à la valeur par défaut de routage, sinon il doit s'agir
d'un entier entre 0 et 255.
- IPV6_MULTICAST_IF
-
Fixe le périphérique pour les paquets multicasts sortants de la socket.
Ceci n'est permis
que pour les
sockets
SOCK_DGRAM
et
SOCK_RAW.
L'argument est un pointeur sur un numéro d'interface (voir
netdevice(7))
dans un entier.
- IPV6_ADDRFORM
-
Transformer une socket
AF_INET6
en une socket d'une famille d'adresse différente. Seul
AF_INET
est actuellement supporté pour cela. Cela n'est autorisé que pour les sockets
IPv6 connectées et attachées à une adresse v4-sur-v6. L'argument est un pointeur
sur un entier contenant
AF_INET.
Cela est utile pour passer des sockets projetées en v4 comme descripteurs à des
programmes ne sachant pas manipuler l'API IPv6.
- IPV6_PKTINFO
-
Fixe la distribution des messages de contrôle
IPV6_PKTINFO
des datagrammes entrants. Uniquement autorisé pour les sockets
SOCK_DGRAM
ou
SOCK_RAW.
L'argument est un pointeur sur une valeur booléenne dans un entier.
-
-
IPV6_RTHDR, IPV6_AUTHHDR, IPV6_DSTOPS, IPV6_HOPOPTS, IPV6_FLOWINFO, IPV6_HOPLIMIT
Fixe la distribution des messages de contrôle des datagrammes entrants contenant les
en-têtes d'extensions.
IPV6_RTHDR
délivre l'en-tête de routage,
IPV6_AUTHHDR
délivre l'en-tête d'authentification,
IPV6_DSTOPTS
délivre les options de destination,
IPV6_HOPOPTS
délivre les options de saut,
IPV6_FLOWINFO
délivre un entier contenant l'identificateur de flux,
IPV6_HOPLIMIT
délivre un entier contenant le nombre de sauts du paquet.
Les messages de contrôle ont le même type que l'option de socket. Toutes ces options
d'en-tête peuvent aussi être fixées pour les paquets sortants en mettant le message
de contrôle approprié dans le buffer de
sendmsg(2).
Uniquement autorisé pour les sockets
SOCK_DGRAM
ou
SOCK_RAW
L'argument est un pointeur sur une valeur booléenne.
- IPV6_MULTICAST_LOOP
-
Détermine si la socket voit les paquets multicast qu'elle a elle-même émis.
L'argument est un pointeur sur une valeur booléenne.
- IPV6_ADD_MEMBERSHIP, IPV6_DROP_MEMBERSHIP
-
Détermine l'appartenance aux groupes multicast. L'argument est un pointeur sur
une structure
structipv6_mreq.
- IPV6_MTU
-
Fixe le MTU à utiliser pour la socket. Le MTU est limité par celui du périphérique
ou celui du chemin lorsque la recherche du MTU par chemin est activée.
L'argument est un pointeur sur un entier.
- IPV6_MTU_DISCOVER
-
Commander la recherche du MTU par chemin sur la socket. Voir l'option
IP_MTU_DISCOVER
dans
ip(7)
pour plus de précisions.
- IPV6_RECVERR
-
Commande la réception des erreurs asynchrones. Voir
IP_RECVERR
dans
ip(7)
pour plus de précisions.
L'argument est un pointeur sur un booléen.
- IPV6_ROUTER_ALERT
-
Passer sur cette socket tous les paquets redirigés (forwarded) contenant une option d'alerte du routeur.
Uniquement autorisé pour les sockets datagrammes, et pour root. L'argument est un pointeur
vers un booléen.
VERSIONS
L'ancienne implémentation IPv6 pour Linux basée sur
libinet6
de la LibC5 n'est pas décrite ici, et peut être légèrement
différente.
Linux 2.4 rompt la compatibilité binaire pour la structure sockaddr_in6
des hôtes sur 64 bits, en modifiant l'alignement de
in6_addr
et en ajoutant un champ
sin6_scope_id
supplémentaire. Les interfaces du noyau restent compatible, mais un programme contenant
des sockaddr_in6 ou des in6_addr dans d'autres structures ne l'est peut être pas. Ce n'est
pas un problème pour les hôtes sur 32 bits comme les i386.
Le champ
sin6_flowinfo
est une nouveauté Linux 2.4. Il est écrit/lu de manière transparente par le noyau
quand la longueur de l'adresse passée le contient. Certains programmes qui passent
un buffer d'adresse plus long et vérifient ensuite la longueur de l'adresse renvoyée peuvent échouer.
NOTES DE PORTABILITÉ
La structure
sockaddr_in6
est plus grande que la structure
sockaddr
générique. Les programmes qui supposent que tous les types d'adresses peuvent être stockés dans une
struct sockaddr
doivent être modifiés pour utiliser
struct sockaddr_storage
à la place.
BOGUES
L'API IPv6 étendue, telle que dans la RFC 2292, n'est encore que partiellement implémentée.
Bien que les noyaux 2.2 ont un support pratiquement complet pour les options de réception,
les macros déclarant les options IPv6 manquent dans la GlibC 2.1.
Le support IPSec pour les en-têtes EH et AH est manquant.
La gestion des étiquettes de flux n'est pas complète, ni documentée ici.
Cette page de manuel n'est pas complète.
VOIR AUSSI
ip(7),
cmsg(3)
RFC2553: API IPv6 de base, avec laquelle Linux essaye d'être compatible.
RFC2460: Spécifications IPv6
TRADUCTION
Christophe Blaess, 2001-2003.
|