Provided by:
manpages-fr_1.67.0-1_all 
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.