.\" -*- coding: UTF-8 -*- '\" t .\" This man page is Copyright (C) 1999 Andi Kleen . .\" .\" %%%LICENSE_START(VERBATIM_ONE_PARA) .\" Permission is granted to distribute possibly modified copies .\" of this page provided the header is included verbatim, .\" and in case of nontrivial modification author and date .\" of the modification is added to the header. .\" %%%LICENSE_END .\" .\" $Id: ip.7,v 1.19 2000/12/20 18:10:31 ak Exp $ .\" .\" FIXME The following socket options are yet to be documented .\" .\" IP_XFRM_POLICY (2.5.48) .\" Needs CAP_NET_ADMIN .\" .\" IP_IPSEC_POLICY (2.5.47) .\" Needs CAP_NET_ADMIN .\" .\" IP_PASSSEC (2.6.17) .\" Boolean .\" commit 2c7946a7bf45ae86736ab3b43d0085e43947945c .\" Author: Catherine Zhang .\" .\" IP_MINTTL (2.6.34) .\" commit d218d11133d888f9745802146a50255a4781d37a .\" Author: Stephen Hemminger .\" .\" MCAST_JOIN_GROUP (2.4.22 / 2.6) .\" .\" MCAST_BLOCK_SOURCE (2.4.22 / 2.6) .\" .\" MCAST_UNBLOCK_SOURCE (2.4.22 / 2.6) .\" .\" MCAST_LEAVE_GROUP (2.4.22 / 2.6) .\" .\" MCAST_JOIN_SOURCE_GROUP (2.4.22 / 2.6) .\" .\" MCAST_LEAVE_SOURCE_GROUP (2.4.22 / 2.6) .\" .\" MCAST_MSFILTER (2.4.22 / 2.6) .\" .\" IP_UNICAST_IF (3.4) .\" commit 76e21053b5bf33a07c76f99d27a74238310e3c71 .\" Author: Erich E. Hoover .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH IP 7 "6 mars 2019" Linux "Manuel du programmeur Linux" .SH NOM ip \- Implémentation Linux du protocole IPv4 .SH SYNOPSIS \fB#include \fP .br .\" .B #include -- does not exist anymore .\" .B #include -- never include \fB#include \fP .br \fB#include \fP /* surensemble des précédents */ .PP \fItcp_socket\fP\fB = socket(AF_INET, SOCK_STREAM, 0);\fP .br \fIudp_socket\fP\fB = socket(AF_INET, SOCK_DGRAM, 0);\fP .br \fIraw_socket\fP\fB = socket(AF_INET, SOCK_RAW, \fP\fIprotocole\fP\fB);\fP .SH DESCRIPTION Linux implémente le protocole internet (IP) version\ 4, décrit dans les RFC\ 791 et RFC\ 1122. \fBip\fP 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. .PP L'interface de programmation est compatible avec les sockets BSD. Pour plus d'informations sur les sockets, consultez \fBsocket\fP(7). .PP An IP socket is created using \fBsocket\fP(2): .PP socket(AF_INET, socket_type, protocol); .PP Valid socket types are \fBSOCK_STREAM\fP to open a \fBtcp\fP(7) socket, \fBSOCK_DGRAM\fP to open a \fBudp\fP(7) socket, or \fBSOCK_RAW\fP to open a \fBraw\fP(7) socket to access the IP protocol directly. \fIprotocol\fP is the IP protocol in the IP header to be received or sent. The only valid values for \fIprotocol\fP are 0 and \fBIPPROTO_TCP\fP for TCP sockets, and 0 and \fBIPPROTO_UDP\fP for UDP sockets. For \fBSOCK_RAW\fP you may specify a valid IANA IP protocol defined in RFC\ 1700 assigned numbers. .PP Lorsqu'un processus veut recevoir de nouveaux paquets entrants ou des connexions, il doit attacher une socket à une adresse d'interface locale en utilisant \fBbind\fP(2). Une seule socket IP peut être attachée à une paire (adresse, port) locale donnée. Lorsque \fBINADDR_ANY\fP est indiqué au moment de l'attachement, la socket sera affectée à \fItoutes\fP les interfaces locales. Si \fBlisten\fP(2) est appelée sur une socket non affectée, celle\-ci est automatiquement attachée à un port libre aléatoire, avec l'adresse locale définie à \fBINADDR_ANY\fP. Si \fBconnect\fP(2) est appelée sur une socket non affectée, celle\-ci est automatiquement attachée à un port libre aléatoire ou un port partagé, avec l'adresse locale définie à \fBINADDR_ANY\fP. .PP L'adresse locale d'une socket TCP qui a été attachée est indisponible pendant quelques instants après sa fermeture, à moins que l'attribut \fBSO_REUSEADDR\fP ait été activé. Il faut être prudent en utilisant cet attribut, car il rend le protocole TCP moins fiable. .SS "Format 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. Le protocole IP de base ne fournit pas de numéro de port, ils sont implémentés par les protocoles de plus haut niveau comme \fBudp\fP(7) et \fBtcp\fP(7). Sur les sockets raw, le champ \fIsin_port\fP contient le protocole IP. .PP .in +4n .EX struct sockaddr_in { sa_family_t sin_family; /* famille d'adresses\ : AF_INET */ in_port_t sin_port; /* port dans l'ordre des octets réseau */ struct in_addr sin_addr; /* adresse Internet */ }; /* Adresse Internet */ struct in_addr { uint32_t s_addr; /* adresse dans l'ordre des octets réseau */ }; .EE .in .PP \fIsin_family\fP is always set to \fBAF_INET\fP. This is required; in Linux 2.2 most networking functions return \fBEINVAL\fP when this setting is missing. \fIsin_port\fP contains the port in network byte order. The port numbers below 1024 are called \fIprivileged ports\fP (or sometimes: \fIreserved ports\fP). Only a privileged process (on Linux: a process that has the \fBCAP_NET_BIND_SERVICE\fP capability in the user namespace governing its network namespace) may \fBbind\fP(2) to these sockets. Note that the raw IPv4 protocol as such has no concept of a port, they are implemented only by higher protocols like \fBtcp\fP(7) and \fBudp\fP(7). .PP \fIsin_addr\fP is the IP host address. The \fIs_addr\fP member of \fIstruct in_addr\fP contains the host interface address in network byte order. \fIin_addr\fP should be assigned one of the \fBINADDR_*\fP values (e.g., \fBINADDR_LOOPBACK\fP) using \fBhtonl\fP(3) or set using the \fBinet_aton\fP(3), \fBinet_addr\fP(3), \fBinet_makeaddr\fP(3) library functions or directly with the name resolver (see \fBgethostbyname\fP(3)). .PP .\" Leave a loophole for XTP @) IPv4 addresses are divided into unicast, broadcast, and multicast addresses. Unicast addresses specify a single interface of a host, broadcast addresses specify all hosts on a network, and multicast addresses address all hosts in a multicast group. Datagrams to broadcast addresses can be sent or received only when the \fBSO_BROADCAST\fP socket flag is set. In the current implementation, connection\-oriented sockets are allowed to use only unicast addresses. .PP 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 \fBhtons\fP(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. .PP Il existe plusieurs adresses particulières\ : \fBINADDR_LOOPBACK\fP (127.0.0.1) correspond toujours à l'hôte local à l’aide du périphérique loopback\ ; \fBINADDR_ANY\fP (0.0.0.0) signifie un attachement à n'importe quelle adresse\ ; \fBINADDR_BROADCAST\fP (255.255.255.255) signifie n'importe quel hôte et a le même effet sur l'attachement que \fBINADDR_ANY\fP, pour des raisons historiques. .SS "Options de socket" .\" or SOL_IP on Linux IP gère quelques options de sockets spécifiques au protocole, qui peuvent être définies avec \fBsetsockopt\fP(2) et consultées avec \fBgetsockopt\fP(2). Le niveau d'option de sockets pour IP est \fBIPPROTO_IP\fP. Un attribut entier booléen est faux quand il vaut zéro, et vrai sinon. .PP When an invalid socket option is specified, \fBgetsockopt\fP(2) and \fBsetsockopt\fP(2) fail with the error \fBENOPROTOOPT\fP. .TP \fBIP_ADD_MEMBERSHIP\fP (depuis Linux\ 1.2) Rejoint un groupe de diffusion multiple. L'argument est une structure \fIip_mreqn\fP. .PP .in +4n .EX 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 */ }; .EE .in .PP .\" (i.e., within the 224.0.0.0-239.255.255.255 range) \fIimr_multiaddr\fP 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 \fBsetsockopt\fP(2) échoue avec l'erreur \fBEINVAL\fP). \fIimr_address\fP est l'adresse de l'interface locale avec laquelle le système doit joindre le groupe de diffusion multiple. Si elle est égale à \fBINADDR_ANY\fP, une interface appropriée est choisie par le système. \fIimr_ifindex\fP est le numéro de l'interface qui doit rejoindre ou quitter le groupe \fIimr_multiaddr\fP, ou zéro pour indiquer n'importe quelle interface. .IP The \fIip_mreqn\fP structure is available only since Linux 2.2. For compatibility, the old \fIip_mreq\fP structure (present since Linux 1.2) is still supported; it differs from \fIip_mreqn\fP only by not including the \fIimr_ifindex\fP field. (The kernel determines which structure is being passed based on the size passed in \fIoptlen\fP.) .IP .\" \fBIP_ADD_MEMBERSHIP\fP is valid only for \fBsetsockopt\fP(2). .TP \fBIP_ADD_SOURCE_MEMBERSHIP\fP (depuis Linux\ 2.4.22 et 2.5.68) Rejoint un groupe de diffusion multiple et autorise la réception de données uniquement depuis une source indiquée. L'argument est une structure \fIip_mreq_source\fP. .PP .in +4n .EX 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 */ }; .EE .in .PP La structure \fIip_mreq_source\fP est similaire à \fIip_mreqn\fP décrite sous \fBIP_ADD_MEMBERSIP\fP. Le champ \fIimr_multiaddr\fP contient l'adresse du groupe de diffusion multiple que l'application veut rejoindre ou quitter.Le champ \fIimr_interface\fP est l'adresse de l'interface locale avec laquelle le système doit rejoindre le groupe de diffusion. Le champ \fIimr_sourceaddr\fP contient l'adresse de la source depuis laquelle l'application veut recevoir des données. .IP Cette option peut être utilisée plusieurs fois pour autoriser la réception depuis plusieurs sources. .TP \fBIP_BIND_ADDRESS_NO_PORT\fP (since Linux 4.2) .\" commit 90c337da1524863838658078ec34241f45d8394d Inform the kernel to not reserve an ephemeral port when using \fBbind\fP(2) with a port number of 0. The port will later be automatically chosen at \fBconnect\fP(2) time, in a way that allows sharing a source port as long as the 4\-tuple is unique. .TP \fBIP_BLOCK_SOURCE\fP (depuis Linux\ 2.4.22 / 2.5.68) Bloque 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 \fBIP_ADD_MEMBERSHIP\fP ou \fBIP_ADD_SOURCE_MEMBERSHIP\fP. .IP L'argument est une structure \fIip_mreq_source\fP comme décrite pour \fBIP_ADD_SOURCE_MEMBERSHIP\fP. .TP \fBIP_DROP_MEMBERSHIP\fP (depuis Linux\ 1.2) Quitte un groupe de diffusion multiple. L'argument est une structure \fIip_mreqn\fP ou \fIip_mreq\fP comme pour \fBIP_ADD_MEMBERSHIP\fP. .TP \fBIP_DROP_SOURCE_MEMBERSHIP\fP (since Linux\ 2.4.22 et 2.5.68) Leave a source\-specific group\(emthat is, stop receiving data from a given multicast group that come from a given source. If the application has subscribed to multiple sources within the same group, data from the remaining sources will still be delivered. To stop receiving data from all sources at once, use \fBIP_DROP_MEMBERSHIP\fP. .IP L'argument est une structure \fIip_mreq_source\fP comme décrite pour \fBIP_ADD_SOURCE_MEMBERSHIP\fP. .TP \fBIP_FREEBIND\fP (depuis Linux\ 2.4) .\" Precisely: 2.4.0-test10 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 une 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 essaye de s'y attacher. Cette option est l'équivalent spécifique à la socket de l'interface \fIip_nonlocal_bind\fP de \fI/proc\fP décrite plus bas. .TP \fBIP_HDRINCL\fP (depuis Linux\ 2.0) If enabled, the user supplies an IP header in front of the user data. Valid only for \fBSOCK_RAW\fP sockets; see \fBraw\fP(7) for more information. When this flag is enabled, the values set by \fBIP_OPTIONS\fP, \fBIP_TTL\fP, and \fBIP_TOS\fP are ignored. .TP \fBIP_MSFILTER\fP (depuis Linux\ 2.4.22 et 2.5.68) Cette option permet d'accéder à l'API de filtrage avancée. L'argument est une structure \fIip_msfilter\fP. .PP .in +4n .EX 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 de filtrage */ }; uint32_t imsf_numsrc; /* Nombre de sources dans le tableau qui suit */ struct in_addr imsf_slist[1]; /* Tableau des adresses sources */ }; .EE .in .PP Les deux macros \fBMCAST_INCLUDE\fP et \fBMCAST_EXCLUDE\fP permettent d'identifier le mode de filtrage. De plus, la macro \fBIP_MSFILTER_SIZE\fP(n) permet de déterminer la quantité de mémoire nécessaire pour stocker une structure \fIip_msfilter\fP contenant \fIn\fP sources. .IP Pour une description complète du filtrage des sources de diffusion multiple, consultez la RFC\ 3376. .TP \fBIP_MTU\fP (depuis Linux\ 2.2) .\" Precisely: 2.1.124 Retrieve the current known path MTU of the current socket. Returns an integer. .IP \fBIP_MTU\fP is valid only for \fBgetsockopt\fP(2) and can be employed only when the socket has been connected. .TP \fBIP_MTU_DISCOVER\fP (depuis Linux\ 2.2) .\" Precisely: 2.1.124 Définit ou récupère la définition de recherche des MTU des chemins pour une socket. Lorsqu'elle est activée, Linux effectuera la recherche de la MTU d'un chemin conformément à la RFC\ 1191 sur les sockets \fBSOCK_STREAM\fP. Pour les sockets autres que \fBSOCK_STREAM\fP, \fBIP_PMTUDISC_DO\fP force l'activation de l'attribut interdisant la fragmentation sur tous les paquets sortants. L'utilisateur est responsable de l'empaquetage des données dans des blocs inférieurs à la MTU et doit s'assurer de la retransmission si besoin. Le noyau rejettera (avec l'erreur \fBEMSGSIZE\fP) les datagrammes qui sont plus gros que la MTU du chemin déterminée. \fBIP_PMTUDISC_WANT\fP fragmentera un datagramme si nécessaire d'après la MTU du chemin, ou activera l'attribut interdisant la fragmentation sinon. .IP Les valeurs par défaut du système peuvent être basculées entre \fBIP_PMTUDISC_WANT\fP et \fBIP_PMTUDISC_DONT\fP en écrivant (respectivement des valeurs nulle ou non nulle) dans le fichier \fI/proc/sys/net/ipv4/ip_no_pmtu_disc\fP. .TS tab(:); c l l l. Path MTU discovery value:Signification IP_PMTUDISC_WANT:Use per\-route settings. IP_PMTUDISC_DONT:Never do Path MTU Discovery. IP_PMTUDISC_DO:Always do Path MTU Discovery. IP_PMTUDISC_PROBE:Set DF but ignore Path MTU. .TE .sp 1 Lorsque la recherche de la MTU des chemins est activée, le noyau garde automatiquement une trace des MTU des chemins par hôte de destination. Lorsqu'il est connecté à un correspondant spécifique avec \fBconnect\fP(2), la MTU du chemin actuel déterminée peut être consultée en utilisant l'option \fBIP_MTU\fP de la socket (par exemple si une erreur \fBEMSGSIZE\fP se produit). La MTU des chemins 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'erreur (consultez \fBIP_RECVERR\fP). Une nouvelle erreur sera mise en file pour chaque mise à jour de la MTU. .IP Durant la recherche de la MTU, les paquets initiaux des sockets datagramme peuvent être perdus. Les applications utilisant UDP devraient le savoir, et les éviter dans leur stratégie de retransmission. .IP To bootstrap the path MTU discovery process on unconnected sockets, it is possible to start with a big datagram size (headers up to 64 kilobytes long) and let it shrink by updates of the path MTU. .IP Afin d'obtenir une estimation initiale de la MTU du chemin, connecte une socket datagramme à l'adresse de destination en utilisant \fBconnect\fP(2) et consultez la MTU en appelant \fBgetsockopt\fP(2) avec l'option \fBIP_MTU\fP. .IP Il est possible d'implémenter la RFC\ 4821 pour les recherches de MTU avec des sockets \fBSOCK_DGRAM\fP ou \fBSOCK_RAW\fP en utilisant la valeur \fBIP_PMTUDISC_PROBE\fP (disponible depuis Linux\ 2.6.22). C'est aussi particulièrement utile pour les outils de diagnostic comme \fBtracepath\fP(8) qui veulent délibérément envoyer des paquets sonde plus larges que le MTU observé du chemin. .TP \fBIP_MULTICAST_ALL\fP (depuis Linux 2.6.31) Définit la politique de distribution des messages multicast aux sockets attachés à l'adresse jocker \fBINADDR_ANY\fP. Ce paramètre est un booléen (par défaut à 1). Configuré à 1, la socket recevra les messages destinés à tous les groupes auxquels le système est abonné. Sinon, seuls seront distribués les messages destinés à des groupes auxquels la socket s'est explicitement abonné (par exemple en utilisant l'option \fBIP_ADD_MEMBERSHIP\fP). .TP \fBIP_MULTICAST_IF\fP (depuis Linux\ 1.2) .\" net: IP_MULTICAST_IF setsockopt now recognizes struct mreq .\" Commit: 3a084ddb4bf299a6e898a9a07c89f3917f0713f7 Set the local device for a multicast socket. The argument for \fBsetsockopt\fP(2) is an \fIip_mreqn\fP or (since Linux 3.5) \fIip_mreq\fP structure similar to \fBIP_ADD_MEMBERSHIP\fP, or an \fIin_addr\fP structure. (The kernel determines which structure is being passed based on the size passed in \fIoptlen\fP.) For \fBgetsockopt\fP(2), the argument is an \fIin_addr\fP structure. .TP \fBIP_MULTICAST_LOOP\fP (depuis Linux\ 1.2) Définit ou lit un entier booléen indiquant si les paquets de diffusion multiple doivent être renvoyés aux sockets locales. .TP \fBIP_MULTICAST_TTL\fP (depuis Linux\ 1.2) Définit ou lit la valeur du champ Time\-to\-Live des paquets de diffusion multiple sortants sur cette socket. Il est très important pour les paquets de diffusion multiple de définir le TTL 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. .TP \fBIP_NODEFRAG\fP (depuis Linux\ 2.6.36) If enabled (argument is nonzero), the reassembly of outgoing packets is disabled in the netfilter layer. The argument is an integer. .IP This option is valid only for \fBSOCK_RAW\fP sockets. .TP \fBIP_OPTIONS\fP (depuis Linux\ 2.0) .\" Precisely: 1.3.30 Définit ou lit les options IP à envoyer avec chaque paquet sur cette socket. Les arguments sont un pointeur sur un tampon mémoire contenant les options et la longueur des options. L'appel à \fBsetsockopt\fP(2) définit les options IP associées à une socket. La taille maximale des options pour IPv4 vaut 40\ octets. Consultez la RFC\ 791 pour les options autorisées. Lorsque le paquet de connexion initiale d'une socket \fBSOCK_STREAM\fP contient des options IP, celles\-ci seront automatiquement attribuées à la socket, 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 validé en utilisant l'interface \fIaccept_source_route\fP de \fI/proc\fP. 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 \fBgetsockopt\fP(2) avec \fBIP_OPTIONS\fP remplit le tampon fourni avec les options d'émission actuelles. .TP \fBIP_PKTINFO\fP (depuis Linux\ 2.2) .\" Precisely: 2.1.68 Fournit un message \fBIP_PKTINFO\fP de service, qui contient une structure \fIpktinfo\fP fournissant quelques informations sur le paquet entrant. Ça ne fonctionne que pour les sockets orientées datagramme. L'argument est un attribut indiquant à la socket si le message \fBIP_PKTINFO\fP 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 \fBrecvmsg\fP(2) ou \fBsendmsg\fP(2). .IP .in +4n .EX 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 */ }; .EE .in .IP .\" This field is grossly misnamed \fIipi_ifindex\fP est le numéro unique de l'interface sur laquelle le paquet a été reçu. \fIipi_spec_dst\fP est l'adresse locale du paquet et \fIipi_addr\fP est l'adresse de destination dans l'en\-tête du paquet. Si \fBIP_PKTINFO\fP est passé à \fBsendmsg\fP(2) et \fIipi_spec_dst\fP 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 \fIipi_ifindex\fP est différent de zéro, l'adresse locale principale de l'interface indiquée par cet index remplace \fIipi_spec_dst\fP pour la table de routage. .TP \fBIP_RECVERR\fP (depuis Linux\ 2.2) .\" Precisely: 2.1.15 .\" or SOL_IP on Linux Active le passage amélioré des messages d'erreur. Lorsque cette option est activée pour une socket datagramme, toutes les erreurs générées seront envoyées dans une file d'erreurs propre à la socket. Quand l'utilisateur détecte une erreur d'opération sur la socket, celle\-ci peut être examinée en invoquant \fBrecvmsg\fP(2) avec l'attribut \fBMSG_ERRQUEUE\fP défini. La structure \fIsock_extended_err\fP décrivant l'erreur sera passée comme message de service ayant le type \fBIP_RECVERR\fP et le niveau \fBIPPROTO_IP\fP. Cela permet une gestion d'erreur fiable sur les sockets non connectées. La partie comprenant les données reçues de la file d'erreurs contient le paquet ayant rencontré un problème. .IP Le message de contrôle \fBIP_RECVERR\fP contient une structure \fIsock_extended_err\fP\ : .IP .in +4n .EX #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; /* données supplémentaires */ uint32_t ee_data; /* autres données */ /* Des données supplémentaires peuvent suivre */ }; struct sockaddr *SO_EE_OFFENDER(struct sock_extended_err *); .EE .in .IP \fIee_errno\fP contient le numéro de l'erreur \fIerrno\fP mise en file. \fIee_origin\fP est le code de l'origine de l'erreur. Les autres champs sont spécifiques au protocole. La macro \fBSO_EE_OFFENDER\fP 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 disponible, le membre \fIsa_family\fP de la structure \fIsockaddr\fP contient \fBAF_UNSPEC\fP et les autres champs de \fIsockaddr\fP ne sont pas définis. .IP .\" FIXME . Is it a good idea to document that? It is a dubious feature. .\" On .\" .B SOCK_STREAM .\" sockets, .\" .B IP_RECVERR .\" has slightly different semantics. Instead of .\" saving the errors for the next timeout, it passes all incoming .\" errors immediately to the user. .\" This might be useful for very short-lived TCP connections which .\" need fast error handling. Use this option with care: .\" it makes TCP unreliable .\" by not allowing it to recover properly from routing .\" shifts and other normal .\" conditions and breaks the protocol specification. IP utilise la structure \fIsock_extended_err\fP comme suit\ : \fIee_origin\fP contient \fBSO_EE_ORIGIN_ICMP\fP pour les erreurs reçues sous forme de paquet ICMP, ou \fBSO_EE_ORIGIN_LOCAL\fP pour les erreurs locales. Les valeurs inconnues doivent être ignorées. \fIee_type\fP et \fIee_code\fP sont définis à partir des champs type et code de l'en\-tête ICMP. \fIee_info\fP contient la MTU déterminée pour les erreurs \fBEMSGSIZE\fP. Le message contient aussi l'adresse \fIsockaddr_in\fP du nœud ayant causé l'erreur, qui peut être obtenu avec la macro \fBSO_EE_OFFENDER\fP. Le champ \fIsin_family\fP de l'adresse fournie par \fBSO_EE_OFFENDER\fP vaut \fBAF_UNSPEC\fP si la source était inconnue. Lorsque les erreurs proviennent du réseau, toutes les options IP (\fBIP_OPTIONS\fP, \fBIP_TTL\fP, etc.) valables pour la socket et contenues dans le paquet d'erreur sont transmises comme messages de contrôle. La charge du paquet causant l'erreur est renvoyée comme charge normale. TCP n'a pas de file d'erreurs\ ; \fBMSG_ERRQUEUE\fP n'est pas permis sur les sockets \fBSOCK_STREAM\fP. \fBIP_RECVERR\fP est valable pour TCP, mais toutes les erreurs sont renvoyées au retour des fonctions de socket ou par \fBSO_ERROR\fP. .IP Pour les sockets raw, \fBIP_RECVERR\fP active le passage de toutes les erreurs ICMP reçues à l'application, sinon les erreurs sont seulement renvoyées sur les sockets connectées. .IP Il s'agit d'un attribut booléen entier. \fBIP_RECVERR\fP est désactivée par défaut. .TP \fBIP_RECVOPTS\fP (depuis Linux\ 2.2) .\" Precisely: 2.1.15 Passe à l'utilisateur toutes les options IP entrantes dans un message de contrôle \fBIP_OPTIONS\fP. L'en\-tête de routage et les autres options sont déjà remplies pour l'hôte local. Ce n'est pas géré pour les sockets \fBSOCK_STREAM\fP. .TP \fBIP_RECVORIGDSTADDR\fP (depuis Linux\ 2.6.29) .\" commit e8b2dfe9b4501ed0047459b2756ba26e5a940a69 Cet attribut booléen active le message \fBIP_ORIGDSTADDR\fP de service dans \fBrecvmsg\fP(2), dans lequel le noyau renvoie l'adresse de destination originale du datagramme en train d'être reçu. Le message de service contient une structure \fIsockaddr_in\fP. .TP \fBIP_RECVTOS\fP (depuis Linux\ 2.2) .\" Precisely: 2.1.68 Le message de service \fBIP_TOS\fP est passé avec les paquets entrants si cette option est activée. Elle 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. .TP \fBIP_RECVTTL\fP (depuis Linux\ 2.2) .\" Precisely: 2.1.68 When this flag is set, pass a \fBIP_TTL\fP control message with the time\-to\-live field of the received packet as a 32 bit integer. Not supported for \fBSOCK_STREAM\fP sockets. .TP \fBIP_RETOPTS\fP (depuis Linux\ 2.2) .\" Precisely: 2.1.15 Identique à \fBIP_RECVOPTS\fP, mais renvoie les options brutes non traitées, avec les options d'enregistrement des horodatages et du routage non remplies pour ce saut. .TP \fBIP_ROUTER_ALERT\fP (depuis Linux\ 2.2) .\" Precisely: 2.1.68 Pass all to\-be forwarded packets with the IP Router Alert option set to this socket. Valid only for raw sockets. This is useful, for instance, for user\-space RSVP daemons. The tapped packets are not forwarded by the kernel; it is the user's responsibility to send them out again. Socket binding is ignored, such packets are only filtered by protocol. Expects an integer flag. .TP \fBIP_TOS\fP (depuis Linux\ 1.0) .\" FIXME elaborate on this .\" The priority can also be set in a protocol-independent way by the .\" .RB ( SOL_SOCKET ", " SO_PRIORITY ) .\" socket option (see .\" .BR socket (7)). Set or receive the Type\-Of\-Service (TOS) field that is sent with every IP packet originating from this socket. It is used to prioritize packets on the network. TOS is a byte. There are some standard TOS flags defined: \fBIPTOS_LOWDELAY\fP to minimize delays for interactive traffic, \fBIPTOS_THROUGHPUT\fP to optimize throughput, \fBIPTOS_RELIABILITY\fP to optimize for reliability, \fBIPTOS_MINCOST\fP should be used for "filler data" where slow transmission doesn't matter. At most one of these TOS values can be specified. Other bits are invalid and shall be cleared. Linux sends \fBIPTOS_LOWDELAY\fP datagrams first by default, but the exact behavior depends on the configured queueing discipline. Some high\-priority levels may require superuser privileges (the \fBCAP_NET_ADMIN\fP capability). .TP \fBIP_TRANSPARENT\fP (depuis Linux\ 2.6.24) .\" commit f5715aea4564f233767ea1d944b2637a5fd7cd2e .\" This patch introduces the IP_TRANSPARENT socket option: enabling that .\" will make the IPv4 routing omit the non-local source address check on .\" output. Setting IP_TRANSPARENT requires NET_ADMIN capability. .\" http://lwn.net/Articles/252545/ Cet attribut booléen active le mandataire transparent sur cette 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 via la boîte TProxy (c'est\-à\-dire le système hébergeant l'application utilisant l'option de socket \fBIP_TRANSPARENT\fP). Les privilèges du superutilisateur sont nécessaires pour l'activation de cette option de socket (la capacité \fBCAP_NET_ADMIN\fP). .IP Cette option doit également être configurée sur la socket redirigée pour la redirection TProxy avec la cible iptables TPROXY. .TP \fBIP_TTL\fP (depuis Linux\ 1.0) Définit ou récupère le contenu actuel du champ Time\-to\-Live utilisé avec chaque paquet envoyé depuis cette socket. .TP \fBIP_UNBLOCK_SOURCE\fP (depuis Linux\ 2.4.22 et 2.5.68) Débloque une source de diffusion multiple précédemment bloquée. Renvoie \fBEADDRNOTAVAIL\fP si la source indiquée n'était pas bloquée. .IP L'argument est une structure \fIip_mreq_source\fP comme décrite pour \fBIP_ADD_SOURCE_MEMBERSHIP\fP. .SS "Interfaces /proc" .\" FIXME As at 2.6.12, 14 Jun 2005, the following are undocumented: .\" ip_queue_maxlen .\" ip_conntrack_max .\" Le protocole IP prend en charge une série d'interfaces \fI/proc\fP pour configurer certaines options globales. Les paramètres peuvent être accédés en lisant ou écrivant dans les fichiers du répertoire \fI/proc/sys/net/ipv4/\fP. 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\ »). .TP \fIip_always_defrag\fP (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 \fBCONFIG_IP_ALWAYS_DEFRAG\fP. Cette option n'est plus présente dans les versions\ 2.4.x et suivantes.] .IP 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. .IP Enable only if running either a firewall that is the sole link to your network or a transparent proxy; never ever use it for a normal router or host. Otherwise, fragmented communication can be disturbed if the fragments travel over different links. Defragmentation also has a large memory and CPU time cost. .IP .\" C’est automagiquement activé lorsque le masquerading ou le mandataire transparent sont configurés. .TP \fIip_autoconfig\fP (depuis Linux\ 2.2 à 2.6.17) .\" Precisely: since 2.1.68 .\" FIXME document ip_autoconfig .\" Non documenté. .TP \fIip_default_ttl\fP (entier\ ; défaut\ : 64\ ; depuis Linux\ 2.2) .\" Precisely: 2.1.15 .\" Définit la valeur par défaut du champ Time\-to\-Live des paquets sortants. Cela peut être modifié individuellement pour chaque socket avec l'option \fBIP_TTL\fP. .TP \fIip_dynaddr\fP (booléen\ ; désactivé par défaut\ ; depuis Linux\ 2.0.31) .\" Active la réécriture dynamique des adresses de socket et du masquerading lors des changements 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. .TP \fIip_forward\fP (booléen\ ; désactivé par défaut)\ ; depuis Linux\ 1.2 .\" Active le transfert IP avec un attribut booléen. Le transfert IP peut aussi être configuré interface par interface. .TP \fIip_local_port_range\fP (depuis Linux\ 2.2) .\" Precisely: since 2.1.68 Ce fichier contient deux entiers qui définissent l’intervalle de ports locaux alloués aux sockets qui ne sont pas explicitement liées à un numéro de port –\ c’est\-à\-dire, l’intervalle utilisé pour les \fIports éphémères\fP. Un port éphémère est alloué à une socket dans les circonstances suivantes\ : .RS .IP * 3 le numéro de port dans une adresse de socket est défini à 0 en appelant \fBbind\fP(2)\ ; .IP * \fBlisten\fP(2) est appelé sur une socket de flux qui n’était pas liée auparavant\ ; .IP * \fBconnect\fP(2) was called on a socket that was not previously bound; .IP * \fBsendto\fP(2) is called on a datagram socket that was not previously bound. .RE .IP Allocation of ephemeral ports starts with the first number in \fIip_local_port_range\fP and ends with the second number. If the range of ephemeral ports is exhausted, then the relevant system call returns an error (but see BUGS). .IP .\" Remarquez que l’intervalle de ports dans \fIip_local_port_range\fP 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 pare\-feu de filtrage par paquet 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. .TP \fIip_no_pmtu_disc\fP (booléen\ ; désactivé par défaut)\ ; depuis Linux\ 2.2 .\" Precisely: 2.1.15 .\" .\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt Si activé, supprime la recherche par défaut des MTU des chemins pour les sockets TCP. La recherche 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, un lien point\-à\-point où les deux extrémités n'ont pas la même MTU). Il vaut mieux corriger le routeur défectueux que de supprimer globalement la recherche des MTU des chemins, car cette dernière option augmente les coûts du réseau. .TP \fIip_nonlocal_bind\fP (booléen\ ; désactivé par défaut\ ; depuis Linux\ 2.4) .\" Precisely: patch-2.4.0-test10 .\" .\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt Si défini, permet aux processus de s'attacher avec \fBbind\fP(2) à des adresses IP non locales, ce qui peut être utile mais peut faire planter certaines applications. .TP \fIip6frag_time\fP (entier\ ; défaut\ : 30) .\" .\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt Définit le temps en secondes de conservation d'un fragment IPv6 en mémoire. .TP \fIip6frag_secret_interval\fP (entier\ ; défaut\ : 600) Définit l'intervalle de régénération (en secondes) du secret de hachage (ou sa durée de vie) pour les fragments IPv6. .TP \fIipfrag_high_thresh\fP (entier), \fIipfrag_low_thresh\fP (entier) Si le nombre de fragments IP en attente atteint \fIipfrag_high_thresh\fP, la file est restreinte à \fIipfrag_low_thresh\fP. Contient un entier avec le nombre d'octets. .TP \fIneigh/*\fP .\" FIXME Document the conf/*/* interfaces .\" .\" FIXME Document the route/* interfaces Consultez \fBarp\fP(7). .SS Ioctls .\" 2006-04-02, mtk .\" commented out the following because ipchains is obsolete .\" .PP .\" The ioctls to configure firewalling are documented in .\" .BR ipfw (4) .\" from the .\" .B ipchains .\" package. Tous les ioctls décrits dans \fBsocket\fP(7) s'appliquent à \fBip\fP. .PP .\" FIXME Add a discussion of multicasting Les ioctls pour configurer les paramètres génériques des périphériques sont décrits dans \fBnetdevice\fP(7). .SH ERREURS .\" FIXME document all errors. .\" We should really fix the kernels to give more uniform .\" error returns (ENOMEM vs ENOBUFS, EPERM vs EACCES etc.) .TP \fBEACCES\fP 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 \fBSO_BROADCAST\fP, l'envoi d'un paquet par une route \fIinterdite\fP, la modification du paramétrage du pare\-feu sans les privilèges du superutilisateur (la capacité \fBCAP_NET_ADMIN\fP) et l'attachement à un port privilégié sans les privilèges du superutilisateur (la capacité \fBCAP_NET_BIND_SERVICE\fP). .TP \fBEADDRINUSE\fP Tentative d'attachement à une adresse déjà utilisée. .TP \fBEADDRNOTAVAIL\fP Une interface inexistante a été demandée, ou l'adresse d'émission demandée n'était pas locale. .TP \fBEAGAIN\fP L'opération sur une socket non bloquante devrait bloquer. .TP \fBEALREADY\fP Une connexion est déjà en cours sur la socket non bloquante. .TP \fBECONNABORTED\fP Une connexion a été fermée durant un appel à \fBaccept\fP(2). .TP \fBEHOSTUNREACH\fP No valid routing table entry matches the destination address. This error can be caused by an ICMP message from a remote router or for the local routing table. .TP \fBEINVAL\fP Un argument non valable a été fourni. Pour les opérations d'envoi, cela peut être causé par un envoi vers une route \fItrou noir\fP. .TP \fBEISCONN\fP \fBconnect\fP(2) a été appelée sur une socket déjà connectée. .TP \fBEMSGSIZE\fP Un datagramme est plus grand que la MTU du chemin et ne peut pas être fragmenté. .TP \fBENOBUFS\fP, \fBENOMEM\fP 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. .TP \fBENOENT\fP \fBSIOCGSTAMP\fP a été appelé sur une socket qu'aucun paquet n'a atteint. .TP \fBENOPKG\fP Un sous\-système du noyau n'est pas configuré. .TP \fBENOPROTOOPT\fP et \fBEOPNOTSUPP\fP Passage d'une option de socket non valable. .TP \fBENOTCONN\fP L'opération n'est définie que sur une socket connectée, mais cette socket n'était pas connectée. .TP \fBEPERM\fP 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é. .TP \fBEPIPE\fP La connexion a été fermée prématurément ou volontairement à l'autre extrémité. .TP \fBESOCKTNOSUPPORT\fP La socket n'est pas configurée ou un type de socket inconnu a été demandé. .PP Other errors may be generated by the overlaying protocols; see \fBtcp\fP(7), \fBraw\fP(7), \fBudp\fP(7), and \fBsocket\fP(7). .SH NOTES .\" IP_PASSSEC is Linux-specific .\" IP_XFRM_POLICY is Linux-specific .\" IP_IPSEC_POLICY is a nonstandard extension, also present on some BSDs \fBIP_FREEBIND\fP, \fBIP_MSFILTER\fP, \fBIP_MTU\fP, \fBIP_MTU_DISCOVER\fP, \fBIP_RECVORIGDSTADDR\fP, \fBIP_PKTINFO\fP, \fBIP_RECVERR\fP, \fBIP_ROUTER_ALERT\fP et \fBIP_TRANSPARENT\fP sont spécifiques à Linux. .PP Soyez très prudents avec l'option \fBSO_BROADCAST\fP, 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. Ce dernier est déconseillé. .PP Certaines autres implémentations des sockets BSD fournissent les options de socket \fBIP_RCVDSTADDR\fP et \fBIP_RECVIF\fP pour obtenir l'adresse de destination et l'interface des datagrammes reçus. Linux propose l'option \fBIP_PKTINFO\fP plus générale pour effectuer ce travail. .PP Certaines implémentations BSD des sockets fournissent également l'option \fBIP_RECVTTL\fP, mais un message de service ayant le type \fBIP_RECVTTL\fP est fourni avec le paquet entrant. C'est différent de l'option \fBIP_TTL\fP utilisée sous Linux. .PP Using the \fBSOL_IP\fP socket options level isn't portable; BSD\-based stacks use the \fBIPPROTO_IP\fP level. .PP \fBINADDR_ANY\fP (0.0.0.0) and \fBINADDR_BROADCAST\fP (255.255.255.255) are byte\-order\-neutral. This means \fBhtonl\fP(3) has no effect on them. .SS Compatibilité Pour la compatibilité avec Linux\ 2.0, la syntaxe obsolète \fBsocket(AF_INET, SOCK_PACKET, \fP\fIprotocole\fP\fB)\fP est encore gérée pour ouvrir une socket \fBpacket\fP(7). C’est déconseillé, et doit être remplacé par \fBsocket(AF_PACKET, SOCK_RAW, \fP\fIprotocole\fP\fB)\fP. La principale différence est la nouvelle structure d'adresse \fIsockaddr_ll\fP pour les informations génériques de la couche de liaison à la place de l'ancienne \fBsockaddr_pkt\fP. .SH BOGUES Il y a trop de valeurs d'erreurs hétérogènes. .PP L’erreur utilisée pour diagnostiquer l’épuisement de l’intervalle de ports éphémères varie suivant les appels systèmes (\fBconnect\fP(2), \fBbind\fP(2), \fBlisten\fP(2), \fBsendto\fP(2)) qui peuvent assigner des ports éphémères. .PP .\" .PP .\" Some versions of glibc forget to declare .\" .IR in_pktinfo . .\" Workaround currently is to copy it into your program from this man page. Les ioctls pour configurer les options d'interface spécifiques à IP et les tables ARP ne sont pas décrites. .PP .\" .SH AUTHORS .\" This man page was written by Andi Kleen. La réception de l'adresse de destination originale avec \fBMSG_ERRQUEUE\fP dans \fImsg_name\fP par \fBrecvmsg\fP(2) ne fonctionne pas dans certains noyaux\ 2.2. .SH "VOIR AUSSI" \fBrecvmsg\fP(2), \fBsendmsg\fP(2), \fBbyteorder\fP(3), \fBipfw\fP(4), \fBcapabilities\fP(7), \fBicmp\fP(7), \fBipv6\fP(7), \fBnetlink\fP(7), \fBraw\fP(7), \fBsocket\fP(7), \fBtcp\fP(7), \fBudp\fP(7), \fBip\fP(8) .PP RFC\ 791 pour les spécifications IP d'origine. RFC\ 1122 pour les nécessités IPv4 des hôtes. RFC\ 1812 pour les nécessités IPv4 des routeurs. .SH COLOPHON Cette page fait partie de la publication\ 5.04 du projet \fIman\-pages\fP Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse \%https://www.kernel.org/doc/man\-pages/. .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier et David Prévot . Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE 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 à .MT debian-l10n-french@lists.debian.org .ME .