NOM
netdevice - Accès bas-niveau aux périphériques réseau sous Linux.
SYNOPSIS
#include <sys/ioctl.h>
#include <net/if.h>
Cette page de manuel décrit l’interface des socket permettant de
configurer les périphériques réseau.
Linux prend en charge certains ioctls standard pour configurer les
périphériques réseau. Il servent sur n’importe quel descripteur de
socket, quelle qu’en soit la famille ou le type. Ils utilisent une
structure ifreq :
struct ifreq {
char ifr_name[IFNAMSIZ]; /* nom interface */
union {
struct sockaddr ifr_addr;
struct sockaddr ifr_dstaddr;
struct sockaddr ifr_broadaddr;
struct sockaddr ifr_netmask;
struct sockaddr ifr_hwaddr;
short ifr_flags;
int ifr_ifindex;
int ifr_metric;
int ifr_mtu;
struct ifmap ifr_map;
char ifr_slave[IFNAMSIZ];
char ifr_newname[IFNAMSIZ];
char *ifr_data;
};
};
struct ifconf {
int ifc_len; /* taille tampon */
union {
char * ifc_buf; /* adresse tampon */
struct ifreq *ifc_req; /* table de structures */
};
};
Normalement, l’utilisateur indique le périphérique concerné en
remplissant ifr_name avec le nom de l’interface. Tous les autres
membres de la structure peuvent partager la mémoire.
Ioctls
Si un ioctl est indiqué comme privilégié, alors il nécessite un UID
effectif nul ou la capacité CAP_NET_ADMIN. Sinon, il renverra l’erreur
EPERM.
SIOCGIFNAME
En utilisant ifr_ifindex, renvoie le nom de l’interface dans
ifr_name. C’est le seul ioctl qui renvoie un résultant dans
ifr_name.
SIOCGIFINDEX
Retrouve le numéro d’interface et le place dans ifr_ifindex.
SIOCGIFFLAGS, SIOCSIFFLAGS
Lire ou écrire les attributs actifs du périphérique. ifr_flags
est un mot contenant un masque de bits combinant les valeurs
suivantes :
Device flags
IFF_UP Interface fonctionne.
IFF_BROADCAST Adresse de broadcast valide.
IFF_DEBUG Attribut interne de débogage.
IFF_LOOPBACK Interface de type loopback.
IFF_POINTOPOINT Interface de type point-à-point.
IFF_RUNNING Resources allouées.
IFF_NOARP Pas de protocole Arp, adresse de destination L2 absente.
IFF_PROMISC Interface en mode promiscuous.
IFF_NOTRAILERS N’utilise pas les postambules.
IFF_ALLMULTI Accepte tous les paquets multicast.
IFF_MASTER Maître d’un système de répartition de charge.
IFF_SLAVE Esclave d’un système de répartition de charge.
IFF_MULTICAST Support multicast.
IFF_PORTSEL Capable de sélectionner le média via ifmap.
IFF_AUTOMEDIA Sélection automatique du média.
IFF_DYNAMIC Adresse perdue quand l’interfac est arrêtée.
IFF_LOWER_UP Le pilote signale la disponibilité de niveau L1 (depuis Linux 2.6.17)
IFF_DORMANT Le pilote signale les someils (depuis Linux 2.6.17)
IFF_ECHO Renvoyer les paquets envoyé (depuis Linux 2.6.25)
Écrire les attributs est une opération privilégiée, mais tout
processus peut les lire.
SIOCGIFMETRIC, SIOCSIFMETRIC
Lire ou écrire la métrique du périphérique en utilisant
ifr_metric. Ceci n’est pas encore implémenté, il renvoie dans
ifr_metric la valeur 0 si on essaye de lire, et renvoie l’erreur
EOPNOTSUPP si on essaye d’écrire.
SIOCGIFMTU, SIOCSIFMTU
Lire ou écrire le MTU (Maximum Transfer Unit) du périphérique
avec ifr_mtu. Fixer le MTU est une opération privilégiée. Fixer
un MTU trop petit peut faire planter le noyau.
SIOCGIFHWADDR, SIOCSIFHWADDR
Lire ou écrire l’adresse matérielle du périphérique en utilisant
ifr_hwaddr. Cette adresse matérielle est indiquée dans une
structure sockaddr. sa_family contient le type de périphérique
ARPHRD_*, sa_data est l’adresse matérielle L2 commençant par
l’octet 0. Écrire l’adresse matérielle est une opération
privilégiée.
SIOCSIFHWBROADCAST
Fixer l’adresse de broadcast du périphérique à partir de
ifr_hwaddr. C’est une opération privilégiée.
SIOCGIFMAP, SIOCSIFMAP
Lire ou écrire les paramètres matériels de l’interface en
utilisant ifr_map. L’écriture des paramètres est une opération
privilégiée.
struct ifmap {
unsigned long mem_start;
unsigned long mem_end;
unsigned short base_addr;
unsigned char irq;
unsigned char dma;
unsigned char port;
};
L’interprétation de la structure ifmap dépend du pilote de
périphérique et de l’architecture.
SIOCADDMULTI, SIOCDELMULTI
Ajouter ou supprimer une adresse des filtres multicast du niveau
liaison du périphérique en utilisant ifr_hwaddr. Ce sont des
opérations privilégiées. Voir aussi packet(7) pour une autre
possibilité.
SIOCGIFTXQLEN, SIOCSIFTXQLEN
Lire ou écrire la taille de la file d’émission du périphérique
avec ifr_qlen. L’écriture de la taille de la file est une
opération privilégiée.
SIOCSIFNAME
Changer le nom de l’interface indiquée dans ifr_name pour
ifr_newname. C’est une opération privilégiée. Elle n’est
possible que si l’interface n’est pas en fonctionnement.
SIOCGIFCONF
Renvoie une liste des adresses (couche de transport) des
interfaces. Ceci ne fonctionne actuellement qu’avec les adresses
AF_INET (IPv4) pour des raisons de compatibilité. L’utilisateur
passe une structure ifconf en argument à l’ioctl. Elle contient
un pointeur sur une table de structures ifreq dans son membre
ifc_req et la longueur en octets dans ifc_len. Le noyau remplit
les ifreqs avec toutes les adresses L3 des interfaces en
fonctionnement : ifr_name contient le nom de l’interface (eth0:1
etc.), et ifr_addr l’adresse. Le noyau renvoie la longueur
réelle dans ifc_len. Si ifc_len est égal à la longueur d’origine
du tampon, on a probablement atteint la limite, et il est
conseillé de recommencer avec un tampon plus grand. S’il
réussit, l’ioctl renvoie 0, sinon il renvoie -1. Atteindre la
limite du tampon n’est pas considéré comme une erreur.
La plupart des protocoles prennent en charge leurs propres ioctls pour
configurer les options d’interface spécifiques aux protocoles. Voir les
pages de manuel correspondante. Pour configurer les adresses IP, voir
ip(7).
De plus, certains périphériques prennent en charge des ioctls privés,
non décrits ici.
NOTES
Strictement parlant, SIOCGIFCONF est spécifique à IP et devrait se
trouver dans ip(7).
Les noms des interfaces sans adresses, ou celles qui n’ont pas
l’attribut IFF_RUNNING peuvent être trouvés dans /proc/net/dev.
Les adresses IPv6 locales se trouvent dans /proc/net ou grâce à
rtnetlink(7).
BOGUES
Dans la GlibC 2.1 il manque la macro ifr_newname dans <net/if.h>.
Ajoutez les lignes suivantes dans votre programme :
#ifndef ifr_newname
#define ifr_newname ifr_ifru.ifru_slave
#endif
VOIR AUSSI
proc(5), capabilities(7), ip(7), rtnetlink(7)
COLOPHON
Cette page fait partie de la publication 3.23 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> ».