NETDEVICE
Section : Manuel de l'administrateur Linux (
7)
Mise à jour de la version anglaise : 2 mai 1999
Index
Menu principal
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 socket permettant de configurer
les périphériques réseau.
Linux supporte des 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.
|
É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 supportent leurs propres ioctls pour configurer
les options d'interface spécifiques aux protocoles.
Voir les pages de manuel correspondantes.
Pour configurer les adresses IP, voir
ip(7).
De plus, certains périphériques supportent 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)
TRADUCTION
Ce document est une traduction réalisée par Christophe Blaess
<http://www.blaess.fr/christophe/> le 25 juillet 2003
et révisée le 17 juillet 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation
française de qualité. La version anglaise la plus à jour de ce document est
toujours consultable via la commande : « LANG=C man 7 netdevice ».
N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute
erreur dans cette page de manuel.
Index
- NOM
-
- SYNOPSIS
-
- DESCRIPTION
-
- Ioctls
-
- NOTES
-
- BOGUES
-
- VOIR AUSSI
-
- TRADUCTION
-
Dernière mise à jour : 17 juillet 2008