Provided by: manpages-fr_1.67.0-1_all bug

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 DADRESSE
              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.