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. Ceci
  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
 
  - 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. Ceci 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.44 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> ».