Manpages

NOM

ioctl_list − Liste des requêtes ioctl pour Linux/i386

DESCRIPTION

On trouvera ici la liste des arguments IOCTL du noyau Linux/i386 1.3.27. Cette liste contient 421 requêtes ioctl situées dans </usr/include/{asm,linux}/*.h>. Pour chaque ioctl, on trouvera sa valeur numérique, son nom et le type de son argument.

Un type d’argument const struct foo * signifie que l’argument est une entrée pour le noyau, alors que struct foo * signifie que c’est une sortie pour le noyau. Si le noyau utilise un argument à la fois en entrée et sortie, il sera indiqué avec // I−O.

Certains ioctls prennent plusieurs arguments, ou retournent plus de valeurs qu’une simple structure. Ceux-ci sont indiqués avec // PLUS et documentés plus tard.

Cette liste n’est absolument pas complète.

Structure des ioctl
Les valeurs des commandes ioctl sont des constantes 32 bits. En principe, ces constantes sont complètement arbitraires, mais certaines personnes ont essayé de les structurer un peu.

Dans les anciens noyaux Linux, la plupart étaient des constantes 16 bits, où le dernier octet était un numéro de série, et le(s) précédent(s) indiquai(en)t le pilote. Parfois c’était le numéro majeur : 0x03 pour les ioctls HDIO_*, 0x06 pour ceux LP*. Et parfois une ou plusieurs lettres ASCII. Par exemple, TCGETS vaut 0x00005401, avec 0x54 = 'T' indiquant le pilote de terminal, et CYGETTIMEOUT vaut 0x00435906, avec 0x43 0x59 = 'C' 'Y' indiquant le pilote cyclade.

Ensuite (0.98p5) un peu plus d’information a été ajoutée dans le numéro. Il y a deux bits de direction (00 : aucune, 01 : écriture, 10 : lecture, 11 : lecture/écriture) suivis de 14 bits de taille (indiquant la taille de l’argument), suivis d’un type sur 8 bits (ce qui regroupe les ioctls pour un même but ou un même pilote), puis un numéro de série sur 8 bits.

Les macros écrivant cette structure se trouvent dans <asm/ioctl.h> et sont _IO(type,nr) et {_IOR,_IOW,_IOWR}(type,nr,size). Elles utilisent sizeof(size) ce qui indique que "size" est un mauvais nom ici, le troisième paramètre étant le type de donnée.

Notez que les bits de taille sont peu fiables — dans de nombreux cas ils sont faux, soit à cause d’une macro boguée utilisant sizeof(sizeof(struct)), ou à cause de valeurs imposées.

Ainsi, il semble que la nouvelle structure n’offre que des désagréments : elle n’aide pas vraiment aux vérifications, mais elle crée des valeurs différentes sur les diverses architectures.

VALEUR RENVOYÉE

Les ioctls décents renvoient 0 s’ils réussissent et −1 en cas d’erreur, avec toute valeur de sortie stockée dans l’argument. Toutefois, certains renvoient en fait la valeur de sortie directement. Ce n’est pas encore indiqué ci-dessous.

// Table principale.

// <include/asm−i386/socket.h>

// <include/asm−i386/termios.h>

// <include/linux/ax25.h>

// <include/linux/cdk.h>

// <include/linux/cdrom.h>

// <include/linux/cm206.h>

// <include/linux/cyclades.h>

// <include/linux/ext2_fs.h>

// <include/linux/fd.h>

// <include/linux/fs.h>

// <include/linux/hdreg.h>

// <include/linux/if_eql.h>

// <include/linux/if_plip.h>

// <include/linux/if_ppp.h>

// <include/linux/ipx.h>

// <include/linux/kd.h>

// <include/linux/lp.h>

// <include/linux/mroute.h>

// <include/linux/msdos_fs.h>

// <include/linux/mtio.h>

// <include/linux/netrom.h>

// <include/linux/sbpcd.h>

// <include/linux/scc.h>

// <include/linux/scsi.h>

// <include/linux/smb_fs.h>

// <include/linux/sockios.h>

// <include/linux/soundcard.h>

// <include/linux/umsdos_fs.h>

// <include/linux/vt.h>

// Plus de paramètres. Certains ioctls utilisent un pointeur sur une structure contenant des pointeurs supplémentaires. Les voici par ordre alphabétique.

CDROMREADAUDIO prend un pointeur du type const struct cdrom_read_audio *. Le champ buf pointe sur un tampon de sortie de longueur nframes * CD_FRAMESIZE_RAW.

CDROMREADCOOKED, CDROMREADMODE1, CDROMREADMODE2, et CDROMREADRAW prennent un pointeur d’entrée const struct cdrom_msf *. Ils utilisent le même pointeur en sortie en tant que char []. La longueur dépend de l’action. Pour CDROMREADMODE1, la plupart des pilotes de périphériques utilisent ’CD_FRAMESIZE’, mais le pilote Optics Storage utilise ’OPT_BLOCKSIZE’ à la place (les deux valent 2048).

CDROMREADCOOKED char [CD_FRAMESIZE]
CDROMREADMODE1 char [CD_FRAMESIZE ou OPT_BLOCKSIZE]
CDROMREADMODE2 char [CD_FRAMESIZE_RAW0]
CDROMREADRAW char [CD_FRAMESIZE_RAW]

EQL_ENSLAVE, EQL_EMANCIPATE, EQL_GETSLAVECFG, EQL_SETSLAVECFG, EQL_GETMASTERCFG et EQL_SETMASTERCFG prennent une struct ifreq *. le champ ifr_data est un pointeur sur une autre structure :

EQL_ENSLAVE const struct slaving_request *
EQL_EMANCIPATE const struct slaving_request *
EQL_GETSLAVECFG struct slave_config * // I−O
EQL_SETSLAVECFG const struct slave_config *
EQL_GETMASTERCFG struct master_config *
EQL_SETMASTERCFG const struct master_config *

FDRAWCMD prend une struct floppy raw_cmd *. Si flags & FD_RAW_WRITE est non nul, alors data pointe sur un tampon d’entrée de longueur length. Si flags & FD_RAW_READ est non nul, alors data pointe sur un tampon de sortie de longueur length.

GIO_FONTX et PIO_FONTX prennent une struct console_font_desc * et une const struct console_font_desc *, respectivement. chardata pointe sur un tampon char [charcount]. C’est un tampon de sortie pour GIO_FONTX et d’entrée pour PIO_FONTX.

GIO_UNIMAP et PIO_UNIMAP prennent struct unimapdesc * et une const struct unimapdesc *, respectivement. entries pointe sur un tampon struct unipair [entry_ct]. C’est un tampon de sortie pour GIO_UNIMAP et un tampon d’entrée pour PIO_UNIMAP.

KDADDIO, KDDELIO, KDDISABIO, et KDENABIO valident ou invalident les accès aux ports d’entrée/sortie. Ce sont surtout des alternatives d’interface à ’ioperm’.

KDMAPDISP et KDUNMAPDISP valident et invalident la projection en mémoire des ports d’entrée/sortie. Ils ne sont pas implémentés dans le noyau.

SCSI_IOCTL_PROBE_HOST prend un pointeur d’entrée const int *, qui correspond à une longueur. Il utilise le même pointeur en sortie en tant que tampon char [] de cette longueur.

SIOCADDRT et SIOCDELRT prennent un pointeur qui dépend du protocole :

La plupart des protocoles const struct rtentry *
AX.25 const struct ax25_route *
NET/ROM const struct nr_route_struct *

SIOCGIFCONF prend une struct ifconf *. Le champ ifc_buf pointe sur un tampon de longueur ifc_len octets, dans lequel le noyau écrit une liste de type struct ifreq [].

SIOCSIFHWADDR prend un pointeur d’entrée dont le type dépend du protocole :

La plupart des protocoles const struct ifreq *
AX.25 const char [AX25_ADDR_LEN]

TIOCLINUX prend un const char *. Il utilise ceci pour distinguer entre différent cas. Dans la table ci-dessous, N + foo signifie foo après un remplissage de N octets. struct selection est définie implicitement dans drivers/char/selection.c.

TIOCLINUX−2 1 + const struct selection *
TIOCLINUX−3 void
TIOCLINUX−4 void
TIOCLINUX−5 4 + const struct { long [8]; } *
TIOCLINUX−6 char *
TIOCLINUX−7 char *
TIOCLINUX−10 1 + const char *

// Ioctls dupliqués

Cette liste n’inclut pas les ioctls dans l’intervalle entre SIOCDEVPRIVATE et SIOCPROTOPRIVATE.

VOIR AUSSI

ioctl(2)

COLOPHON

Cette page fait partie de la publication 3.65 du projet man−pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l’adresse http://www.kernel.org/doc/man−pages/.

TRADUCTION

Depuis 2010, cette traduction est maintenue à l’aide de l’outil po4a <http://po4a.alioth.debian.org/>; par l’équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>;.

Christophe Blaess <http://www.blaess.fr/christophe/>; (1996-2003), Alain Portal <http://manpagesfr.free.fr/>; (2003-2006). Julien Cristau et l’équipe francophone de traduction de Debian (2006-2009).

Veuillez signaler toute erreur de traduction en écrivant à <debian−l10n−french [AT] lists.org> ou par un rapport de bogue sur le paquet manpages−fr.

Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man −L C <section> <page_de_man> ».