Provided by:
manpages-fr_3.07.1-1_all 
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, protocol);
DESCRIPTION
Linux implémente le protocole internet (IP) version 4, décrit dans les
RFC791 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, voyez socket(7).
Une socket IP est créée en appelant la fonction socket(2) sous la forme
socket(AF_INET, type_socket, protocole). Les types valables de sockets
sont SOCK_STREAM pour ouvrir une socket tcp(7), SOCK_DGRAM pour ouvrir
une socket udp(7), ou SOCK_RAW pour ouvrir une socket raw(7) permettant
d’accéder directement au protocole IP. Le protocole indiqué est celui
inscrit dans les en-têtes IP émis ou reçus. Les seules valeurs valables
pour le protocole sont 0 et IPPROTO_TCP pour les sockets TCP, et 0 et
IPPROTO_UDP pour les sockets UDP. Pour les sockets SOCK_RAW, on peut
indiquer un protocole IP IANA valable dont la RFC 1700 précise les
numéros assignés.
Lorsqu’un processus veut recevoir de nouveaux paquets entrants ou des
connexions, il doit attacher une socket à une adresse d’interface
locale en utilisant bind(2). Une seule socket IP peut être attachée Ã
une paire (adresse, port) locale donnée. Lorsqu’on indique INADDR_ANY
lors de l’attachement, la socket sera affectée à toutes les interfaces
locales. Si listen(2) ou connect(2) sont appelées sur une socket non
affectée, celle-ci est automatiquement attachée à un port libre
aléatoire, avec l’adresse locale définie à INADDR_ANY.
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
SO_REUSEADDR ait été activé. Il faut être prudent en utilisant cet
attribut, car il rend le protocole TCP moins fiable.
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 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 */
uint16_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 */
};
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 configuration manque. 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 réservés. Seuls les processus privilégiés (à savoir ceux qui
ont la capacité CAP_NET_BIND_SERVICE) peuvent appeler bind(2) pour ces
sockets. Le protocole IPv4 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 doit se voir assigner l’une des valeurs
INADDR_* (par exemple, INADDR_ANY) ou être manipulé au travers 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 (voir
gethostbyname(3)). Les adresses IPv4 sont divisées en adresses de
diffusions individuelle, générale et multiple. 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ées connexion ne sont autorisées 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.
Il existe plusieurs adresses particulières : INADDR_LOOPBACK
(127.0.0.1) correspond toujours à l’hôte local via le périphérique
loopback ; INADDR_ANY (0.0.0.0) signifie un attachement à n’importe
quelle adresse; INADDR_BROADCAST (255.255.255.255) signifie n’importe
quel hôte et a le même effet sur l’attachement que INADDR_ANY, pour des
raisons historiques.
Options de sockets
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.
IP_OPTIONS
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 à setsockopt(2) définit les options IP associées à une
socket. La taille maximale des options pour IPv4 vaut 40 octets.
Voyez la RFC 791 pour les options autorisées. Lorsque le paquet
de connexion initiale d’une socket SOCK_STREAM 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 la requête sysctl accept_source_route. 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
d’émission actuelles.
IP_PKTINFO
Fournit un message IP_PKTINFO de service, qui contient une
structure pktinfo fournissant quelques informations sur le
paquet entrant. Ceci ne fonctionne que pour les sockets
orientées datagramme. L’argument est un attribut indiquant à la
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 */
};
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 cet
index remplace ipi_spec_dst pour la table de routage.
IP_RECVTOS
Le message de service IP_TOS 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.
IP_RECVTTL
Lorsque cet attribut est défini, passe un message de contrôle
IP_TTL avec le champ Time To Live du paquet reçu, sous forme
d’octet. Ceci n’est pas géré pour les sockets SOCK_STREAM.
IP_RECVOPTS
Passe à 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. Ceci n’est
pas géré pour les sockets SOCK_STREAM.
IP_RETOPTS
Identique à IP_RECVOPTS, mais renvoie les options brutes non
traitées, avec les options d’enregistrement des horodatages et
du routage non remplies pour ce saut.
IP_TOS Définit ou récupère le champ Type-Of-Service (TOS) envoyé avec
chaque paquet IP sortant de cette 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 doit être utilisé pour les
données de remplissage, quand la lenteur de transmission importe
peu. Une de ces valeurs TOS au maximum 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). La priorité peut aussi être définie d’une
manière indépendante du protocole avec les options de socket
(SOL_SOCKET, SO_PRIORITY) (voyez socket(7)).
IP_TTL Définit ou récupère le contenu actuel du champ Time-To-Live
utilisé avec chaque paquet envoyé depuis cette socket.
IP_HDRINCL
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. Voyez 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_RECVERR (défini dans <linux/errqueue.h>)
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
particulière à la socket. Quand l’utilisateur détecte une erreur
d’opération sur la 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. Ceci 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.
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; /* 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_errno contient le numéro de l’erreur errno mise en file.
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 disponible, 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 noeud 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 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 ;
MSG_ERRQUEUE n’est pas permis sur les sockets SOCK_STREAM.
IP_RECVERR est valable pour TCP, mais toutes les erreurs sont
renvoyées au retour des fonctions de socket ou par 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ées.
Il s’agit d’un attribut booléen entier. IP_RECVERR est
désactivée par défaut.
IP_MTU_DISCOVER
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 comme défini dans
la RFC 1191. L’attribut interdisant la fragmentation est alors
activé sur tous les datagrammes sortants. La valeur par défaut
est commandée au niveau système par le sysctl ip_no_pmtu_disc
pour les sockets SOCK_STREAM, et désactivée pour toutes les
autres. Pour les sockets autres que SOCK_STREAM, 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 les paquets qui sont plus gros que la
MTU du chemin déterminée si cet attribut est activé (avec
l’erreur EMSGSIZE).
Attributs MTU des chemins Signification
IP_PMTUDISC_WANT utiliser une configuration par route
IP_PMTUDISC_DONT ne pas rechercher la MTU des chemins
IP_PMTUDISC_DO toujours chercher la MTU des chemins
IP_PMTUDISC_PROBE Active DF (« Don’t Fragment », ne pas fragmenter), mais ignore les recherches de MTU des chemins
Lorsque la recherche de la PMTU 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 connect(2), la MTU du chemin actuel déterminée
peut être consultée en utilisant l’option IP_MTU de la socket
(par exemple si une erreur EMSGSIZE se produit). Cette valeur
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 (voyez IP_RECVERR). Une nouvelle erreur sera mise
en file 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
devraient le savoir, et les éviter dans leur stratégie de
retransmission.
Pour démarrer le processus de recherche de la MTU du chemin sur
les sockets non connectées, 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,
connecte une socket datagramme à l’adresse de destination en
utilisant connect(2) et consultez 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. 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 le MTU
observé du chemin.
IP_MTU Récupère la MTU du chemin actuellement déterminée pour la
socket. Valable seulement quand la socket a été connectée.
Renvoie un entier. Valable uniquement avec getsockopt(2).
IP_ROUTER_ALERT
Passe tous les paquets à transférer avec l’option IP Router
Alert activée sur cette socket. Ceci 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 leurs
envois. L’attachement des sockets est ignoré, et de tels paquets
ne sont filtrés que par le protocole. Il s’agit d’un attribut
entier.
IP_MULTICAST_TTL
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 fixer 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.
IP_MULTICAST_LOOP
Définit ou lit un entier booléen indiquant si les paquets de
diffusion multiple doivent être renvoyés en boucle aux sockets
locales.
IP_ADD_MEMBERSHIP
Rejoint 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. 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.
Pour la compatibilité, l’ancienne structure ip_mreq est encore
gérée. Elle diffère de ip_mreqn seulement par l’absence du
membre imr_ifindex. Uniquement valable avec setsockopt(2).
IP_DROP_MEMBERSHIP
Quitte un groupe de diffusion multiple. L’argument est une
structure ip_mreqn ou ip_mreq comme pour IP_ADD_MEMBERSHIP.
IP_MULTICAST_IF
Définit le périphérique local pour une socket de diffusion
multiple. L’argument est une structure ip_mreqn ou ip_mreq,
comme pour IP_ADD_MEMBERSHIP.
Lorsqu’une option de socket non valable est fournie, ENOPROTOOPT
est renvoyée.
Sysctls
Le protocole IP gère l’interface sysctl pour configurer certaines
options globales. Les sysctls peuvent être accédés en lisant ou
écrivant dans les fichiers /proc/sys/net/ipv4/* ou en utilisant
l’interface sysctl(2). Les variables 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)
[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 de votre réseau, ou un mandataire
transparent. Il ne faut jamais l’utiliser pour un routeur ou un
hôte normal. Sinon, les communications fragmentées peuvent être
interrompues si les fragments circulent par différents liens. La
défragmentation a également un coût mémoire et processeur
important.
Ceci est automagiquement activé lorsque le masquerading ou le
mandataire transparent sont configurés.
ip_autoconfig
Non documenté.
ip_default_ttl (entier, défaut : 64)
Définit la valeur par défaut du champ Time-To-Live des paquets
sortants. Ceci peut être modifié individuellement pour chaque
socket avec l’option IP_TTL.
ip_dynaddr (booléen, désactivé par défaut)
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.
ip_forward (booléen, désactivé par défaut)
Active le transfert IP avec un attribut booléen. Le transfert IP
peut aussi être configuré interface par interface.
ip_local_port_range
Contient deux entiers qui définissent l’intervalle par défaut
des ports locaux alloués aux sockets. L’allocation démarre avec
le premier numéro et se termine avec le second. Cela ne doit 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.
ip_no_pmtu_disc (booléen, désactivé par défaut)
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.
ip_nonlocal_bind (booléen, désactivé par défaut)
Si défini, permet 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éfinit le temps en secondes de conservation d’un fragment IPv6
en mémoire.
ip6frag_secret_interval (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.
ipfrag_high_thresh (entier), ipfrag_low_thresh (entier)
Si le nombre de fragments IP en file atteint ipfrag_high_thresh,
la file est restreinte à ipfrag_low_thresh. Contient un entier
avec le nombre d’octets.
neigh/*
Voyez arp(7).
Ioctls
Toutes les ioctls décrits dans socket(7) s’appliquent à la couche 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 réservé 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 une socket non bloquante devrait bloquer.
EALREADY
Une opération de connexion est déjà en cours sur une socket non
bloquante.
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 pour 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 une socket déjà connectée.
EMSGSIZE
Un datagramme est plus grand que la MTU du 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 une 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 sur une socket connectée, mais
cette socket n’était pas connectée.
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 Ã
l’autre extrémité.
ESOCKTNOSUPPORT
La socket n’est pas configurée ou un type de socket inconnu a
été demandé.
D’autres erreurs peuvent être déclenchées par les protocoles
supérieurs. Voyez tcp(7), raw(7), udp(7) et socket(7).
VERSIONS
IP_MTU, IP_MTU_DISCOVER, IP_PKTINFO, IP_RECVERR et IP_ROUTER_ALERT sont
de nouvelles options de Linux 2.2. Elles sont aussi spécifiques à Linux
et ne doivent pas servir dans des programmes destinés à être portables.
IP_PMTUDISC_PROBE est une nouveauté de Linux 2.6.22.
La structure ip_mreqn est nouvelle dans Linux 2.2. Linux 2.0 ne gérait
que ip_mreq.
Les sysctls ont été introduits avec Linux 2.2.
NOTES
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. Ce dernier est déconseillé.
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 empilages basés sur BSD utilisent le niveau IPPROTO_IP.
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
une socket packet(7). Ceci 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.
Les ioctls pour configurer les options d’interface spécifiques à IP et
les tables ARP ne sont pas décrites.
Certaines versions de la glibc oublient de déclarer in_pktinfo. Le
contournement consiste à la recopier depuis cette page de manuel dans
le programme.
La réception de l’adresse de destination originale avec MSG_ERRQUEUE
dans msg_name par recvmsg(2) ne fonctionne pas dans certains noyaux
2.2.
VOIR AUSSI
recvmsg(2), sendmsg(2), byteorder(3), ipfw(4), capabilities(7),
netlink(7), raw(7), socket(7), tcp(7), udp(7)
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.
COLOPHON
Cette page fait partie de la publication 3.07 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent être trouvées à l’adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION
Cette page de manuel a été traduite et mise à jour par Christophe
Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise Ã
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
francophone de traduction de Debian.
Veuillez signaler toute erreur de traduction en écrivant Ã
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande « man -L C <section> <page_de_man> ».