Man page - ip(7)

Packages contains this manual

Available languages:

en fr es pl ja zh_TW zh_CN

Manual

ip

NOM
SYNOPSIS
DESCRIPTION
Formats d’adresse
Adresses spéciales et réservées
Options de socket
/proc interfaces
Ioctls
ERREURS
NOTES
Compatibilité
BOGUES
VOIR AUSSI
TRADUCTION

NOM

ip – ImplĂ©mentation Linux du protocole IPv4

SYNOPSIS

#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
/* Surensemble des précédents */

tcp_socket = socket(AF_INET, SOCK_STREAM, 0);
udp_socket
= socket(AF_INET, SOCK_DGRAM, 0);
raw_socket
= socket(AF_INET, SOCK_RAW, protocole );

DESCRIPTION

Linux implémente le protocole Internet (IP) version 4 décrit dans les RFC 791 et RFC 1122. ip contient une implémentation de la diffusion multiple niveau 2 conforme à la RFC 1112. Cette implémentation inclut un routeur IP comprenant un filtre de paquets.

L’interface de programmation est compatible avec les sockets BSD. Pour plus d’informations sur les sockets, consultez socket (7).

Un socket IP est créé en utilisant socket (2) :

socket(AF_INET, type_socket, protocole);

Les sockets autorisés incluent SOCK_STREAM pour ouvrir un socket flux, SOCK_DGRAM pour ouvrir un socket datagramme et SOCK_RAW pour ouvrir un socket raw (7) pour accéder directement au protocole IP.

protocole est le protocole IP dans les en-tĂȘtes IP reçus ou envoyĂ©s. Les valeurs autorisĂ©es pour protocole incluent :

-

0 et IPPROTO_TCP pour les sockets flux tcp (7) ;

-

0 et IPPROTO_UDP pour les sockets datagramme udp (7) ;

-

IPPROTO_SCTP pour les sockets flux sctp (7) ;

-

IPPROTO_UDPLITE pour les sockets datagramme udplite (7).

Pour SOCK_RAW un protocole IP IANA autorisĂ©, dĂ©fini dans les numĂ©ros assignĂ©s de la RFC 1700, peut ĂȘtre indiquĂ©.

Lorsqu’un processus veut recevoir de nouveaux paquets entrants ou des connexions, il doit attacher un socket Ă  une adresse d’interface locale en utilisant bind (2). Un seul socket IP peut ĂȘtre attachĂ© Ă  une paire (adresse, port) locale donnĂ©e. Lorsque INADDR_ANY est indiquĂ© au moment de l’attachement, le socket sera affectĂ© Ă  toutes les interfaces locales. Si listen (2) est appelĂ©e sur un socket non affectĂ©, celui-ci est automatiquement attachĂ© Ă  un port libre alĂ©atoire, avec l’adresse locale dĂ©finie Ă  INADDR_ANY . Si connect (2) est appelĂ©e sur un socket non affectĂ©, celui-ci est automatiquement attachĂ© Ă  un port libre alĂ©atoire ou un port partagĂ© utilisable avec l’adresse locale dĂ©finie Ă  INADDR_ANY .

L’adresse locale d’un socket TCP qui a Ă©tĂ© attachĂ© est indisponible pendant quelques instants aprĂšs sa fermeture, Ă  moins que l’attribut SO_REUSEADDR ait Ă©tĂ© activĂ©. Il faut ĂȘtre prudent en utilisant cet attribut, car il rend le protocole TCP moins fiable.

Formats d’adresse

Une adresse de socket IP est dĂ©finie comme la combinaison d’une adresse IP d’interface et d’un numĂ©ro de port de 16 bits. Le protocole IP de base ne fournit pas de numĂ©ros de port, ils sont implĂ©mentĂ©s par les protocoles de plus haut niveau comme udp (7) et tcp (7). Sur les sockets raw, le champ sin_port contient le protocole IP.

struct sockaddr_in {
sa_family_t sin_family; /* Famille d’adresses : AF_INET */
in_port_t sin_port; /* Port dans l’ordre des
octets du réseau */
struct in_addr sin_addr; /* Adresse Internet */
};
/* Adresse Internet */
struct in_addr {
uint32_t s_addr; /* adresse dans l’ordre des
octets du réseau */
};

sin_family est toujours dĂ©fini Ă  AF_INET . C’est indispensable : sous Linux 2.2, la plupart des fonctions rĂ©seau renvoient EINVAL lorsque cette dĂ©finition est absente. sin_port contient le numĂ©ro de port, dans l’ordre des octets du rĂ©seau. Les numĂ©ros de ports infĂ©rieurs Ă  1024 sont dits privilĂ©giĂ©s (ou parfois rĂ©servĂ©s ). Seuls les processus privilĂ©giĂ©s (sur Linux, ceux qui ont la capacitĂ© CAP_NET_BIND_SERVICE dans l’espace de noms utilisateur gouvernant son espace de noms rĂ©seau) peuvent appeler bind (2) pour ces sockets. Le protocole IPv4 brut en tant que tel n’a pas le concept de ports, ceux-ci Ă©tant seulement implĂ©mentĂ©s par des protocoles de plus haut niveau comme tcp (7) et udp (7).

sin_addr est l’adresse IP de l’hĂŽte. Le membre s_addr de la structure in_addr contient l’adresse de l’interface de l’hĂŽte, dans l’ordre des octets du rĂ©seau. in_addr devrait recevoir l’une des valeurs INADDR_ * (par exemple, INADDR_LOOPBACK ) en utilisant htonl (3) ou ĂȘtre dĂ©fini Ă  l’aide des fonctions de bibliothĂšque inet_aton (3), inet_addr (3), inet_makeaddr (3) ou directement par le systĂšme de rĂ©solution des noms (consultez gethostbyname (3)).

Les adresses IPv4 sont divisĂ©es en adresses de diffusion individuelle (unicast), de diffusion gĂ©nĂ©rale (broadcast) et de diffusion multiple (multicast). Les adresses de diffusion individuelle dĂ©crivent une interface unique d’un hĂŽte, les adresses de diffusion gĂ©nĂ©rale correspondent Ă  tous les hĂŽtes d’un rĂ©seau et les adresses de diffusion multiple reprĂ©sentent tous les hĂŽtes d’un groupe de diffusion multiple. Les datagrammes vers des adresses de diffusion gĂ©nĂ©rale ne peuvent ĂȘtre Ă©mis et reçus que si l’attribut de socket SO_BROADCAST est activĂ©. Dans l’implĂ©mentation actuelle, les sockets orientĂ©s connexion ne sont autorisĂ©s que sur des adresses de diffusion individuelle.

Remarquez que l’adresse et le port sont toujours stockĂ©s dans l’ordre des octets du rĂ©seau. Cela signifie en particulier qu’il faut invoquer htons (3) sur le numĂ©ro attribuĂ© Ă  un port. Toutes les fonctions de manipulation d’adresses et de ports de la bibliothĂšque standard fonctionnent dans l’ordre des octets du rĂ©seau.

Adresses spéciales et réservées

Il y a plusieurs adresses spéciales :
INADDR_LOOPBACK
(127.0.0.1)

fait toujours rĂ©fĂ©rence Ă  l’hĂŽte local Ă  l’aide du pĂ©riphĂ©rique de rebouclage (loopback) ;

INADDR_ANY (0.0.0.0)

signifie n’importe quelle adresse pour l’attachement de socket ;

INADDR_BROADCAST (255.255.255.255)

a le mĂȘme effet que INADDR_ANY sur bind (2) pour des raisons historiques. Un paquet adressĂ© Ă  INADDR_BROADCAST Ă  travers un socket ayant SO_BROADCAST dĂ©fini sera diffusĂ© Ă  tous les hĂŽtes du segment du rĂ©seau local, aussi longtemps que la liaison sera en capacitĂ© de diffusion gĂ©nĂ©rale (broadcast).

NumĂ©ro d’adresse le plus haut
NumĂ©ro d’adresse le plus bas

Sur tout sous-rĂ©seau IP non point-Ă -point localement attachĂ© avec une liaison du type qui gĂšre la diffusion gĂ©nĂ©rale (broadcast), l’adresse avec la numĂ©rotation la plus Ă©levĂ©e (par exemple, l’adresse 255 sur un sous-rĂ©seau avec un masque de rĂ©seau 255.255.255.0) est dĂ©signĂ©e comme adresse de broadcast. Elle ne peut pas ĂȘtre assignĂ©e de maniĂšre utile Ă  une interface individuelle et ne peut ĂȘtre adressĂ©e qu’avec un socket avec l’option SO_BROADCAST dĂ©finie. Les normes d’Internet ont aussi historiquement rĂ©servĂ© l’adresse avec le numĂ©ro le plus bas (par exemple, l’adresse 0 d’un sous-rĂ©seau avec un masque rĂ©seau 255.255.255.0) pour le broadcast, bien qu’elles la qualifient d’« obsolĂšte » pour cette fonction (quelques sources l’appellent aussi « adresse rĂ©seau »). Depuis Linux 5.14, elle est considĂ©rĂ©e comme une adresse ordinaire de diffusion unique (unicast) et peut ĂȘtre assignĂ©e Ă  une interface.

Les normes d’Internet ont traditionnellement rĂ©servĂ© aussi diverses adresses pour des usages particuliers, bien que Linux ne traite plus certaines d’entre elles spĂ©cialement.
[0.0.0.1, 0.255.255.255]
[240.0.0.0, 255.255.255.254]

Les adresses dans ces plages (0/8 et 240/4) sont rĂ©servĂ©es globalement. Depuis Linux 5.3 et Linux 2.6.25, respectivement, les adresses 0/8 et 240/4, autres que INADDR_ANY et INADDR_BROADCAST sont traitĂ©es comme des adresses unicast ordinaires. Les systĂšmes qui suivent le comportement traditionnel n’interagiront pas avec ces adresses historiquement rĂ©servĂ©es.

[127.0.0.1, 127.255.255.254]

Les adresses dans cette plage (127/8) sont traitĂ©es comme des adresses de rebouclage (loopback) semblables Ă  l’adresse standardisĂ©e de rebouclage locale INADDR_LOOPBACK (127.0.0.1) ;

[224.0.0.0, 239.255.255.255]

Les adresses dans cette plage (224/4) sont dédiées à un usage de diffusion multiple (multicast).

Options de socket

IP gĂšre quelques options de sockets spĂ©cifiques au protocole qui peuvent ĂȘtre dĂ©finies avec setsockopt (2) et consultĂ©es avec getsockopt (2). Le niveau d’option de sockets pour IP est IPPROTO_IP . Un attribut entier boolĂ©en est faux quand il vaut zĂ©ro et vrai sinon.

Quand une option non autorisĂ©e de socket est spĂ©cifiĂ©e, getsockopt (2) et setsockopt (2) Ă©chouent avec l’erreur ENOPROTOOPT .
IP_ADD_MEMBERSHIP
(depuis Linux 1.2)

Rejoindre un groupe de diffusion multiple. L’argument est une structure ip_mreqn .

struct ip_mreqn {
struct in_addr imr_multiaddr; /* Adresse IP du groupe
de diffusion multiple */
struct in_addr imr_address; /* Adresse IP de
l’interface locale */
int imr_ifindex; /* NumĂ©ro d’interface */
};

imr_multiaddr contient l’adresse du groupe de diffusion multiple que l’application veut rejoindre ou quitter. Il doit s’agir d’une adresse de diffusion multiple valable (sinon setsockopt (2) Ă©choue avec l’erreur EINVAL ). imr_address est l’adresse de l’interface locale avec laquelle le systĂšme doit joindre le groupe de diffusion multiple. Si elle est Ă©gale Ă  INADDR_ANY , une interface appropriĂ©e est choisie par le systĂšme. imr_ifindex est le numĂ©ro de l’interface qui doit rejoindre ou quitter le groupe imr_multiaddr , ou zĂ©ro pour indiquer n’importe quelle interface.

La structure ip_mreqn n’est disponible que depuis Linux 2.2. Pour la compatibilitĂ©, l’ancienne structure ip_mreq (prĂ©sente depuis Linux 1.2) est encore gĂ©rĂ©e. Elle ne diffĂšre de ip_mreqn que par l’absence du champ imr_ifindex . Le noyau dĂ©termine quelle structure est passĂ©e en se basant sur la taille passĂ©e Ă  optlen .

IP_ADD_MEMBERSHIP est autorisé seulement pour setsockopt (2).

IP_ADD_SOURCE_MEMBERSHIP (depuis Linux 2.4.22/2.5.68)

Rejoindre un groupe de diffusion multiple et autoriser la rĂ©ception de donnĂ©es uniquement depuis une source indiquĂ©e. L’argument est une structure ip_mreq_source .

struct ip_mreq_source {
struct in_addr imr_multiaddr; /* Adresse IP du groupe
de diffusion multiple */
struct in_addr imr_interface; /* Adresse IP de
l’interface locale */
struct in_addr imr_sourceaddr; /* Adresse IP de la source
de diffusion multiple */
};

La structure ip_mreq_source est similaire Ă  ip_mreqn dĂ©crite sous IP_ADD_MEMBERSIP . Le champ imr_multiaddr contient l’adresse du groupe de diffusion multiple que l’application veut rejoindre ou quitter. Le champ imr_interface est l’adresse de l’interface locale avec laquelle le systĂšme doit rejoindre le groupe de diffusion multiple. Le champ imr_sourceaddr contient l’adresse de la source depuis laquelle l’application veut recevoir des donnĂ©es.

Cette option peut ĂȘtre utilisĂ©e plusieurs fois pour autoriser la rĂ©ception depuis plusieurs sources.

IP_BIND_ADDRESS_NO_PORT (depuis Linux 4.2)

Informer le noyau de ne pas rĂ©server un port Ă©phĂ©mĂšre lors de l’utilisation de bind (2) avec un numĂ©ro de port Ă©gal Ă  zĂ©ro. Le port sera choisi plus tard automatiquement au moment de connect (2) de façon Ă  permettre de partager un port source aussi longtemps que le quadruplet est unique.

IP_BLOCK_SOURCE (depuis Linux 2.4.22 et 2.5.68)

Bloquer la rĂ©ception de donnĂ©es en diffusion multiple depuis une source spĂ©cifique pour un groupe donnĂ©. Cela n’est possible qu’aprĂšs que l’application s’est abonnĂ©e au groupe de diffusion multiple en utilisant IP_ADD_MEMBERSHIP ou IP_ADD_SOURCE_MEMBERSHIP .

L’argument est une structure ip_mreq_source comme dĂ©crite pour IP_ADD_SOURCE_MEMBERSHIP .

IP_DROP_MEMBERSHIP (depuis Linux 1.2)

Quitter un groupe de diffusion multiple. L’argument est une structure ip_mreqn ou ip_mreq similaire à IP_ADD_MEMBERSHIP .

IP_DROP_SOURCE_MEMBERSHIP (since Linux 2.4.22 et 2.5.68)

Quitter un groupe spĂ©cifique Ă  une source, c’est-Ă -dire arrĂȘter de recevoir des donnĂ©es depuis une source donnĂ©e pour un groupe de multidiffusion donnĂ©. Si l’application est abonnĂ©e Ă  d’autres sources du mĂȘme groupe, les donnĂ©es des sources restantes seront toujours transmises. Pour simultanĂ©ment couper la rĂ©ception depuis toutes les sources, utilisez IP_DROP_MEMBERSHIP .

L’argument est une structure ip_mreq_source comme dĂ©crite pour IP_ADD_SOURCE_MEMBERSHIP .

IP_FREEBIND (depuis Linux 2.4)

Si cette option est activĂ©e, cet attribut boolĂ©en permet l’attachement Ă  une adresse IP non locale ou qui n’existe pas (encore). Cela permet d’écouter sur un socket, sans que l’interface rĂ©seau sous-jacente ou l’adresse IP dynamique indiquĂ©e ne soit opĂ©rationnelle au moment oĂč l’application essaie de s’y attacher. Cette option est l’équivalent spĂ©cifique au socket de l’interface ip_nonlocal_bind de /proc dĂ©crite plus bas.

IP_HDRINCL (depuis Linux 2.0)

Si cette option est activĂ©e, l’utilisateur fournit un en-tĂȘte IP avant les donnĂ©es utilisateur. Cette option n’est valable que pour les sockets SOCK_RAW . Consultez raw (7) pour plus de dĂ©tails. Lorsque cet attribut est activĂ©, les valeurs dĂ©finies pour IP_OPTIONS , IP_TTL et IP_TOS sont ignorĂ©es.

IP_LOCAL_PORT_RANGE (depuis Linux 6.3)

DĂ©finir ou obtenir la plage de ports locale par dĂ©faut par socket. Cette option peut ĂȘtre utilisĂ©e pour resserrer la plage globale de ports locaux, dĂ©finie par l’interface /proc ip_local_port_range dĂ©crite ci-dessous, pour un socket donnĂ©.

L’option prend une valeur uint32_t avec les 16 bits hauts rĂ©glĂ©s sur la limite supĂ©rieure de la plage, et les 16 bits bas rĂ©glĂ©s sur la limite la plus basse de la plage. Les limites de la plage sont inclusives. Les valeurs sur 16 bits doivent ĂȘtre dans l’ordre des octets de l’hĂŽte.

La limite basse doit ĂȘtre infĂ©rieure Ă  la limite haute lorsque les deux limites sont diffĂ©rentes de zĂ©ro. Sinon, rĂ©gler l’option Ă©choue avec EINVAL .

Si chaque limite est en dehors de la plage globale de ports locaux, ou est Ă©gale Ă  zĂ©ro, cette limite n’a aucun effet.

Pour réinitialiser les réglages, passez les limites supérieure et inférieure à zéro.

IP_MSFILTER (depuis Linux 2.4.22 et 2.5.68)

Cette option permet d’accĂ©der Ă  l’API de filtrage d’états avancĂ©e. L’argument est une structure ip_msfilter .

struct ip_msfilter {
struct in_addr imsf_multiaddr; /* Adresse IP du groupe
de diffusion multiple */
struct in_addr imsf_interface; /* Adresse IP de
l’interface locale */
uint32_t imsf_fmode; /* Mode filtre/
uint32_t imsf_numsrc; /* Nombre de sources dans
le tableau suivant */
struct in_addr imsf_slist[1]; /* Tableau d’adresses
source */
};

Les deux macros MCAST_INCLUDE et MCAST_EXCLUDE permettent d’identifier le mode de filtrage. De plus, la macro IP_MSFILTER_SIZE (n) permet de dĂ©terminer la quantitĂ© de mĂ©moire nĂ©cessaire pour stocker une structure ip_msfilter contenant n sources.

Pour une description complÚte du filtrage des sources de diffusion multiple, consultez la RFC 3376.

IP_MTU (depuis Linux 2.2)

RĂ©cupĂ©rer la MTU du chemin actuellement dĂ©terminĂ©e pour le socket. Renvoi d’un entier.

IP_MTU est valable seulement pour getsockopt (2) et peut ĂȘtre seulement employĂ© quand le socket est connectĂ©.

IP_MTU_DISCOVER (depuis Linux 2.2)

DĂ©finir ou rĂ©cupĂ©rer la dĂ©finition de dĂ©couverte de MTU de chemin (Path MTU discovery — PMTUd) pour un socket. Lorsqu’elle est activĂ©e, Linux effectuera la dĂ©couverte de la MTU d’un chemin conformĂ©ment Ă  la RFC 1191 sur les sockets SOCK_STREAM . Pour les sockets autres que SOCK_STREAM , IP_PMTUDISC_DO force l’activation de l’attribut interdisant la fragmentation sur tous les paquets sortants (bit DF — Don’t Fragment). L’utilisateur est responsable de l’empaquetage des donnĂ©es dans des blocs infĂ©rieurs Ă  la MTU et doit assurer la retransmission si besoin. Le noyau rejettera (avec l’erreur EMSGSIZE ) les datagrammes qui sont plus gros que la MTU du chemin dĂ©terminĂ©e. IP_PMTUDISC_WANT fragmentera un datagramme si nĂ©cessaire d’aprĂšs la MTU du chemin, ou sinon activera l’attribut interdisant la fragmentation.

Les valeurs par dĂ©faut du systĂšme peuvent ĂȘtre basculĂ©es entre IP_PMTUDISC_WANT et IP_PMTUDISC_DONT en Ă©crivant (respectivement la valeur zĂ©ro et une valeur diffĂ©rente de zĂ©ro) dans le fichier /proc/sys/net/ipv4/ip_no_pmtu_disc .

Image grohtml-3850594-1.png

Lorsque la dĂ©couverte de la MTU de chemin est activĂ©e, le noyau garde automatiquement une trace des MTU de chemin par hĂŽte de destination. Lorsqu’il est connectĂ© Ă  un correspondant spĂ©cifique avec connect (2), la MTU du chemin actuel dĂ©terminĂ©e peut ĂȘtre consultĂ©e en utilisant l’option IP_MTU du socket (par exemple, si une erreur EMSGSIZE se produit). La MTU de chemin peut changer au cours du temps. Pour les sockets sans connexion avec plusieurs destinations, la nouvelle MTU pour une destination donnĂ©e peut Ă©galement ĂȘtre obtenue en utilisant la file d’erreurs (consultez IP_RECVERR ). Une nouvelle erreur sera mise en file d’attente pour chaque mise Ă  jour de la MTU.

Durant la recherche de la MTU, les paquets initiaux des sockets datagramme peuvent ĂȘtre perdus. Les applications utilisant UDP doivent en ĂȘtre informĂ©es et ne pas en tenir compte dans leur stratĂ©gie de retransmission de paquet.

Pour dĂ©marrer le processus de recherche de la MTU du chemin sur les sockets non connectĂ©s, il est possible de dĂ©marrer avec une grande taille de datagramme (jusqu’à 64 ko d’en-tĂȘte) et la diminuer au fur et Ă  mesure des mises Ă  jours de la MTU du chemin.

Afin d’obtenir une estimation initiale de la MTU du chemin, il faut connecter un socket datagramme à l’adresse de destination en utilisant connect (2) et consulter la MTU en appelant getsockopt (2) avec l’option IP_MTU .

Il est possible d’implĂ©menter la RFC 4821 pour les recherches de MTU avec des sockets SOCK_DGRAM ou SOCK_RAW en utilisant la valeur IP_PMTUDISC_PROBE (disponible depuis Linux 2.6.22). C’est aussi particuliĂšrement utile pour les outils de diagnostic comme tracepath (8) qui veulent dĂ©libĂ©rĂ©ment envoyer des paquets sonde plus larges que la MTU observĂ©e du chemin.

IP_MULTICAST_ALL (depuis Linux 2.6.31)

Cette option peut ĂȘtre utilisĂ©e pour modifier la politique de distribution des messages de diffusion multiple. Ce paramĂštre est un entier boolĂ©en (par dĂ©faut à 1). Si ce dernier est à 1, le socket recevra les messages de tous les groupes qui ont Ă©tĂ© joints globalement par tout le systĂšme. Sinon, seuls seront distribuĂ©s les messages des groupes auxquels le socket s’est explicitement joint (par exemple en utilisant l’option IP_ADD_MEMBERSHIP sur ce socket particulier).

IP_MULTICAST_IF (depuis Linux 1.2)

RĂ©gler le pĂ©riphĂ©rique local pour un socket de diffusion multiple. L’argument pour setsockopt (2) est une structure ip_mreqn ou (depuis Linux 3.5) ip_mreq similaire Ă  IP_ADD_MEMBERSHIP , ou une structure in_addr . Le noyau dĂ©termine quelle structure est passĂ©e en se basant sur la taille passĂ©e dans optlen . Pour getsockopt (2), l’argument est une structure in_addr .

IP_MULTICAST_LOOP (depuis Linux 1.2)

DĂ©finir ou lire un entier boolĂ©en indiquant si les paquets de diffusion multiple doivent ĂȘtre renvoyĂ©s aux sockets locaux.

IP_MULTICAST_TTL (depuis Linux 1.2)

DĂ©finir ou lire la valeur du champ Time-to-Live des paquets de diffusion multiple sortants sur ce socket. Il est trĂšs important pour les paquets de diffusion multiple de dĂ©finir ce champ le plus petit possible. La valeur par dĂ©faut est 1, ce qui signifie que les paquets de diffusion multiple ne quittent pas le rĂ©seau local Ă  moins que le programme de l’utilisateur ne le rĂ©clame explicitement. L’argument est un entier.

IP_NODEFRAG (depuis Linux 2.6.36)

Si activĂ© (argument diffĂ©rent de zĂ©ro), le rĂ©assemblage des paquets sortants est dĂ©sactivĂ© dans la couche netfilter. L’argument est un entier.

Cette option est valable seulement pour les sockets SOCK_RAW .

IP_OPTIONS (depuis Linux 2.0)

DĂ©finir ou lire les options IP Ă  envoyer avec chaque paquet de ce socket. Les arguments sont un pointeur sur un tampon mĂ©moire contenant les options et la longueur des options. L’appel Ă  setsockopt (2) dĂ©finit les options IP associĂ©es Ă  un socket. La taille maximale des options pour IPv4 vaut 40 octets. Consultez la RFC 791 pour les options autorisĂ©es. Lorsque le paquet de requĂȘte de connexion initiale d’un socket SOCK_STREAM contient des options IP, celles-ci seront automatiquement rĂ©glĂ©es aux options du paquet initial avec les en-tĂȘtes de routage inversĂ©s. Les paquets entrants ne peuvent pas modifier les options aprĂšs que la connexion a Ă©tĂ© Ă©tablie. Le traitement des options de routage des paquets entrants est dĂ©sactivĂ© par dĂ©faut et peut ĂȘtre activĂ© en utilisant l’interface accept_source_route de /proc . Les autres options, comme les horodatages, sont toujours traitĂ©es. Pour les sockets datagramme, les options IP ne peuvent ĂȘtre dĂ©finies que par l’utilisateur local. L’appel de getsockopt (2) avec IP_OPTIONS remplit le tampon fourni avec les options IP actuelles.

IP_PASSSEC (depuis Linux 2.6.17)

Si Labeled IPsec ou si NetLabel est configurĂ© sur les hĂŽtes Ă©metteur et rĂ©cepteur, cette option autorise la rĂ©ception du contexte de sĂ©curitĂ© du socket pair dans un message de service de type SCM_SECURITY rĂ©cupĂ©rĂ© en utilisant recvmsg (2). Cette option est uniquement gĂ©rĂ©e pour les sockets UDP. Pour les sockets TCP ou SCTP, consultez la description de l’option SO_PEERSEC ci-dessous.

La valeur donnée comme argument pour setsockopt (2) et renvoyée comme résultat de getsockopt (2) est un indicateur booléen entier.

Le contexte de sĂ©curitĂ© renvoyĂ© dans le message de service SCM_SECURITY est du mĂȘme format que celui dĂ©crit dans l’option SO_PEERSEC ci-dessous.

Remarque : la rĂ©utilisation du type SCM_SECURITY de message pour l’option de socket IP_PASSSEC Ă©tait probablement une erreur, puisque d’autres messages de contrĂŽle IP utilisent leur propre schĂ©ma de numĂ©rotation dans l’espace de noms IP et utilisent la valeur d’option de socket comme type de message. Il n’y a pas de conflit actuellement puisque l’option IP avec la mĂȘme valeur que SCM_SECURITY est IP_HDRINCL et cela n’est jamais utilisĂ© pour un type de message de contrĂŽle.

IP_PKTINFO (depuis Linux 2.2)

Fournir un message IP_PKTINFO de service qui contient une structure pktinfo fournissant quelques informations sur le paquet entrant. Cela ne fonctionne que pour les sockets orientĂ©s datagramme. L’argument est un attribut indiquant au socket si le message IP_PKTINFO doit ĂȘtre passĂ© ou non. Le message lui-mĂȘme ne peut ĂȘtre Ă©crit ou lu que comme message de contrĂŽle avec un paquet en utilisant recvmsg (2) ou sendmsg (2).

struct in_pktinfo {
unsigned int ipi_ifindex; /* NumĂ©ro d’interface */
struct in_addr ipi_spec_dst; /* Adresse locale */
struct in_addr ipi_addr; /* Adresse de destination
dans l’en-tĂȘte*/
};

ipi_ifindex est le numĂ©ro unique de l’interface sur laquelle le paquet a Ă©tĂ© reçu. ipi_spec_dst est l’adresse locale du paquet et ipi_addr est l’adresse de destination dans l’en-tĂȘte du paquet. Si IP_PKTINFO est passĂ© Ă  sendmsg (2) et ipi_spec_dst est diffĂ©rent de zĂ©ro, alors il sera utilisĂ© comme adresse source pour la recherche dans la table de routage et pour dĂ©finir les options de routage IP. Si ipi_ifindex est diffĂ©rent de zĂ©ro, l’adresse locale principale de l’interface indiquĂ©e par ce numĂ©ro remplace ipi_spec_dst pour la recherche dans la table de routage.

Non pris en charge par les sockets SOCK_STREAM .

IP_RECVERR (depuis Linux 2.2)

Activer le passage amĂ©liorĂ© des messages d’erreur. Lorsque cette option est activĂ©e pour un socket datagramme, toutes les erreurs gĂ©nĂ©rĂ©es seront envoyĂ©es dans une file d’erreurs propre au socket. Quand l’utilisateur dĂ©tecte une erreur d’opĂ©ration sur le socket, celle-ci peut ĂȘtre examinĂ©e en invoquant recvmsg (2) avec l’attribut MSG_ERRQUEUE dĂ©fini. La structure sock_extended_err dĂ©crivant l’erreur sera passĂ©e comme message de service ayant le type IP_RECVERR et le niveau IPPROTO_IP . Cela permet une gestion d’erreur fiable sur les sockets non connectĂ©s. La partie comprenant les donnĂ©es reçues de la file d’erreurs contient le paquet ayant rencontrĂ© un problĂšme.

Le message de contrĂŽle IP_RECVERR contient une structure sock_extended_err :

#define SO_EE_ORIGIN_NONE 0
#define SO_EE_ORIGIN_LOCAL 1
#define SO_EE_ORIGIN_ICMP 2
#define SO_EE_ORIGIN_ICMP6 3
struct sock_extended_err {
uint32_t ee_errno; /* NumĂ©ro d’erreur */
uint8_t ee_origin; /* Origine de l’erreur */
uint8_t ee_type; /* Type */
uint8_t ee_code; /* Code */
uint8_t ee_pad;
uint32_t ee_info; /* Informations supplémentaires */
uint32_t ee_data; /* Autres données */
/* D’autres donnĂ©es possibles */
};
struct sockaddr *SO_EE_OFFENDER(struct sock_extended_err *);

ee_errno contient le numĂ©ro de l’erreur errno mise en file d’attente. ee_origin est le code de l’origine de l’erreur. Les autres champs sont spĂ©cifiques au protocole. La macro SO_EE_OFFENDER renvoie un pointeur sur l’adresse d’un objet rĂ©seau d’oĂč l’erreur provient en prenant en argument un pointeur sur le message de service. Si cette adresse n’est pas connue, le membre sa_family de la structure sockaddr contient AF_UNSPEC et les autres champs de sockaddr ne sont pas dĂ©finis.

IP utilise la structure sock_extended_err comme suit : ee_origin contient SO_EE_ORIGIN_ICMP pour les erreurs reçues sous forme de paquet ICMP ou SO_EE_ORIGIN_LOCAL pour les erreurs locales. Les valeurs inconnues doivent ĂȘtre ignorĂ©es. ee_type et ee_code sont dĂ©finis Ă  partir des champs type et code de l’en-tĂȘte ICMP. ee_info contient la MTU dĂ©terminĂ©e pour les erreurs EMSGSIZE . Le message contient aussi l’adresse sockaddr_in du nƓud ayant causĂ© l’erreur, qui peut ĂȘtre obtenu avec la macro SO_EE_OFFENDER . Le champ sin_family de l’adresse fournie par SO_EE_OFFENDER vaut AF_UNSPEC si la source Ă©tait inconnue. Lorsque les erreurs proviennent du rĂ©seau, toutes les options IP ( IP_OPTIONS , IP_TTL , etc.) valables pour le socket et contenues dans le paquet d’erreur sont transmises comme messages de contrĂŽle. La charge utile du paquet causant l’erreur est renvoyĂ©e comme charge normale. TCP n’a pas de file d’erreurs et MSG_ERRQUEUE n’est pas permis sur les sockets SOCK_STREAM . IP_RECVERR est valable pour TCP, mais toutes les erreurs sont renvoyĂ©es par des fonctions de socket ou seulement SO_ERROR .

Pour les sockets raw, IP_RECVERR active le passage de toutes les erreurs ICMP reçues Ă  l’application, sinon les erreurs sont seulement renvoyĂ©es sur les sockets connectĂ©s.

Il définit ou récupÚre un attribut booléen entier. IP_RECVERR est désactivée par défaut.

IP_RECVOPTS (depuis Linux 2.2)

Passer Ă  l’utilisateur toutes les options IP entrantes dans un message de contrĂŽle IP_OPTIONS . L’en-tĂȘte de routage et les autres options sont dĂ©jĂ  remplies pour l’hĂŽte local. Cela n’est pas gĂ©rĂ© pour les sockets SOCK_STREAM .

IP_RECVORIGDSTADDR (depuis Linux 2.6.29)

Cette option boolĂ©enne active le message de service IP_ORIGDSTADDR dans recvmsg (2), dans lequel le noyau renvoie l’adresse de destination originelle du datagramme en train d’ĂȘtre reçu. Le message de service contient une structure sockaddr_in . Option non prise en charge pour les sockets SOCK_STREAM .

IP_RECVTOS (depuis Linux 2.2)

Le message de service IP_TOS est passĂ© avec les paquets entrants si cette option est activĂ©e. Il contient un octet qui dĂ©crit le champ Type-Of-Service/Precedence de l’en-tĂȘte du paquet. Il s’agit d’un attribut entier boolĂ©en. Non pris en charge par les sockets SOCK_STREAM .

IP_RECVTTL (depuis Linux 2.2)

Lorsque cet attribut est dĂ©fini, passer un message de contrĂŽle IP_TTL avec le champ Time-to-Live du paquet reçu, sous forme d’entier 32 bits. Cela n’est pas gĂ©rĂ© pour les sockets SOCK_STREAM .

IP_RETOPTS (depuis Linux 2.2)

Identique Ă  IP_RECVOPTS , mais renvoie les options raw non traitĂ©es, avec les options d’enregistrement des horodatages et du routage non remplies pour ce pas (hop). Non pris en charge par les sockets SOCK_STREAM .

IP_ROUTER_ALERT (depuis Linux 2.2)

Passer tous les paquets Ă  transfĂ©rer avec l’option IP Router Alert activĂ©e sur ce socket. Ce n’est valable que pour les sockets raw et sert par exemple pour les dĂ©mons RSVP de l’espace utilisateur. Les paquets enregistrĂ©s ne sont pas redirigĂ©s par le noyau, l’utilisateur est responsable de leur rĂ©acheminement. La liaison du socket est ignorĂ©e et de tels paquets ne sont filtrĂ©s que par le protocole. L’attribut est un entier.

IP_TOS (depuis Linux 1.0)

DĂ©finir ou rĂ©cupĂ©rer le champ Type-Of-Service (TOS) envoyĂ© avec chaque paquet IP sortant de ce socket. Cela sert Ă  gĂ©rer sur le rĂ©seau les prioritĂ©s entre paquets. TOS est un octet. Quelques attributs TOS standards sont dĂ©finis : IPTOS_LOWDELAY pour minimiser les dĂ©lais pour le trafic interactif, IPTOS_THROUGHPUT pour optimiser le dĂ©bit, IPTOS_RELIABILITY pour optimiser la fiabilitĂ©, IPTOS_MINCOST qui doit ĂȘtre utilisĂ© pour les donnĂ©es de remplissage oĂč la lenteur de transmission importe peu. Une au maximum de ces valeurs TOS peut ĂȘtre indiquĂ©e. Les autres bits ne sont pas valables et doivent ĂȘtre effacĂ©s. Linux envoie d’abord des datagrammes IPTOS_LOWDELAY par dĂ©faut, mais le comportement exact dĂ©pend de la politique configurĂ©e pour la file d’attente. Quelques niveaux de haute prioritĂ© peuvent rĂ©clamer les privilĂšges du superutilisateur (la capacitĂ© CAP_NET_ADMIN ).

IP_TRANSPARENT (depuis Linux 2.6.24)

Cet attribut boolĂ©en active le mandataire transparent sur ce socket. Cette option de socket permet Ă  l’application appelante de s’attacher Ă  une adresse IP non locale et de fonctionner Ă  la fois comme un client et un serveur avec l’adresse extĂ©rieure comme point de terminaison local. Remarque : le routage doit ĂȘtre configurĂ© pour que les paquets envoyĂ©s vers l’adresse extĂ©rieure soient routĂ©s Ă  travers la boĂźte TProxy (c’est-Ă -dire le systĂšme hĂ©bergeant l’application utilisant l’option de socket IP_TRANSPARENT ). Les privilĂšges du superutilisateur sont nĂ©cessaires pour l’activation de cette option de socket (la capacitĂ© CAP_NET_ADMIN ).

Cette option doit Ă©galement ĂȘtre configurĂ©e sur le socket redirigĂ© pour la redirection TProxy avec la cible iptables TPROXY.

IP_TTL (depuis Linux 1.0)

Définir ou récupérer le contenu actuel du champ Time-to-Live utilisé avec chaque paquet envoyé depuis ce socket.

IP_UNBLOCK_SOURCE (depuis Linux 2.4.22 et 2.5.68)

DĂ©bloquer une source de diffusion multiple prĂ©cĂ©demment bloquĂ©e. Renvoi de EADDRNOTAVAIL si la source indiquĂ©e n’était pas bloquĂ©e.

L’argument est une structure ip_mreq_source comme dĂ©crite pour IP_ADD_SOURCE_MEMBERSHIP .

SO_PEERSEC (depuis Linux 2.6.17)

Si Labeled IPsec ou si NetLabel est configurĂ© sur les hĂŽtes Ă©metteur et rĂ©cepteur, cette option de socket en lecture seule autorise la rĂ©ception du contexte de sĂ©curitĂ© du socket pair connectĂ© Ă  ce socket. Par dĂ©faut, cela sera le mĂȘme contexte que celui du processus qui a créé le socket pair Ă  moins qu’il soit outrepassĂ© par la politique ou par un processus ayant les permissions requises.

L’argument de getsockopt (2) est un pointeur vers un tampon de la longueur indiquĂ©e en octets dans lequel la chaĂźne de contexte de sĂ©curitĂ© sera copiĂ©e. Si la taille du tampon est infĂ©rieure Ă  celle de la chaĂźne du contexte de sĂ©curitĂ©, alors getsockopt (2) renvoie -1 , dĂ©finit errno Ă  ERANGE et renvoie la taille requise Ă  l’aide de optlen . L’appelant doit allouer initialement au moins NAME_MAX octets pour le tampon, bien que cela ne soit pas garanti d’ĂȘtre suffisant. Redimensionner le tampon Ă  la taille renvoyĂ©e et rĂ©essayer peuvent ĂȘtre nĂ©cessaires.

La chaĂźne de contexte de sĂ©curitĂ© peut inclure un octet NULL final dans la taille renvoyĂ©e, mais il n’est pas garanti que ce soit fait : un contexte de sĂ©curitĂ© « abc » peut ĂȘtre reprĂ©sentĂ© soit par {’a’,’b’,’c’} de taille 3, ou {’a’,’b’,’c’,’\0’} de taille 4, qui sont considĂ©rĂ©s comme interchangeables. La chaĂźne peut ĂȘtre affichĂ©e, mais ne contient pas d’octet NULL final, et elle est dans un encodage non prĂ©cisĂ© (en particulier, il n’est pas garanti que ce soit ASCII ou UTF-8).

L’utilisation de cette option pour les sockets de la famille d’adresses AF_INET est prise en charge depuis Linux 2.6.17 pour les sockets TCP et depuis Linux 4.17 pour les sockets SCTP.

Pour SELinux, NetLabel transmet uniquement la portion MLS du contexte de sĂ©curitĂ© du pair sur le rĂ©seau, laissant par dĂ©faut le reste du contexte de sĂ©curitĂ© aux valeurs dĂ©finies dans la politique pour l’identifiant de sĂ©curitĂ© initial netmsg (SID). Cependant, NetLabel peut ĂȘtre configurĂ© pour passer les contextes de sĂ©curitĂ© en entier sur la boucle locale. Labeled IPSEC passe toujours les contextes de sĂ©curitĂ© comme partie de l’association de sĂ©curitĂ© (security association — SA) et les recherche en se basant sur l’association de chaque paquet.

/proc interfaces

Le protocole IP prend en charge une sĂ©rie d’interfaces /proc pour configurer certaines options globales. Les paramĂštres peuvent ĂȘtre accĂ©dĂ©s en lisant ou Ă©crivant dans les fichiers du rĂ©pertoire /proc/sys/net/ipv4/ . Les interfaces dĂ©crites comme des boolĂ©ens prennent une valeur entiĂšre. Celle-ci signifie que l’option correspondante est activĂ©e si elle est diffĂ©rente de zĂ©ro (« true ») et dĂ©sactivĂ©e si elle vaut zĂ©ro (« false »).
ip_always_defrag
(booléen ; depuis Linux 2.2.13)

NouveautĂ© des noyaux 2.2.13, dans les noyaux prĂ©cĂ©dents, cette fonctionnalitĂ© Ă©tait contrĂŽlĂ©e lors de la compilation avec l’option CONFIG_IP_ALWAYS_DEFRAG . Cette option n’est plus prĂ©sente dans les versions 2.4.x et suivantes.

Lorsque cet attribut boolĂ©en est activĂ© (diffĂ©rent de zĂ©ro), les fragments entrants (morceaux de paquets IP obtenus quand un hĂŽte entre l’origine et la destination a dĂ©cidĂ© que les paquets Ă©taient trop grands et les a coupĂ©s en morceaux) seront rĂ©assemblĂ©s (dĂ©fragmentĂ©s) avant d’ĂȘtre traitĂ©s, mĂȘme s’ils doivent ĂȘtre transfĂ©rĂ©s.

Cette option n’est Ă  utiliser que pour un pare-feu qui est le seul lien d’entrĂ©e du rĂ©seau ou pour un mandataire transparent. Il ne faut jamais l’utiliser pour un routeur ou un hĂŽte normal. Sinon, les communications fragmentĂ©es peuvent ĂȘtre perturbĂ©es si les fragments circulent dans des liaisons diffĂ©rentes. La dĂ©fragmentation a Ă©galement un coĂ»t mĂ©moire et processeur important.

C’est automatiquement activĂ© lorsque le camouflage des connexions (masquerading) ou le mandataire transparent sont configurĂ©s.

ip_autoconfig (depuis Linux 2.2 Ă  2.6.17)

Non documenté.

ip_default_ttl (entier ; défaut : 64 ; depuis Linux 2.2)

DĂ©finir la valeur par dĂ©faut du champ Time-to-Live des paquets sortants. Cela peut ĂȘtre modifiĂ© individuellement pour chaque socket avec l’option IP_TTL .

ip_dynaddr (booléen ; désactivé par défaut ; depuis Linux 2.0.31)

Activer la réécriture dynamique des adresses de socket et du masquerading lors du changement d’adresse d’interface. Cela sert pour les liaisons tĂ©lĂ©phoniques avec des adresses IP changeantes. 0 signifie aucune réécriture, 1 les autorise et 2 demande un mode bavard.

ip_forward (booléen ; désactivé par défaut) ; depuis Linux 1.2

Activer le transfert d’IP avec un attribut boolĂ©en. Le transfert d’IP peut aussi ĂȘtre configurĂ© interface par interface.

ip_local_port_range (depuis Linux 2.2)

Ce fichier contient deux entiers qui dĂ©finissent l’intervalle par dĂ©faut de ports locaux allouĂ©s aux sockets qui ne sont pas explicitement attachĂ©s Ă  un numĂ©ro de port – c’est-Ă -dire l’intervalle utilisĂ© pour les ports Ă©phĂ©mĂšres . Un port Ă©phĂ©mĂšre est allouĂ© Ă  un socket dans les circonstances suivantes :

-

le numéro de port dans une adresse de socket est défini à 0 en appelant bind (2) ;

-

listen (2) est appelĂ© sur un socket de flux qui n’était pas attachĂ© auparavant ;

-

connect (2) a Ă©tĂ© appelĂ©e sur un socket qui n’était pas attachĂ© auparavant ;

-

sendto (2) est appelĂ©e sur un socket datagramme qui n’était pas attachĂ© auparavant.

L’allocation de ports Ă©phĂ©mĂšres commence avec le premier numĂ©ro de ip_local_port_range et se termine avec le second. Si l’intervalle de ports Ă©phĂ©mĂšres est Ă©puisĂ©, alors l’appel systĂšme associĂ© renvoie une erreur (mais consultez BOGUES ).

Remarquez que l’intervalle de ports dans ip_local_port_range ne devrait pas entrer en conflit avec les ports utilisĂ©s pour le masquerading (bien que cela soit traitĂ©). De mĂȘme, des choix arbitraires peuvent poser des problĂšmes avec certains filtrages de pare-feu qui font des suppositions sur les ports locaux utilisĂ©s. Le premier nombre doit ĂȘtre au moins supĂ©rieur Ă  1024 et, de prĂ©fĂ©rence, Ă  4096 pour Ă©viter les collisions avec les ports officiels et minimiser les problĂšmes de pare-feu.

ip_no_pmtu_disc (booléen ; désactivé par défaut) ; depuis Linux 2.2

Si activĂ©, supprimer la dĂ©couverte par dĂ©faut des MTU des chemins pour les sockets TCP. La dĂ©couverte de la MTU d’un chemin peut Ă©chouer avec des pare-feu mal configurĂ©s (qui rejettent tous les paquets ICMP) ou des interfaces mal configurĂ©es (par exemple, une liaison point-Ă -point oĂč les deux extrĂ©mitĂ©s n’ont pas la mĂȘme MTU). Il vaut mieux corriger le routeur dĂ©fectueux que supprimer globalement la dĂ©couverte des MTU des chemins, car cette derniĂšre option entraĂźne un coĂ»t Ă©levĂ© pour le rĂ©seau.

ip_nonlocal_bind (booléen ; désactivé par défaut ; depuis Linux 2.4)

Si dĂ©fini, permettre aux processus de s’attacher avec bind (2) Ă  des adresses IP non locales, ce qui peut ĂȘtre utile mais peut faire planter certaines applications.

ip6frag_time (entier ; défaut : 30)

DĂ©finir le temps en secondes de conservation d’un fragment IPv6 en mĂ©moire.

ip6frag_secret_interval (entier ; défaut : 600)

DĂ©finir l’intervalle de rĂ©gĂ©nĂ©ration (en secondes) du secret de hachage (ou sa durĂ©e de vie) pour les fragments IPv6.

ipfrag_high_thresh (entier)
ipfrag_low_thresh
(entier)

Si le nombre de fragments IP en attente atteint ipfrag_high_thresh , la file est restreinte à ipfrag_low_thresh . Contient un entier avec le nombre d’octets.

neigh/*

Consultez arp (7).

Ioctls

Tous les ioctls dĂ©crits dans socket (7) s’appliquent Ă  ip .

Les ioctls pour configurer les paramÚtres génériques des périphériques sont décrits dans netdevice (7).

ERREURS

EACCES

L’utilisateur a essayĂ© de rĂ©aliser une opĂ©ration sans avoir les permissions nĂ©cessaires. Cela inclut : l’envoi d’un paquet vers une adresse de diffusion gĂ©nĂ©rale sans avoir activĂ© l’attribut SO_BROADCAST , l’envoi d’un paquet par une route interdite , la modification du paramĂ©trage du pare-feu sans les privilĂšges du superutilisateur (la capacitĂ© CAP_NET_ADMIN ) et l’attachement Ă  un port privilĂ©giĂ© sans les privilĂšges du superutilisateur (la capacitĂ© CAP_NET_BIND_SERVICE ).

EADDRINUSE

Tentative d’attachement Ă  une adresse dĂ©jĂ  utilisĂ©e.

EADDRNOTAVAIL

Une interface inexistante a Ă©tĂ© demandĂ©e ou l’adresse d’émission demandĂ©e n’était pas locale.

EAGAIN

L’opĂ©ration sur un socket non bloquant devrait bloquer.

EALREADY

Une connexion est déjà en cours sur un socket non bloquant.

ECONNABORTED

Une connexion a été fermée durant un appel à accept (2).

EHOSTUNREACH

Aucune table de routage valable ne correspond Ă  l’adresse de destination. Cette erreur peut ĂȘtre due Ă  un message ICMP d’un routeur distant ou dans la table de routage interne.

EINVAL

Un argument non valable a Ă©tĂ© fourni. Pour les opĂ©rations d’envoi, cela peut ĂȘtre causĂ© par un envoi vers une route trou noir .

EISCONN

connect (2) a été appelée sur un socket déjà connecté.

EMSGSIZE

Un datagramme est plus grand qu’une MTU sur le chemin et ne peut pas ĂȘtre fragmentĂ©.

ENOBUFS

ENOMEM

La mĂ©moire libre est insuffisante. Cela signifie souvent que l’allocation mĂ©moire est contrainte par les limites du tampon de socket, pas par la mĂ©moire du systĂšme, mais ce n’est pas toujours le cas.

ENOENT

SIOCGSTAMP a Ă©tĂ© appelĂ© sur un socket qu’aucun paquet n’a atteint.

ENOPKG

Un sous-systĂšme du noyau n’est pas configurĂ©.

ENOPROTOOPT et EOPNOTSUPP

Passage d’une option de socket non valable.

ENOTCONN

L’opĂ©ration n’est dĂ©finie que pour un socket connectĂ©, mais ce socket n’était pas connectĂ©.

EPERM

L’utilisateur n’a pas la permission de dĂ©finir une prioritĂ© haute, de changer la configuration ou d’envoyer des signaux au groupe ou au processus demandĂ©.

EPIPE

La connexion a Ă©tĂ© fermĂ©e prĂ©maturĂ©ment ou volontairement par l’autre extrĂ©mitĂ©.

ESOCKTNOSUPPORT

Le socket n’est pas configurĂ© ou un type de socket inconnu a Ă©tĂ© demandĂ©.

D’autres erreurs peuvent ĂȘtre dĂ©clenchĂ©es par les protocoles des couches supĂ©rieures. Consultez tcp (7), raw (7), udp (7) et socket (7).

NOTES

IP_FREEBIND , IP_MSFILTER , IP_MTU , IP_MTU_DISCOVER , IP_RECVORIGDSTADDR , IP_PASSSEC , IP_PKTINFO , IP_RECVERR , IP_ROUTER_ALERT et IP_TRANSPARENT sont spécifiques à Linux.

Soyez trĂšs prudents avec l’option SO_BROADCAST , elle n’est pas privilĂ©giĂ©e sous Linux. Il est facile de surcharger un rĂ©seau avec des diffusions gĂ©nĂ©rales sans prĂ©caution. Pour les nouveaux protocoles applicatifs, il vaut mieux utiliser un groupe de diffusion multiple plutĂŽt que la diffusion gĂ©nĂ©rale. Cette derniĂšre est dĂ©conseillĂ©e. Voir la RFC 6762 pour un exemple de protocole (mDNS) utilisant l’approche plus moderne de diffusion multiple pour communiquer avec un groupe illimitĂ© d’hĂŽtes sur le rĂ©seau local.

Certaines autres implĂ©mentations des sockets BSD fournissent les options de socket IP_RCVDSTADDR et IP_RECVIF pour obtenir l’adresse de destination et l’interface des datagrammes reçus. Linux propose l’option IP_PKTINFO plus gĂ©nĂ©rale pour effectuer ce travail.

Certaines implĂ©mentations BSD des sockets fournissent Ă©galement l’option IP_RECVTTL , mais un message de service ayant le type IP_RECVTTL est fourni avec le paquet entrant. C’est diffĂ©rent de l’option IP_TTL utilisĂ©e sous Linux.

L’utilisation du niveau des options de socket SOL_IP n’est pas portable, les piles basĂ©es sur BSD utilisent le niveau IPPROTO_IP .

INADDR_ANY (0.0.0.0) et INADDR_BROADCAST (255.255.255.255) sont indĂ©pendantes de l’ordre des octets. Cela signifie que htonl (3) n’a aucun effet sur elles.

Compatibilité

Pour la compatibilitĂ© avec Linux 2.0, la syntaxe obsolĂšte socket(AF_INET, SOCK_PACKET, protocole ) est encore gĂ©rĂ©e pour ouvrir un socket packet (7). Cela est dĂ©conseillĂ© et doit ĂȘtre remplacĂ© par socket(AF_PACKET, SOCK_RAW, protocole ) . La principale diffĂ©rence est la nouvelle structure d’adresse sockaddr_ll pour les informations gĂ©nĂ©riques de la couche de liaison Ă  la place de l’ancienne sockaddr_pkt .

BOGUES

Il y a trop de valeurs d’erreurs hĂ©tĂ©rogĂšnes.

L’erreur utilisĂ©e pour diagnostiquer l’épuisement de l’intervalle de ports Ă©phĂ©mĂšres varie suivant les appels systĂšmes ( connect (2), bind (2), listen (2), sendto (2)) qui peuvent assigner des ports Ă©phĂ©mĂšres.

Les ioctls pour configurer les options d’interface spĂ©cifiques Ă  IP et les tables ARP ne sont pas dĂ©crites.

La rĂ©ception de l’adresse de destination originale avec MSG_ERRQUEUE dans msg_name par recvmsg (2) ne fonctionne pas dans certains noyaux Linux 2.2.

VOIR AUSSI

recvmsg (2), sendmsg (2), byteorder (3), capabilities (7), icmp (7), ipv6 (7), netdevice (7), netlink (7), raw (7), socket (7), tcp (7), udp (7), ip (8)

Le fichier source du noyau Documentation/networking/ip-sysctl.txt .

RFC 791 pour les spĂ©cifications IP d’origine. RFC 1122 pour les exigences IPv4 des hĂŽtes. RFC 1812 pour les exigences IPv4 des routeurs.

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr> et bubu <bubub@no-log.org>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .