Opérations de contrôle de socket ioctl
Objectif
Effectue des opérations de contrôle liées au réseau.
Syntaxe
#include <sys/ioctl.h>
int ioctl (fd, cmd, .../* arg */)
int fd;
int cmd;
int ... /* arg */Descriptif
Les commandes ioctl de socket permettent d'exécuter divers contrôles liés au réseau. L'argument fd est un descripteur de socket. Pour les descripteurs non-socket, les fonctions exécutées par cet appel ne sont pas spécifiées.
L'argument cmd et un troisième argument facultatif (de type variable) sont transmis à et interprétés par la fonction socket ioctl pour effectuer une opération de contrôle appropriée spécifiée par l'utilisateur.
Paramètres
| Article | Descriptif |
|---|---|
| fd | Descripteur de fichier ouvert qui fait référence à un socket créé à l'aide d'un socket ou d'un appel d'acceptation. |
| cmd | Sélectionne la fonction de contrôle à exécuter. |
| .../ * arg */ | Représente les informations requises pour la fonction demandée. Le type de arg dépend de la demande de contrôle particulière, mais il s'agit d'un entier ou d'un pointeur vers une structure de données spécifique au socket. |
Opérations de contrôle de socket
| Commande ioctl | Descriptif |
|---|---|
| SIOCATMARK | Détermine si le pointeur de lecture pointe vers la marque logique dans le DataStream. La marque logique indique le point d'envoi des données hors bande.Si atmark est défini sur 1 en cas de retour, le pointeur de lecture pointe vers la marque et la lecture suivante renvoie les données après la marque. Si atmark est défini sur 0 en cas de retour (en supposant que des données hors bande sont présentes sur le DataStream), la lecture suivante renvoie les données qui sont envoyées avant la marque hors bande.Remarque: Les données hors bande sont un canal de données logiquement indépendant qui est distribué à l'utilisateur indépendamment des données normales ; en outre, un signal est également envoyé en raison de l'attention immédiate requise. Les caractères Ctrl-C en sont un exemple.
|
SIOCSPGRP SIOCGPGRP |
SIOCSPGRP définit les informations de groupe de processus pour un socket. SIOCGPGRP obtient l'ID de groupe de processus associé à un socket.
|
Opérations de contrôle de la table de routage
| Commande ioctl | Descriptif |
|---|---|
SIOCADDRT SIOCDELRT |
SIOCADDRT ajoute un poste de route dans la table de routage. SIOCDELRT supprime une entrée de route de la table de routage.
|
| SIOUPDROUTE | Met à jour la table de routage à l'aide des informations transmises dans la structure ifreq . |
Opérations de contrôle de table ARP
| Commande ioctl | Descriptif |
|---|---|
SIOCSARP SIOCDARP SIOCGARP |
SIOCSARP ajoute ou modifie une entrée ARP dans la table ARP. SIOCDARP supprime une entrée ARP de la table ARP. SIOCGARP obtient une entrée ARP de la table ARP.
Les informations d'entrée ARP sont transmises dans la structure arpreq . Si |
Opérations de contrôle des paramètres réseau globaux
| Commande ioctl | Descriptif |
|---|---|
SIOCSNETOPT SIOCGNETOPT SIOCDNETOPT SIOCGNETOPT1 |
SIOCSNETOPT définit la valeur d'une option de réseau. SIOCGNETOPT obtient la valeur d'une option de réseau. SIOCDNETOPT définit les valeurs par défaut d'une option de réseau.
SIOCGNETOPT1 obtient la valeur en cours, la valeur par défaut et la plage d'une option de réseau.
Les informations d'option de réseau sont stockées dans la structure optreq1 en cas de retour. Les structures optreq et optreq1 sont définies dans net/netopt.h. |
SIOCGNMTUS SIOCGETMTUS SIOCADDMTU SIOCDELMTU |
SIOCGNMTUS obtient le nombre de MTU gérées dans la liste des MTU communes. SIOCADDMTU ajoute une MTU dans la liste des MTU communes. SIOCDELMTU supprime une MTU de la liste des MTU communes.
SIOCGETMTUS obtient les MTU gérées dans la liste des MTU communes.
La structure get_mtus est définie dans netinet/in.h. |
Opérations de contrôle d'interface
| Commande ioctl | Descriptif |
|---|---|
SIOCSIFADDR SIOCDIFADDR |
SIOCSIFADDR définit une adresse d'interface. SIOCDIFADDR supprime une adresse d'interface. L'adresse de l'interface est spécifiée dans la zone ifr.ifr_addr . SIOCGIFADDR obtient une adresse d'interface. L'adresse est renvoyée dans la zone ifr.ifr_addr .
|
SIOCAIFADDR |
SIOCAIFADDR ajoute une adresse d'interface. Le nom de l'interface est spécifié dans la zone ifr.ifra_name . L'adresse IP d'alias est spécifiée dans la zone theifr.ifra_addr . L'adresse de diffusion IP d'alias peut être spécifiée dans la zone ifr.ifra_broadaddr et le masque de réseau IP d'alias peut être spécifié dans ifr.ifra_mask.
|
| SIOCGIFADDRS | Obtient la liste des adresses associées à une interface.Le nom de l'interface est transmis dans la zone ifaddrsp-> ifr_name. Les adresses associées à l'interface sont stockées dans le tableau ifaddrsp->ifrasu lors du retour.Remarque: la structure ifreqaddrs contient de l'espace pour le stockage d'une seule structure sockaddr_in/sockaddr_in6 (tableau d'un élément sockaddr_in/sockaddr_in6 ). Pour obtenir n adresses associées à une interface, l'appelant de la commande ioctl doit allouer de l'espace pour {sizeof (struct ifreqaddrs) + (n * sizeof (struct sockaddr_in)} octets.
|
SIOCSIFDSTADDR SIOCGIFDSTADDR |
SIOCSIFDSTADDR définit l'adresse point à point pour une interface spécifiée dans la zone ifr.ifr_dstaddr . SIOCGIFDSTADDR obtient l'adresse point-à-point associée à une interface. L'adresse est stockée dans la zone ifr.ifr_dstaddr lors du retour.
|
SIOCSIFNETMASK SIOCGIFNETMASK |
SIOCSIFNETMASK définit le masque de réseau d'interface spécifié dans la zone ifr.ifr_addr . SIOCGIFNETMASK obtient le masque de réseau de l'interface.
|
SIOCSIFBRDADDR SIOCGIFBRDADDR |
SIOCSIFBRDADDR définit l'adresse de diffusion de l'interface spécifiée dans la zone ifr.ifr_broadaddr . SIOCGIFBRDADDR obtient l'adresse de diffusion de l'interface. L'adresse de diffusion est placée dans la zone ifr.ifr_broadaddr .
|
| SIOCGSIZIFCONF | Obtient la taille de la mémoire requise pour obtenir les informations de configuration de toutes les interfaces renvoyées par SIOCGIFCONF. |
| SIOCGIFCONF | Renvoie des informations de configuration pour toutes les interfaces configurées sur le système.Les informations de configuration sont renvoyées dans une liste de structures ifreq pointées par la zone ifc.ifc_req , avec une structure ifreq par interface.Remarque: L'appelant de la commande ioctl doit allouer suffisamment d'espace pour stocker les informations de configuration, renvoyées sous forme de liste de structures ifreq pour toutes les interfaces configurées sur le système. Par exemple, si n interfaces sont configurées sur le système, ifc.ifc_req doit pointer vers {n * sizeof (struct ifreq)} octets d'espace alloué.
Remarque: Vous pouvez également utiliser la commande SIOCGSIZIFCONF ioctl à cette fin.
|
SIOCSIFFLAGS SIOCGIFFLAGS |
SIOCSIFFLAGS définit les indicateurs d'interface. SIOCGIFFLAGS obtient les indicateurs d'interface.Voir /usr/include/net/if.h pour les indicateurs d'interface, indiqués par IFF_xxx.Remarque: Les indicateurs IFF_BROADCAST, IFF_POINTTOPOINT, IFF_SIMPLEX, IFF_RUNNING, IFF_OACTIVEet IFF_MULTICAST ne peuvent pas être modifiés à l'aide de ioctl.
|
SIOCSIFMETRIC SIOCGIFMÉTRIQUE |
SIOCSIFMETRIC définit la métrique d'interface spécifiée dans la zone ifr.ifr_metric . SIOCGIFMETRIC obtient la métrique d'interface. La métrique d'interface est placée dans la zone ifr.ifr_metric en cas de retour.
|
SIOCSIFSUBCHAN SIOCGIFSUBCHAN |
SIOCSIFSUBCHAN définit l'adresse de sous-canal spécifiée dans la zone ifr.ifr_flags . SIOCGIFSUBCHAN obtient l'adresse de sous-canal dans la zone ifr.ifr_flags . |
OPTIONS SIOCSIF OPTIONS SIOCGIF |
SIOCSIFOPTIONS définit les options d'interface. SIOCGIFOPTIONS obtient les options d'interface.Les options d'interface sont stockées dans la zone ifr_flags de la structure ifreq . Consultez le fichier /usr/include/net/if.h pour obtenir la liste des options d'interface indiquées par IFO_xxx. |
| Commande ioctl | Descriptif |
|---|---|
SIOCADDMULTI SIOCDELMULTI |
SIOCADDMULTI ajoute une adresse à la liste des adresses de multidiffusion pour une interface. SIOCDELMULTI supprime une adresse de multidiffusion de la liste des adresses de multidiffusion d'une interface.
|
| SIOCGETVIFCNT | Extrait les informations sur le nombre de paquets pour une interface virtuelle. Les informations sont spécifiées dans la structure sioc_vif_req . |
| SIOCGETSGCNT | Extrait les informations sur le nombre de paquets pour le groupe source spécifié. Les informations sont stockées dans la structure sioc_sg_req lors du retour. |
SIOCSIFMTU SIOCGIFMTU |
SIOCSIFMTU définit l'unité de transmission maximale (MTU) de l'interface. SIOCGIFMTU obtient l'interface MTU.La valeur MTU est stockée dans la zone ifr.ifr_mtu .Remarque: La plage de valeurs valides pour MTU varie pour une interface et dépend du type d'interface.
|
SIOCIFATTACH DETECAGE SIOCIFACH |
SIOCIFATTACH connecte une interface. Cette opération initialise et ajoute une interface dans la liste des interfaces réseau. SIOCIFDETACH déconnecte une adresse de diffusion d'interface. Cette opération supprime l'interface de la liste des interfaces réseau. Le nom de l'interface est spécifié dans la zone ifr.ifr_name . |
SIOCSIFGIDLIST SIOCGIFGIDLIST |
SIOCSIFGIDLIST ajoute ou supprime la liste des ID de groupe spécifiés dans la zone ifrg.ifrg_gidlist à l'interface gidlist . Le nom de l'interface est spécifié dans la zone ifrg.ifrg_name . Un code d'opération, ADD_GRP/DEL_GRP, spécifié dans la zone ifrg.ifrg_gidlist indique si la liste d'ID de groupe spécifiée doit être ajoutée ou supprimée de l'interface gidlist . SIOCGIFGIDLIST obtient la liste des ID de groupe associés à une interface. Les ID de groupe sont placés dans la zone ifrg.ifrg_gidlist lors du retour. |
SIOCIF_ATM_UBR SIOCIF_ATM_SNMPARP SIOCIF_ATM_DUMPARP SIOCIF_ATM_IDLE SIOCIF_ATM_SVC SIOCIF_ATM_DARP SIOCIF_ATM_GARP SIOCIF_ATM_SARP |
SIOCIF_ATM_UBR définit le débit UBR pour une interface ATM. SIOCIF_ATM_SNMPARP obtient les entrées SNMP ATM ARP. SIOCIF_ATM_DUMPARP obtient le nombre spécifié d'entrées ATM ARP. SIOCIF_ATM_DARP supprime une entrée ATM ARP de la table ARP. SIOCIF_ATM_GARP obtient une entrée ATM ARP dans la table ARP. SIOCIF_ATM_SARP ajoute une entrée ATM ARP. Les informations ARP sont spécifiées dans la structure atm_arpreq . SIOCIF_ATM_SVC indique si cette interface prend en charge les types de connexions virtuelles de circuit virtuel permanent (PVC) et de circuit virtuel commuté (SVC). Elle indique également si cette interface est un client ARP ou un serveur ARP pour ce sous-réseau IP logique (LIS) en fonction de l'indicateur défini dans la structure ifatm_svc_arg . SIOCIF_ATM_IDLE indique la limite de temps d'inactivité sur l'interface. |
SIOCSISNO SIOCGISNO |
SIOCSISNO définit des options de réseau spécifiques à l'interface pour une interface. SIOCGISNO obtient les options de réseau spécifiques à l'interface qui sont associées à une interface.
|
| SIOCGIFBAUDRATE | Extrait la valeur du débit en bauds de l'interface dans la zone ifr_baudrate .Le débit en bauds est stocké dans la zone ifr.ifr_baudrate . |
SIOCADDIFVIPA SIOCDELIFVIPA SIOCLISTIFVIPA |
SIOCADDIFVIPA associe la liste spécifiée des interfaces pointées par ifrv.ifrv_ifname à l'interface virtuelle spécifiée par ifrv.ifrv_name. Cette opération entraîne la définition de l'adresse source de tous les paquets sortants de ces interfaces sur l'adresse d'interface virtuelle. SIOCDELIFVIPA supprime la liste des interfaces spécifiées qui sont pointées par ifrv.ifrv_ifname et associées à l'interface virtuelle spécifiée par ifrv.ifrv_name, à l'aide de SIOCADDIFVIPA. SIOCLISTIFVIPA répertorie toutes les interfaces associées à l'interface virtuelle spécifiée par ifrv.ifrv_name.Les informations d'interface virtuelle sont stockées dans la structure ifvireq .Remarque: Ces indicateurs fonctionnent uniquement sur une interface virtuelle.
|
| SIOCSIFADDR6 | Définissez ou ajoutez une adresse IPv6 . |
| SIOCGIFADDR6 | Obtient une adresse IPv6 . |
| SIOCSIFDSTADDR6 | Définissez l'adresse de destination (point à point) pour une adresse IPv6 . |
| SIOCGIFDSTADDR6 | Obtenez l'adresse de destination (point à point) pour une adresse IPv6 . |
| SIOCSIFNETMASK6 | Définissez le masque de réseau pour une adresse IPv6 . |
| SIOCGIFNETMASK6 | Obtenez le masque de réseau pour une adresse IPv6 . |
| SIOCDIFADDR6 | Supprimez une adresse IPv6 . |
| SIOCFIFADDR6 | Placez une adresse IPv6 au début de la liste d'adresses. |
| SIOCAIFADDR6 | Ajoutez ou modifiez une adresse d'alias IPv6 . |
| SIOCADDANY6 | Ajoutez une adresse IPv6 anycast. |
| SIOCDELANY6 | Supprimez une adresse IPv6 anycast. |
| SIOCSIFZONE6 | Définissez l'ID de zone IPv6 d'une interface sur une portée d'adresse particulière. |
| SIOCGIFZONE6 | Obtenez les ID de zone de portée IPv6 d'une interface. |
| SIOCSIFADDRORI6 | Définissez l'origine de configuration d'une adresse IPv6 . |
| SIOCAIFADDR6T | Ajoutez ou modifiez une adresse et un type d'alias IPv6 . |
| SIOCGIFADDR6T | Obtenez le type d'une adresse IPv6 . |
| SIOCSIFADDRSTATE6 | Modifiez l'état d'une adresse IPv6 . |
| SIOCGIFADDRSTATE6 | Obtenez l'état d'une adresse IPv6 . |
| SIOCGSRCFILTER6 | Obtenez le filtre de source de groupe de multidiffusion IPv6 pour une interface. |
| SIOCACLADDR6 | Ajoutez une adresse d'alias de cluster IPv6 . |
| SIOCDCLADDR6 | Supprimez une adresse de cluster IPv6 . |
| SIOCSIFADDRFLAG6 | Définissez l'indicateur de source d'adresse pour une adresse IPv6 . |
| SIOCGIFADDRFLAG6 | Obtenir l'indicateur de source d'adresse pour une adresse IPv6 . |
Valeurs renvoyées
Une fois l'opération terminée, ioctl renvoie 0. Sinon, elle renvoie -1 et définit errno pour indiquer l'erreur.
Codes d'erreur
| Article | Descriptif |
|---|---|
| EBADF | Le descripteur de fichier fd n'est pas un descripteur de fichier de socket ouvert valide. |
| EINTR | Un signal a été intercepté lors de l'opération ioctl. |
| EINVAL | Une commande ou un argument non valide a été spécifié. |
| Article | Descriptif |
|---|---|
| EACCES | Droits refusés pour l'opération spécifiée. |
| EADDRNOTAVAIL | L'adresse indiquée n'est pas disponible pour l'interface. |
| EAFNOSUPPORT | Opération non prise en charge sur les sockets. |
| EBUSY | La ressource est occupée. |
| EEXIST | Une entrée ou un fichier existe. |
| EFAULT | L'argument fait référence à une zone de mémoire inaccessible. |
| EIO | Erreur d'entrée/sortie. |
| ENETUNREACH | Passerelle inaccessible. |
| ENOBUFS | Dépassement de la table de routage. |
| ENOCONNECT | Aucune connexion. |
| ENOMEM | Mémoire disponible insuffisante. |
| ENOTCONN | L'opération est uniquement définie sur un socket connecté, mais le socket n'était pas connecté. |
| ENXIO | L'unité n'existe pas. |
| ESRCH | Aucun processus de ce type. |