NOM¶
netdevice - Accès bas niveau aux périphériques
réseau sous Linux
SYNOPSIS¶
#include <sys/ioctl.h>
#include <net/if.h>
DESCRIPTION¶
Cette page de manuel décrit l'interface des sockets 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. La plupart
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;
};
};
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 :
| Attributs de périphérique |
|
| IFF_UP |
Interface fonctionne. |
| IFF_BROADCAST |
Adresse de broadcast valable. |
| 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 par ifmap. |
| IFF_AUTOMEDIA |
Sélection automatique du média. |
| IFF_DYNAMIC |
Adresse perdue quand l'interface 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 sommeils (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.
- SIOCGIFPFLAGS, SIOCSIFPFLAGS
- Lire ou écrire les attributs (privés) étendus du
périphérique. ifr_flags est un mot contenant un
masque de bits combinant les valeurs suivantes :
| Attributs privés |
|
| IFF_802_1Q_VLAN |
Périphérique de type VLAN 802.1Q. |
| IFF_EBRIDGE |
Périphérique de pontage Ethernet. |
| IFF_SLAVE_INACTIVE |
Esclave de bonding inactif. |
| IFF_MASTER_8023AD |
Maître de bonding 802.3ad. |
| IFF_MASTER_ALB |
Maître de bonding balance-alb. |
| IFF_BONDING |
Maître ou esclave de bonding. |
| IFF_SLAVE_NEEDARP |
ARP nécessaires pour validation d’interface. |
| IFF_ISATAP |
Interface de type ISATAP RFC4214. |
Écrire les attributs (privés) étendus du
périphérique est une opération
privilégiée.
- SIOCGIFADDR, SIOCSIFADDR
- Lire ou écrire l'adresse du périphérique en utilisant
ifr_addr. Écrire l'adresse du périphérique est
une opération privilégiée. Pour assurer la
compatibilité, seules les adresses AF_INET sont
acceptées ou renvoyées.
- SIOCGIFDSTADDR, SIOCSIFDSTADDR
- Lire ou écrire l'adresse de destination d'un
périphérique point-à-point en utilisant
ifr_dstaddr. Pour assurer la compatibilité, seules les
adresses AF_INET sont acceptées ou renvoyées.
Écrire l'adresse de destination est une opération
privilégiée.
- SIOCGIFBRDADDR, SIOCSIFBRDADDR
- Lire ou écrire l'adresse de broadcast pour un
périphérique en utilisant ifr_brdaddr. Pour assurer
la compatibilité, seules les adresses AF_INET sont
acceptées ou renvoyées. Écrire l'adresse de broadcast
est une opération privilégiée.
- SIOCGIFNETMASK, SIOCSIFNETMASK
- Lire ou écrire le masque réseau pour un
périphérique en utilisant ifr_netmask. Pour assurer
la compatibilité, seules les adresses AF_INET sont
acceptées ou renvoyées. Écrire le masque
réseau est une opération privilégiée.
- SIOCGIFMETRIC, SIOCSIFMETRIC
- Lire ou écrire la métrique du périphérique en
utilisant ifr_metric. Ce n'est pas encore implémenté,
il renvoie dans ifr_metric la valeur 0 en cas de tentative
de lecture, et renvoie l'erreur EOPNOTSUPP en cas de tentative
d’écriture.
- SIOCGIFMTU, SIOCSIFMTU
- Lire ou écrire le MTU (Maximum Transfer Unit) du
périphérique avec ifr_mtu. Définir le MTU est
une opération privilégiée. Définir 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
- Définir 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. Consultez 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
- Renvoyer une liste d’adresses (couche de transport) des interfaces.
Cela ne fonctionne actuellement qu'avec les adresses AF_INET (IPv4)
pour des raisons de compatibilité. Contrairement aux autres, cet
ioctl passe une structure ifconf :
struct ifconf {
int ifc_len; /* taille tampon */
union {
char * ifc_buf; /* adresse tampon */
struct ifreq *ifc_req; /* table de structures */
};
};
Si ifc_req est NULL, SIOCGIFCONF renvoie la taille de tampon
nécessaire en octet pour recevoir toutes les adresses disponibles
dans ifc_len. Sinon, ifc_req contient un pointeur vers un
tableau de structures ifreq à remplir avec toutes les
adresses d’interfaces L3 actuellement actives. ifc_len
contient la taille du tableau en octet. Dans toutes les structures
ifreq, ifr_name recevra le nom d’interface et
ifr_addr l'adresse. Le nombre d’octets vraiment
transférés est renvoyé dans ifc_len.
Si la taille indiquée par ifc_len n’est pas suffisante
pour stocker toutes les adresses, le noyau ignorera celles en trop et
renverra un état de réussite. Si cela arrive, aucun moyen
fiable n’existe pour détecter cette condition. Vous devriez
donc soit déterminer la taille de tampon nécessaire au
préalable en appelant SIOCGIFCONF avec ifc_req
défini à NULL, soit réessayer l’appel avec un
plus gros tampon si la différence entre la valeur de retour
ifc_len et sa valeur initiale est supérieure à
sizeof(struct ifreq).
En cas d’erreur d’accès aux structures ifconf ou
ifreq, EFAULT sera renvoyé.
La plupart des protocoles prennent en charge leurs propres ioctls pour
configurer les options d'interface spécifiques aux protocoles.
Consultez les pages de manuel correspondantes. Pour configurer les adresses
IP, consultez
ip(7).
De plus, certains périphériques prennent en charge des ioctls
privés, non décrits ici.
NOTES¶
Strictement parlant,
SIOCGIFCONF et les autres ioctls qui n'acceptent ou
ne renvoient que des adresses de socket
AF_INET sont spécifiques
à IP et devraient 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.65 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¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Christophe Blaess <
http://www.blaess.fr/christophe/> (1996-2003), Alain
Portal <
http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et
l'équipe francophone de traduction de Debian (2006-2009).
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> ».