Loading

NOM

       ipv6, AF_INET6 - 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, protocol);
       udp6_socket = socket(AF_INET6, SOCK_DGRAM, protocol);

       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
       IPv4 (voir 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 supporter 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.

   Format dadresse
           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   (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  adresses  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 de 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_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_ADD_MEMBERSHIP, IPV6_DROP_MEMBERSHIP
              Détermine  l’appartenance  aux groupes multicast. L’argument est
              un pointeur sur une structure struct ipv6_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_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_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_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  dextensions  du
              paquet   reçu.   IPV6_RTHDR   délivre   len-tête   de  routage,
              IPV6_AUTHHDR délivre len-tête dauthentification,  IPV6_DSTOPTS
              délivre  les  options  de  destination, IPV6_HOPOPTS délivre les
              options de  saut,  IPV6_FLOWINFO  délivre  un  entier  contenant
              lidentificateur   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  loption de socket. Toutes ces options
              den-tête peuvent aussi être fixées 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. Largument est un pointeur sur une valeur booléenne.

       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  « 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
              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_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é).

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

       cmsg(3), ip(7)

       RFC 2553:   API  IPv6  de  base,  avec  laquelle  Linux  essaye  d’être
       compatible.

       RFC 2460: Spécifications IPv6.

COLOPHON

       Cette page fait partie de  la  publication  3.23  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

       Cette  page  de  manuel  a  été  traduite et mise à jour par Christophe
       Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis  par
       Alain  Portal  <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
       francophone de traduction de Debian.

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