netdevice(7) | Miscellaneous Information Manual | netdevice(7) |
netdevice – Accès bas niveau aux périphériques réseau sous Linux
#include <sys/ioctl.h> #include <net/if.h>
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.
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.
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.
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.
struct ifmap { unsigned long mem_start; unsigned long mem_end; unsigned short base_addr; unsigned char irq; unsigned char dma; unsigned char port; };
struct ifconf { int ifc_len; /* Taille du tampon */ union { char *ifc_buf; /* Adresse du tampon */ struct ifreq *ifc_req; /* Tableau des structures */ }; };
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.
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).
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
proc(5), capabilities(7), ip(7), rtnetlink(7)
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 à debian-l10n-french@lists.debian.org.
15 décembre 2022 | Pages du manuel de Linux 6.03 |