netdevice(7) Miscellaneous Information Manual netdevice(7) NOM netdevice - Acces bas niveau aux peripheriques reseau sous Linux SYNOPSIS #include #include DESCRIPTION Cette page de manuel decrit l'interface des sockets permettant de configurer les peripheriques reseau. Linux prend en charge certains ioctls standard pour configurer les peripheriques reseau. 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 peripherique concerne en reglant 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 memoire. Ioctls Si un ioctl est indique comme privilegie, alors il necessite un UID effectif valant zero ou la capacite CAP_NET_ADMIN. Sinon, il renverra l'erreur EPERM. SIOCGIFNAME Si ifr_ifindex est indique, renvoyer le nom de l'interface dans ifr_name. C'est le seul ioctl qui renvoie son resultat dans ifr_name. SIOCGIFINDEX Retrouver l'indice d'interface de l'interface dans ifr_ifindex. SIOCGIFFLAGS SIOCSIFFLAGS Obtenir ou definir le mot d'indicateur en cours du peripherique. ifr_flags contient un masque de bits des valeurs suivantes : Indicateur de peripherique IFF_UP Interface en cours de fonctionnement. IFF_BROADCAST Ensemble d'adresses de broadcast valables. IFF_DEBUG Indicateur interne de debogage. IFF_LOOPBACK L'interface est une interface de boucle locale. IFF_POINTOPOINT L'interface est une liaison point a point. IFF_RUNNING Ressources allouees. IFF_NOARP Pas de protocole ARP, adresse de destination niveau 2 absente. IFF_PROMISC L'interface est en mode promiscuite. IFF_NOTRAILERS Pas d'utilisation des postambules. IFF_ALLMULTI Reception de tous les paquets multicast. IFF_MASTER Maitre d'un systeme de repartition de charge. IFF_SLAVE Esclave d'un systeme de repartition de charge. IFF_MULTICAST Prise en charge du multicast. IFF_PORTSEL Possibilite de selectionner le type de media a l'aide de ifmap. IFF_AUTOMEDIA Selection automatique du media active. IFF_DYNAMIC Les adresses sont perdues quand l'interface s'arrete. IFF_LOWER_UP Le pilote signale la disponibilite du niveau 1 (depuis Linux 2.6.17). IFF_DORMANT Le pilote signale l'inactivite (depuis Linux 2.6.17). IFF_ECHO Repeter les paquets envoyes (depuis Linux 2.6.25). Definir le mot d'indicateur actif est une operation privilegiee, mais tout processus peut le lire. SIOCGIFPFLAGS SIOCSIFPFLAGS Obtenir ou definir les indicateurs (prives) etendus du peripherique. ifr_flags est un masque de bits des valeurs suivantes : Indicateurs prives IFF_802_1Q_VLAN L'interface est un peripherique VLAN 802.1Q. IFF_EBRIDGE L'interface est un peripherique de pont Ethernet. IFF_SLAVE_INACTIVE L'interface est un esclave inactif d'agregation de liens. IFF_MASTER_8023AD L'interface est un maitre 802.3ad d'agregation de liens. IFF_MASTER_ALB L'interface est un maitre d'agregation repartie par ALB. IFF_BONDING L'interface est un maitre ou un esclave d'agregation. IFF_SLAVE_NEEDARP L'interface necessite ARP pour la validation. IFF_ISATAP L'interface est de type ISATAP RFC4214. Definir les indicateurs (prives) etendus du peripherique est une operation privilegiee. SIOCGIFADDR SIOCSIFADDR SIOCDIFADDR Obtenir, definir ou supprimer l'adresse du peripherique en utilisant ifr_addr ou ifr6_addr avec ifr6_prefixlen. Definir ou supprimer l'adresse d'interface est une operation privilegiee. Pour la compatibilite, 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 etre supprimee en la definissant a zero a l'aide de SIOCSIFADDR. SIOCGIFDSTADDR SIOCSIFDSTADDR Obtenir ou definir l'adresse de destination d'un peripherique point a point en utilisant ifr_dstaddr. Pour assurer la compatibilite, seules les adresses AF_INET sont acceptees ou renvoyees. Definir l'adresse de destination est une operation privilegiee. SIOCGIFBRDADDR SIOCSIFBRDADDR Obtenir ou definir l'adresse de broadcast pour un peripherique en utilisant ifr_brdaddr. Pour assurer la compatibilite, seules les adresses AF_INET sont acceptees ou renvoyees. Definir l'adresse de broadcast est une operation privilegiee. SIOCGIFNETMASK SIOCSIFNETMASK Obtenir ou definir le masque reseau pour un peripherique en utilisant ifr_netmask. Pour assurer la compatibilite, seules les adresses AF_INET sont acceptees ou renvoyees. Definir le masque reseau est une operation privilegiee. SIOCGIFMETRIC SIOCSIFMETRIC Obtenir ou definir la metrique du peripherique en utilisant ifr_metric. Cela n'est pas encore implemente. Il definit ifr_metric a la valeur 0 en cas de tentative de lecture, et renvoie l'erreur EOPNOTSUPP en cas de tentative de definition. SIOCGIFMTU SIOCSIFMTU Obtenir ou definir le MTU (Maximum Transfer Unit) du peripherique avec ifr_mtu. Definir le MTU est une operation privilegiee. Definir un MTU trop petit peut faire planter le noyau. SIOCGIFHWADDR SIOCSIFHWADDR Obtenir ou definir l'adresse materielle du peripherique en utilisant ifr_hwaddr. Cette adresse materielle est indiquee dans une structure sockaddr. sa_family contient le type de peripherique ARPHRD_*, sa_data est l'adresse materielle L2 commencant par l'octet 0. Definir l'adresse materielle est une operation privilegiee. SIOCSIFHWBROADCAST Definir l'adresse de broadcast du peripherique a partir de ifr_hwaddr. C'est une operation privilegiee. SIOCGIFMAP SIOCSIFMAP Obtenir ou definir les parametres materiels de l'interface en utilisant ifr_map. Definir ces parametres est une operation privilegiee. struct ifmap { unsigned long mem_start; unsigned long mem_end; unsigned short base_addr; unsigned char irq; unsigned char dma; unsigned char port; }; L'interpretation de la structure ifmap depend du pilote de peripherique et de l'architecture. SIOCADDMULTI SIOCDELMULTI Ajouter ou supprimer une adresse des filtres multicast du niveau liaison du peripherique en utilisant ifr_hwaddr. Ce sont des operations privilegiees. Consultez aussi packet(7) pour une autre possibilite. SIOCGIFTXQLEN SIOCSIFTXQLEN Obtenir ou definir la taille de la file d'attente de transmission du peripherique avec ifr_qlen. La definition de la taille de la file est une operation privilegiee. SIOCSIFNAME Changer le nom de l'interface indiquee dans ifr_name pour ifr_newname. C'est une operation privilegiee. 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 compatibilite. 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 necessaire en octet pour recevoir toutes les adresses disponibles dans ifc_len. Sinon, ifc_req contient un pointeur vers un tableau de structures ifreq a 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 transferes est renvoye dans ifc_len. Si la taille indiquee par ifc_len n'est pas suffisante pour stocker toutes les adresses, le noyau ignorera celles en trop et renverra un etat de reussite. Si cela arrive, aucun moyen fiable n'existe pour detecter cette condition. Vous devriez donc soit determiner la taille de tampon necessaire au prealable en appelant SIOCGIFCONF avec ifc_req defini a NULL, soit reessayer l'appel avec un plus gros tampon si la difference entre la valeur de retour ifc_len et sa valeur initiale est superieure a sizeof(struct ifreq). En cas d'erreur d'acces aux structures ifconf ou ifreq, EFAULT sera renvoye. La plupart des protocoles prennent en charge leurs propres ioctls pour configurer les options d'interface specifiques aux protocoles. Consultez les pages de manuel correspondantes. Pour configurer les adresses IP, consultez ip(7). De plus, certains peripheriques prennent en charge des ioctls prives, non decrits ici. NOTES SIOCGIFCONF et les autres ioctls qui n'acceptent ou ne renvoient que des adresses de socket AF_INET sont specifiques a IP et devraient plutot etre documentes dans ip(7). Les noms des interfaces sans adresse, ou celles qui n'ont pas l'indicateur IFF_RUNNING defini peuvent etre trouves dans /proc/net/dev. Les adresses AF_INET6 IPv6 peuvent etre trouvees dans /proc/net/if_inet6 ou a l'aide de rtnetlink(7). L'ajout d'une nouvelle adresse IPv6 ou la suppression d'une existante peut etre realise a l'aide de SIOCSIFADDR et SIOCDIFADDR ou a l'aide de rtnetlink(7). La recuperation ou la modification d'une adresse IPv6 d'une interface point a point est possible seulement a l'aide de rtnetlink(7). BOGUES Dans la glibc 2.1, il manque la macro ifr_newname dans . 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 francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Paul Guillonneau Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 netdevice(7)