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_UPInterface fonctionne.
IFF_BROADCASTAdresse de broadcast valide.
IFF_DEBUGAttribut interne de débogage.
IFF_LOOPBACKInterface de type loopback.
IFF_POINTOPOINTInterface de type point-à-point.
IFF_RUNNINGResources allouées.
IFF_NOARPPas de protocole Arp, adresse de destination L2 absente.
IFF_PROMISCInterface en mode promiscuous.
IFF_NOTRAILERSN'utilise pas les postambules.
IFF_ALLMULTIAccepte tous les paquets multicast.
IFF_MASTERMaître d'un système de répartition de charge.
IFF_SLAVEEsclave d'un système de répartition de charge.
IFF_MULTICASTSupport multicast.
IFF_PORTSELCapable de sélectionner le média via ifmap.
IFF_AUTOMEDIASé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