NOM¶
ipv6 - Implémentation Linux du protocole IPv6
SYNOPSIS¶
#include <sys/socket.h>
#include <netinet/in.h>
tcp6_socket = socket(AF_INET6, SOCK_STREAM, 0);
raw6_socket = socket(AF_INET6, SOCK_RAW, protocole);
udp6_socket = socket(AF_INET6, SOCK_DGRAM,
protocole);
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.
Consultez
socket(7).
L'API IPv6 est conçue pour être essentiellement compatible avec
l'API IPv4 (consultez
ip(7)). 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 initialisations, on doit utiliser
IN6ADDR_LOOPBACK_INIT.
Les connexions IPv4 peuvent être traitées 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 prendre en charge les deux
protocoles. C’est géré de manière transparente par
les fonctions d'adressage de la bibliothèque C.
IPv4 et IPv6 partagent l'espace des ports locaux. Lorsqu'une connexion ou un
paquet IPv4 est obtenu sur une socket IPv6, son adresse source sera
projetée en v6.
struct sockaddr_in6 {
sa_family_t sin6_family; /* AF_INET6 */
in_port_t sin6_port; /* numéro de port */
uint32_t sin6_flowinfo; /* information de flux IPv6 */
struct in6_addr sin6_addr; /* adresse IPv6 */
uint32_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 (consultez
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 prend en charge que
pour les adresses locales lien, dans ce cas
sin6_scope_id contient le
numéro d'interface (consultez
netdevice(7)).
IPv6 prend en charge 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 8 nombres
hexadécimaux sur 4 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 de sockets¶
IPv6 accepte quelques options des sockets spécifiques du protocole, qui
peuvent être définies 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_ADDRFORM
- Transformer une socket AF_INET6 en une socket d'une famille
d'adresse différente. Seul AF_INET est actuellement pris en
charge 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_ADD_MEMBERSHIP, IPV6_DROP_MEMBERSHIP
- Déterminer l'appartenance aux groupes multicast. L'argument est un
pointeur sur une structure struct ipv6_mreq.
- IPV6_MTU
- getsockopt() : récupérer la MTU du chemin
actuellement déterminée pour la socket. Valable seulement
quand la socket a été connectée. Renvoie un entier.
setsockopt() : définir 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 du chemin sur la socket. Consultez l'option
IP_MTU_DISCOVER dans ip(7) pour plus de
précisions.
- IPV6_MULTICAST_HOPS
- Définir 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
- Définir le périphérique pour les paquets multicast
sortants de la socket. Ce n'est permis que pour les sockets
SOCK_DGRAM et SOCK_RAW. L'argument est un pointeur sur un
numéro d'interface (consultez netdevice(7)) dans un
entier.
- IPV6_MULTICAST_LOOP
- Déterminer 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_RECVPKTINFO (depuis Linux 2.6.14)
- Définir la distribution des messages de contrôle
IPV6_PKTINFO des datagrammes entrants. Ce type de messages de
contrôle contient une struct in6_pktinfo,
conformément à la RFC 3542. 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_DSTOPTS, IPV6_HOPOPTS, IPV6_FLOWINFO,
IPV6_HOPLIMIT
- Définir la distribution des messages de contrôle des
datagrammes entrants contenant les en-têtes d'extensions du paquet
reçu. 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 définies pour les paquets sortants en mettant le
message de contrôle approprié dans le tampon de
sendmsg(2). Uniquement autorisé pour les sockets
SOCK_DGRAM ou SOCK_RAW. L'argument est un pointeur sur une
valeur booléenne.
- IPV6_RECVERR
- Commander la réception des erreurs asynchrones. Consultez
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 « hop-by-hop » d'alerte
du routeur. Uniquement autorisé pour les sockets SOCK_RAW.
Les paquets exploités ne sont pas redirigés par le noyau, il
est de la responsabilité de l'utilisateur de les renvoyer.
L'argument est un pointeur vers un entier. Un entier positif indique une
valeur option d'alerte du routeur à intercepter. Les paquets
portant une option d'alerte du routeur avec un champ de valeur contenant
cet entier sera délivré à la socket. Un entier
négatif désactive la délivrance de packets avec des
options d'alerte du routeur à cette socket.
- IPV6_UNICAST_HOPS
- Définir 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_V6ONLY (depuis Linux 2.4.21 et 2.6)
- Quand cet attribut est positionné (différent de
zéro), alors la socket est limitée à
l'émission et la réception de paquets IPv6. Dans ce cas, une
application IPv4 et IPv6 peuvent s'associer à un même port
en même temps.
Si cet attribut n'est pas positionné (zéro), alors la socket
peut être utilisé pour émettre ou recevoir des
paquets depuis et vers une adresse IPv6 ou une projections d'adresse IPv4
sur IPv6.
Le paramètre est un pointeur vers un booléen dans un entier.
La valeur par défaut de cet attribut est défini par le contenu
du fichier /proc/sys/net/ipv6/bindv6only. La valeur par
défaut de ce fichier est 0 (désactivé).
ERREURS¶
- ENODEV
- L'utilisateur a essayé de lier avec bind(2) sur une adresse
locale lien IPv6, mais le sin6_scope_id de la structure
sockaddr_in6 fournie n'est pas un numéro d'interface
valable.
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
tampon d'adresse plus long et vérifient ensuite la longueur de
l'adresse renvoyée peuvent échouer.
NOTES¶
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
une prise en charge pratiquement complète des options de
réception, les macros déclarant les options IPv6 manquent dans
la glibc 2.1.
La prise en charge IPSec pour les en-têtes EH et AH manque.
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¶
cmsg(3),
ip(7)
RFC 2553 : API IPv6 de base, avec laquelle Linux essaye
d'être compatible. RFC 2460 : spécifications
d'IPv6.
COLOPHON¶
Cette page fait partie de la publication 3.65 du projet
man-pages Linux.
Une description du projet et des instructions pour signaler des anomalies
peuvent être trouvées à l'adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Christophe Blaess <
http://www.blaess.fr/christophe/> (1996-2003), Alain
Portal <
http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et
l'équipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet
manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce
document en utilisant la commande «
man -L C
<section>
<page_de_man> ».