Provided by:
manpages-fr_1.67.0-1_all 
NOM
ip - Implémentation Linux du protocole IPv4.
SYNOPSIS
#include <sys/socket.h>
#include <netinet/in.h>
tcp_socket = socket(PF_INET, SOCK_STREAM, 0);
raw_socket = socket(PF_INET, SOCK_RAW, protocol);
udp_socket = socket(PF_INET, SOCK_DGRAM, protocol);
DESCRIPTION
Linux implémente le Protocole Internet (IP) version 4, décrit dans les
RFC 791 et RFC 1122. ip contient une implémentation du multicasting
niveau 2 conforme à la RFC 1112. Elle contient aussi un routeur IP
comprenant un filtre de paquets.
L’interface de programmation est compatible avec les sockets BSD. Pour
plus de renseignements sur les sockets, voir socket(7).
Une socket IP est créée par la fonction socket(2) invoquée sous la
forme socket(PF_INET, type_socket, protocole). les types valides des
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 valides 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 valide dont la RFC 1700
précise les numéros assignés.
Lorsqu’un processus veut recevoir de nouveaux paquets entrants ou
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 on invoque listen(2) ou connect(2) sur une socket non
affectée, elle est automatiquement attachée à un port libre aléatoire,
avec l’adresse locale fixée sur 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 ce
drapeau, 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 */
u_int16_t sin_port; /* port dans l’ordre d’octets réseau */
struct in_addr sin_addr; /* adresse Internet */
};
/* Adresse Internet */
struct in_addr {
u_int32_t s_addr; /* Adresse dans l’ordre d’octets réseau */
};
sin_family est toujours rempli avec 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érieures à 1024
sont dits réservés. Seuls les processus avec un UID effectif nul ou la
capacité CAP_NET_BIND_SERVICE peuvent appeler bind(2) pour ces ports.
Notez que le protocole IPv4 en tant que tel n’a pas de concept de
ports, ils sont 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 addr de la structure
struct in_addr contient l’adresse de l’interface de l’hôte, dans
l’ordre des octets du réseau. in_addr ne doit être manipulé qu’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
unicast, broadcast et multicast. Les adresses unicast décrivent une
interface unique d’un hôte, les adresses broadcast correspondent à tous
les hôtes d’un réseau, et les adresses multicast représentent tous les
hôtes d’un groupe multicast. Les datagrammes vers des adresses
broadcast 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 unicast.
Remarquez que l’adresse et le port sont toujours stockés dans l’ordre
des octets du réseau. Cela signifie qu’il faut invoquer htons(3) sur le
numéro attribué à un port. Toutes les fonctions de manipulation
d’adresse et port de la bibliothèque standard fonctionne dans l’ordre
du réseau.
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 à le même effet que INADDR_ANY pour des raisons
historiques.
OPTIONS DES SOCKETS
IP supporte quelques options des sockets spécifiques aux protocoles,
fixées avec setsockopt(2) et consultées avec getsockopt(2). Le niveau
d’option de socket pour IP est SOL_IP. Un attribut booléen en faux
quand il est nul, et vrai sinon.
IP_OPTIONS
Fixe ou lit les options IP Ã envoyer avec chaque paquet sur
cette socket. Les arguments sont un pointeur sur un buffer
contenant les options et la longueur des options. L’appel
setsockopt(2) fixe les options IP associées à une socket. La
taille maximale des options pour IPv4 est 40 octets. Voir 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é à la socket, avec les
options de routage inversées. Les paquets entrants ne peuvent
pas modifier les options après que la connexion est établie. Le
traitement des options de routage des paquets entrant est
désactivé par défaut, et peut être validé en utilisant la
requête sysctl accept_source_route. Les autres options, comme
l’horodatage sont toujours traitées. Pour les socket
datagrammes, les options IP ne peuvent être fixées que par
l’utilisateur local. L’appel de getsockopt(2) avec IP_OPTIONS
remplit le buffer fourni avec les options d’émission actuelles.
IP_PKTINFO
Fournit un message IP_PKTINFO de service, qui contient une
structure pktinfo fournissant quelques informations à propos du
paquet entrant. Ceci ne fonctionne que pour les sockets
orientées datagrammes. L’argument est un drapeau indiquant à la
socket sur 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 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 si
ipi_spec_dest est non nul, alors il sera utilisé comme adresse
source pour la recherche dans la table de routage, et pour fixer
les options de routage IP. Si ipi_ifindex est non nul,
l’adresse local principale de l’interface indiquée par cet index
écrase ipi_spec_dst pour a table de routage.
IP_RECVTOS
Le message de service IP_TOS est passé avec les paquets
entrants. Il contient un octet qui décrit le champ Type-Of-
Service/Précédence de l’en-tête du paquet. Il s’agit d’un
drapeau entier booléen.
IP_RECVTTL
Passer un message de contrôle IP_RECVTTL avec le champ Time-To-
Live du paquet reçu comme argument sous forme d’octet. Non
supporté pour les sockets SOCK_STREAM.
IP_RECVOPTS
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. Non
supporté pour les sockets SOCK_STREAM.
IP_RETOPTS
Comme IP_RECVOPTS mais renvoie les options non traitées, avec
les options d’horodatage et de routage non remplies pour ce saut
(hop).
IP_TOS Fixe ou consulte le champs Type-Of-Service (TOS) envoyé avec
chaque paquet IP sortant de cette socket. Il 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 en 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 sont invalides 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 un UID effectif nul, ou la capacité CAP_NET_ADMIN. La
priorité peut aussi être indiquée d’une manière indépendante du
protocole avec les options (SOL_SOCKET, SO_PRIORITY) de socket
(voir socket(7)).
IP_TTL Fixer ou consulter le contenu actuel du champ Time-To-Live
envoyé avec chaque paquet sortant de cette socket.
IP_HDRINCL
L’utilisateur doit fournir un en-tête ip avant les données
proprement dites. Uniquement valides pour les sockets SOCK_RAW.
Voir raw(7) pour plus de détail. Lorsque cet attribut est
activé, les valeurs fixées 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 cet
attribut est activé sur une socket datagramme, les erreurs
seront mémorisées dans une file particulière pour la socket.
Quand l’utilisateur détecte un échec d’une opération sur la
socket, les erreurs peuvent être examinées en invoquant
recvmsg(2) avec l’attribut MSG_ERRQUEUE. La structure
sock_extended_err décrivant l’erreur sera passé comme message de
service ayant le type IP_RECVERR et le niveau SOL_IP. Ceci
permet une gestion d’erreur fiable sur les sockets non
connectées. La partie "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 {
u_int32_t ee_errno; /* numéro d’erreur */
u_int8_t ee_origin; /* origine de l’erreur */
u_int8_t ee_type; /* type */
u_int8_t ee_code; /* code */
u_int8_t ee_pad;
u_int32_t ee_info; /* autres informations */
u_int32_t ee_data; /* autres données */
/* champs supplémentaires éventuels */
};
struct sockaddr *SOCK_EE_OFFENDER(struct sock_extended_err *);
ee_errno contient le numéro de l’erreur mise en file. ee_origin
est le code de l’origine de l’erreur. Les autres champs sont
spécifiques au protocole. La macro SOCK_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 sont indé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 remplis avec les champs type et code de l’en-tête ICMP.
ee_info contient le MTU déterminé 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.
SOCK_EE_OFFENDER. Le champ sin_family de l’adresse fournie par
SOCK_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.) valides pour la socket, et contenues
dans le paquet en erreur sont transmises comme messages de
contrôle. Le contenu original du paquet causant l’erreur est
renvoyé comme charge normale. Notez que TCP n’a pas de file
d’erreurs ; MSG_ERRQUEUE est illégal sur les sockets
SOCK_STREAM. Ainsi, toutes les erreurs sont renvoyées par les
fonctions sur les sockets ou par SO_ERROR seulement.
Pour les sockets raw, IP_RECVERR valide 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é par défaut.
IP_MTU_DISCOVER
Fixe ou consulte l’attribut de recherche du MTU du chemin (Path
MTU - PMTU) pour une socket. Lorsqu’il est activé, Linux
effectuer la recherche du MTU de 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é pour toutes les autres.
Pour les sockets autres que SOCK_STREAM il est de la
responsabilité de l’utilisateur d’empaqueter les données dans
des blocs inférieurs au MTU et d’assurer la retransmission si
besoin est. Le noyau rejettera les paquets qui sont plus gros
que le MTU déterminé si cet attribut est activé (avec l’erreur
EMSGSIZE ).
Attribut MTU chemin Signification
IP_PMTUDISC_WANT Utiliser une configuration par route.
IP_PMTUDISC_DONT Ne pas rechercher le MTU par chemin.
IP_PMTUDISC_DO Toujours rechercher le MTU par chemin.
Lorsque la recherche du PMTU est active, le noyau garde
automatiquement une trace des MTU des chemins par hôte
destinataire. Lorsqu’il est connecté à un correspondant
spécifique avec connect(2), le MTU du chemin actuellement
déterminé peut être consulté en utilisant l’option IP_MTU de la
socket (par exemple si une erreur EMSGSIZE se produit). Cette
valeur peut changer dans le temps. Pour les sockets sans
connexions, avec plusieurs destinations, le nouveau MTU pour une
destination donnée peut également être obtenu en utilisant la
file d’erreur (voir IP_RECVERR). Une nouvelle erreur sera mise
en file pour chaque mise à jour du MTU.
Durant la recherche du MTU, les paquets initiaux des sockets
datagrammes 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 du MTU par 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 du MTU du chemin.
Pour obtenir une estimation initiale du MTU d’un chemin
connectez une socket datagramme à l’adresse de destination en
utilisant connect(2) et consultez le MTU en appelant
getsockopt(2) avec l’option IP_MTU.
IP_MTU Renvoie le MTU du chemin actuellement déterminé pour la socket.
Seulement valide quand la socket a été connectée. Renvoie un
entier. Uniquement valide pour un getsockopt(2).
IP_ROUTER_ALERT
Passer tous les futurs paquets redirigés (forwarded) avec
l’option IP Router Alert activée sur cette socket. Uniquement
valide pour les sockets raw. Ceci sert par exemple pour les
démons RSVP de l’espace utilisateur. Les paquets enregistrés ne
sont pas redirigés par le noyau, c’est la responsabilité de
l’utilisateur de les renvoyer. 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
Fixe ou consulte la valeur du champs Time-To-Live des paquets
multicast sortant sur cette socket. Il est très importants pour
les paquets multicast de fixer le TTL le plus petit possible. La
valeur par défaut est 1, ce qui signifie que les paquet
multicast 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
Lit ou écrit un entier booléen indiquant si les paquets
multicast doivent être renvoyés en boucle aux sockets locales
concernées.
IP_ADD_MEMBERSHIP
Rejoindre un groupe multicast. L’argument est une structure
struct ip_mreqn.
struct ip_mreqn {
struct in_addr imr_multiaddr; /* Adresse IP du groupe multicast */
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 multicast que
l’application veut rejoindre ou quitter. Il doit s’agir d’une
adresse multicast valide. imr_address est l’adresse de
l’interface locale avec laquelle le système doit joindre le
groupe multicast. 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 pour 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
supportée. Elle diffère de ip_mreqn seulement par l’absence du
membre imr_ifindex. Uniquement valide pour setsockopt(2).
IP_DROP_MEMBERSHIP
Quitter un groupe multicast. L’argument est une structure
ip_mreqn ou ip_mreq comme pour IP_ADD_MEMBERSHIP.
IP_MULTICAST_IF
Fixer le périphérique local pour une socket multicast.
L’argument est une structure ip_mreqn ou ip_mreq comme pour
IP_ADD_MEMBERSHIP.
Lorsqu’une option de socket invalide est fournie, ENOPROTOOPT
est renvoyée.
SYSCTLS
Le protocole IP support l’interface sysctl pour configurer certaines
options globales. Les sysctl peuvent être réalisés en lisant ou
écrivant dans les fichiers /proc/sys/net/ipv4/* ou en utilisant
l’interface sysctl(2).
ip_default_ttl
Fixe 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_forward
Active la redirection IP (forwarding) avec un attribut booléen.
La redirection IP peut aussi être configurée interface par
interface.
ip_dynaddr
Active la réécriture dynamique des adresses de socket et du
masquerading lors des changements d’adresse d’interface. Cela
sert pour les liaisons par modem, avec des adresses IP
variables. 0 signifie aucune réécriture, 1 les autorise, et 2
demande un mode volubile.
ip_autoconfig
Non documenté.
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. Notez que 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 firewalls
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 firewall.
ip_no_pmtu_disc
Désactiver la recherche par défaut des MTU par chemin pour les
sockets TCP. La recherche du MTU par chemin peut échouer avec
des firewalls mal configurés (qui rejettent tous les paquets
ICMP) ou les interfaces mal configurées (par exemple lien
point-à -point où les deux extrémités n’ont pas le même MTU). Il
vaut mieux corriger le routeur défectueux que de supprimer
globalement la recherche du MTU par chemin, car cette dernière
option augmente les coûts du réseau.
ipfrag_high_thresh, ipfrag_low_thresh
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.
ip_always_defrag
[Nouveauté des noyaux 2.2.13, dans les noyaux précédents c’était
une option de compilation nommée CONFIG_IP_ALWAYS_DEFRAG]
Lorsque ce drapeau booléen et actif (différent de zéro), les
fragments entrants (morceaux de paquets IP obtenus car un hôte
entre l’origine et la destination a décidé que les paquets
étaient trop grands et les a coupé en morceaux) seront
réassemblés (défragmentés) avant d’être traités, même s’ils
doivent être redirigés (forwarded).
À utiliser uniquement pour un firewall qui est le seul lien
d’entrée de votre réseau, ou un proxy transparent. Ne jamais
activer pour un routeur normal ou un hôte. Sinon, les
communications fragmentées peuvent être interrompues lorsque les
fragments circulent par différents liens. La défragmentation a
également un coût mémoire et CPU non négligeable.
Ceci est automatiquement activé lorsque le masquerading ou le
proxy transparent est configuré.
neigh/*
voir arp(7).
IOCTLS
Toutes les ioctls décrites dans socket(7) s’appliquent à la couche IP.
Les ioctls pour configurer les firewall sont documentés dans ipfw(7)
provenant du paquet ipchains.
Les ioctls pour configurer les paramètres génériques des périphériques
sont décrits dans netdevice(7).
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
broadcast sans précaution. Pour les nouveaux protocoles applicatifs, il
vaut mieux utiliser un groupe multicast plutôt que le broadcast. 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 à l’option
IP_PKTINFO plus générale pour effectuer ce travail.
ERREURS
ENOTCONN
L’opération n’est définie que pour une socket connectée, mais la
socket ne l’était pas.
EINVAL Un argument invalide a été transmis. Pour les émissions, cela
peut être causé par un envoi vers une route trou noir.
EMSGSIZE
Datagramme plus grand que le MTU du chemin, et ne peut pas être
fragmenté.
EACCES L’utilisateur essaye de réaliser une opération sans avoir les
permissions nécessaires. Cela inclut : L’envoi d’un paquet vers
une adresse broadcast sans avoir activé l’attribut SO_BROADCAST.
L’envoi d’un paquet vers une route interdite. Modification du
paramétrage du firewall sans la capacité CAP_NET_ADMIN ou un UID
effectif nul. Attachement à un port réservé sans la capacité
CAP_NET_BIND_SERVICE ou un UID effectif nul.
EADDRINUSE
Tentative d’attachement à une adresse déjà utilisée.
ENOPROTOOPT et EOPNOTSUPP
Passage d’une option de socket invalide.
EPERM L’utilisateur n’a pas la permission de fixer une priorité haute,
de changer la configuration ou d’envoyer des signaux au groupe
ou au processus demandé.
EADDRNOTAVAIL
Une interface inexistante ou une adresse source non locale ont
été réclamées.
EAGAIN L’opération sur une socket non-bloquante devrait bloquer.
ESOCKTNOSUPPORT
La socket n’est pas configurée ou on a demandé un type de socket
inconnu.
EISCONN
connect(2) a été appelé sur une socket déjà connectée.
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 accept(2).
EPIPE La connexion a été fermée prématurément ou terminée par le
correspondant.
ENOENT SIOCGSTAMP a été appelé sur une socket sans qu’aucun paquet n’y
soit disponible.
EHOSTUNREACH
Aucune route valide dans la table ne correspond à l’adresse de
destination. Cette erreur peut être due à un message ICMP d’un
routeur distant ou à la table de routage interne.
ENODEV Le périphérique réseau n’est pas disponible ou est incapable
d’envoyer de l’IP.
ENOPKG Un sous-système du noyau n’est pas configuré.
ENOBUFS, ENOMEM
Pas assez de mémoire. Cela signifie souvent que l’allocation
mémoire est contrainte par les limites du buffer de socket, pas
par la mémoire système, mais ce n’est pas toujours sûr.
D’autres erreurs peuvent être déclenchées par les protocoles
supérieurs. Voir tcp(7), raw(7), udp(7) et socket(7).
VERSIONS
IP_PKTINFO, 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.
struct ip_mreqn est nouvelle dans Linux 2.2. Sous Linux 2.0, seule
existait ip_mreq.
Les sysctls ont été introduits avec Linux 2.2.
COMPATIBILITÉ
Pour la compatibilité avec Linux 2.0, la syntaxe obsolète
socket(PF_INET, SOCK_RAW, protocole) est encore supportée pour ouvrir
une socket packet(7). Cela est déconseillé, et doit être remplacé par
un socket(PF_PACKET, SOCK_RAW, protocole) La principale différence est
la nouvelle structure d’adresse sockaddr_ll pour les informations
génériques du niveau 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 la déclaration in_pktinfo. Le
remède est de recopier dans votre programme la description de cette
page de manuel.
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), ipfw(4), 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.
TRADUCTION
Christophe Blaess, 2001-2003.