netdevice
Table des matières
Retour à l'index
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 passent 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;
};
};
AF_INET6 est une exception. Il passe une structure in6_ifreq :
struct in6_ifreq {
struct in6_addr ifr6_addr;
u32 ifr6_prefixlen;
int ifr6_ifindex; /* Interface index */
};
Normalement, l'utilisateur indique le périphérique concerné en réglant
ifr_name comme nom de l'interface ou ifr6_ifindex comme indice 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
valant zéro ou la capacité CAP_NET_ADMIN. Sinon, il renverra l'erreur
EPERM.
- SIOCGIFNAME
-
Si ifr_ifindex est indiqué, renvoyer le nom de l'interface dans
ifr_name. C'est le seul ioctl qui renvoie son résultat dans ifr_name.
- SIOCGIFINDEX
-
Retrouver l’indice d'interface de l’interface dans ifr_ifindex.
- SIOCGIFFLAGS
-
SIOCSIFFLAGS
Obtenir ou définir le mot d’indicateur en cours du
périphérique. ifr_flags contient un masque de bits des valeurs suivantes :
Indicateur de périphérique
|
| IFF_UP | Interface en cours de fonctionnement.
|
| IFF_BROADCAST | Ensemble d’adresses de broadcast valables.
|
| IFF_DEBUG | Indicateur interne de débogage.
|
| IFF_LOOPBACK | L’interface est une interface de boucle locale.
|
| IFF_POINTOPOINT | L’interface est une liaison point à point.
|
| IFF_RUNNING | Ressources allouées.
|
| IFF_NOARP |
Pas de protocole ARP, adresse de destination niveau 2 absente.
|
| IFF_PROMISC | L’interface est en mode promiscuité.
|
| IFF_NOTRAILERS | Pas d’utilisation des postambules.
|
| IFF_ALLMULTI | Réception de 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 | Prise en charge du multicast.
|
| IFF_PORTSEL | Possibilité de sélectionner le type de média à l’aide de ifmap.
|
| IFF_AUTOMEDIA | Sélection automatique du média active.
|
| IFF_DYNAMIC |
Les adresses sont perdues quand l'interface s’arrête.
|
| IFF_LOWER_UP | Le pilote signale la disponibilité du niveau 1 (depuis Linux 2.6.17).
|
| IFF_DORMANT | Le pilote signale l’inactivité (depuis Linux 2.6.17).
|
| IFF_ECHO | Répéter les paquets envoyés (depuis Linux 2.6.25).
|
Définir le mot d’indicateur actif est une opération privilégiée, mais tout
processus peut le lire.
- SIOCGIFPFLAGS
-
SIOCSIFPFLAGS
Obtenir ou définir les indicateurs (privés) étendus du
périphérique. ifr_flags est un masque de bits des valeurs suivantes :
Indicateurs privés
|
| IFF_802_1Q_VLAN | L’interface est un périphérique VLAN 802.1Q.
|
| IFF_EBRIDGE | L’interface est un périphérique de pont Ethernet.
|
| IFF_SLAVE_INACTIVE | L’interface est un esclave inactif d’agrégation de liens.
|
| IFF_MASTER_8023AD | L’interface est un maître 802.3ad d’agrégation de liens.
|
| IFF_MASTER_ALB | L’interface est un maître d’agrégation répartie par ALB.
|
| IFF_BONDING | L’interface est un maître ou un esclave d’agrégation.
|
| IFF_SLAVE_NEEDARP | L’interface nécessite ARP pour la validation.
|
| IFF_ISATAP | L’interface est de type ISATAP RFC4214.
|
Définir les indicateurs (privés) étendus du périphérique est une opération
privilégiée.
- SIOCGIFADDR
-
SIOCSIFADDR
SIOCDIFADDR
Obtenir, définir ou supprimer l’adresse du périphérique en utilisant
ifr_addr ou ifr6_addr avec ifr6_prefixlen. Définir ou supprimer
l’adresse d’interface est une opération privilégiée. Pour la compatibilité,
SIOCGIFADDR renvoie seulement les adresses AF_INET, SIOCSIFADDR
accepte les adresses AF_INET et AF_INET6 et SIOCDIFADDR supprime
seulement les adresses AF_INET6. Une adresse AF_INET peut être
supprimée en la définissant à zéro à l’aide de SIOCSIFADDR.
- SIOCGIFDSTADDR
-
SIOCSIFDSTADDR
Obtenir ou définir 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. Définir l'adresse de
destination est une opération privilégiée.
- SIOCGIFBRDADDR
-
SIOCSIFBRDADDR
Obtenir ou définir 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. Définir l'adresse de broadcast est
une opération privilégiée.
- SIOCGIFNETMASK
-
SIOCSIFNETMASK
Obtenir ou définir 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. Définir le masque réseau est une
opération privilégiée.
- SIOCGIFMETRIC
-
SIOCSIFMETRIC
Obtenir ou définir la métrique du périphérique en utilisant
ifr_metric. Cela n'est pas encore implémenté. Il définit ifr_metric à
la valeur 0 en cas de tentative de lecture, et renvoie l'erreur
EOPNOTSUPP en cas de tentative de définition.
- SIOCGIFMTU
-
SIOCSIFMTU
Obtenir ou définir 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
Obtenir ou définir 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. Définir
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
Obtenir ou définir les paramètres matériels de l'interface en utilisant
ifr_map. Définir ces 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
Obtenir ou définir la taille de la file d’attente de transmission du
périphérique avec ifr_qlen. La définition 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 du tampon */
union {
char *ifc_buf; /* Adresse du tampon */
struct ifreq *ifc_req; /* Tableau des 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
SIOCGIFCONF et les autres ioctls qui n'acceptent ou ne renvoient que des
adresses de socket AF_INET sont spécifiques à IP et devraient plutôt être
documentés dans ip(7).
Les noms des interfaces sans adresse, ou celles qui n'ont pas l'indicateur
IFF_RUNNING défini peuvent être trouvés dans /proc/net/dev.
Les adresses AF_INET6 IPv6 peuvent être trouvées dans
/proc/net/if_inet6 ou à l’aide de rtnetlink(7). L’ajout d’une nouvelle
adresse IPv6 ou la suppression d’une existante peut être réalisé à l’aide de
SIOCSIFADDR et SIOCDIFADDR ou à l’aide de rtnetlink(7). La
récupération ou la modification d’une adresse IPv6 d’une interface point à
point est possible seulement à l’aide de rtnetlink(7).
BOGUES
Dans la glibc 2.1, il manque la macro ifr_newname dans
<net/if.h>. Comme solution, 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
La traduction française de cette page de manuel a été créée par
Christophe Blaess <https://www.blaess.fr/christophe/>,
Stéphan Rafin <stephan.rafin@laposte.net>,
Thierry Vignaud <tvignaud@mandriva.com>,
François Micaux,
Alain Portal <aportal@univ-montp2.fr>,
Jean-Philippe Guérard <fevrier@tigreraye.org>,
Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>,
Julien Cristau <jcristau@debian.org>,
Thomas Huriaux <thomas.huriaux@gmail.com>,
Nicolas François <nicolas.francois@centraliens.net>,
Florentin Duneau <fduneau@gmail.com>,
Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
Denis Barbier <barbier@debian.org>,
David Prévot <david@tilapin.org>
et
Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr>
Cette traduction est une documentation libre ; veuillez vous reporter à la
GNU General Public License version 3
concernant les conditions de copie et
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
Index
- NOM
-
- SYNOPSIS
-
- DESCRIPTION
-
- Ioctls
-
- NOTES
-
- BOGUES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:06:38 GMT, September 19, 2025