1. NOM▲
netdevice - Accès bas niveau aux périphériques réseau sous Linux
2. SYNOPSIS ▲
#include <sys/ioctl.h>
#include <net/if.h>
3. 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. 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.
3.1. 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 : .na
- 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 : - 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. 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. 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.
c s | |
Attributs de périphérique | |
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 | T{ |
Pas de protocole ARP, adresse de destination L2 absente. | |
T} | |
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 | T{ |
Adresse perdue quand l'interfac est arrêtée. | |
T} | |
IFF_LOWER_UP | T{ |
Le pilote signale la disponibilité de niveau L1 (depuis Linux 2.6.17) | |
T} | |
IFF_DORMANT | T{ |
Le pilote signale les someils (depuis Linux 2.6.17) | |
T} | |
IFF_ECHO | T{ |
Renvoyer les paquets envoyé (depuis Linux 2.6.25) | |
T} | |
Écrire les attributs est une opération privilégiée, mais tout processus peut les lire.
c s | |
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 la validation de l'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.
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 des adresses (couche de transport) des interfaces. Cela 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. 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.
4. 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).
5. 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
6. VOIR AUSSI ▲
proc(5), capabilities(7), ip(7), rtnetlink(7)
7. COLOPHON ▲
Cette page fait partie de la publication 3.52 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/.
8. 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 à <>.
Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».