0001 .. include:: ../disclaimer-ita.rst
0002
0003 :Original: :ref:`Documentation/process/magic-number.rst <magicnumbers>`
0004 :Translator: Federico Vaga <federico.vaga@vaga.pv.it>
0005
0006 .. _it_magicnumbers:
0007
0008 I numeri magici di Linux
0009 ========================
0010
0011 Questo documento è un registro dei numeri magici in uso. Quando
0012 aggiungete un numero magico ad una struttura, dovreste aggiungerlo anche
0013 a questo documento; la cosa migliore è che tutti i numeri magici usati
0014 dalle varie strutture siano unici.
0015
0016 È **davvero** un'ottima idea proteggere le strutture dati del kernel con
0017 dei numeri magici. Questo vi permette in fase d'esecuzione di (a) verificare
0018 se una struttura è stata malmenata, o (b) avete passato a una procedura la
0019 struttura errata. Quest'ultimo è molto utile - particolarmente quando si passa
0020 una struttura dati tramite un puntatore void \*. Il codice tty, per esempio,
0021 effettua questa operazione con regolarità passando avanti e indietro le
0022 strutture specifiche per driver e discipline.
0023
0024 Per utilizzare un numero magico, dovete dichiararlo all'inizio della struttura
0025 dati, come di seguito::
0026
0027 struct tty_ldisc {
0028 int magic;
0029 ...
0030 };
0031
0032 Per favore, seguite questa direttiva quando aggiungerete migliorie al kernel!
0033 Mi ha risparmiato un numero illimitato di ore di debug, specialmente nei casi
0034 più ostici dove si è andati oltre la dimensione di un vettore e la struttura
0035 dati che lo seguiva in memoria è stata sovrascritta. Seguendo questa
0036 direttiva, questi casi vengono identificati velocemente e in sicurezza.
0037
0038 Registro dei cambiamenti::
0039
0040 Theodore Ts'o
0041 31 Mar 94
0042
0043 La tabella magica è aggiornata a Linux 2.1.55.
0044
0045 Michael Chastain
0046 <mailto:mec@shout.net>
0047 22 Sep 1997
0048
0049 Ora dovrebbe essere aggiornata a Linux 2.1.112. Dato che
0050 siamo in un momento di congelamento delle funzionalità
0051 (*feature freeze*) è improbabile che qualcosa cambi prima
0052 della versione 2.2.x. Le righe sono ordinate secondo il
0053 campo numero.
0054
0055 Krzysztof G. Baranowski
0056 <mailto: kgb@knm.org.pl>
0057 29 Jul 1998
0058
0059 Aggiornamento della tabella a Linux 2.5.45. Giusti nel congelamento
0060 delle funzionalità ma è comunque possibile che qualche nuovo
0061 numero magico s'intrufoli prima del kernel 2.6.x.
0062
0063 Petr Baudis
0064 <pasky@ucw.cz>
0065 03 Nov 2002
0066
0067 Aggiornamento della tabella magica a Linux 2.5.74.
0068
0069 Fabian Frederick
0070 <ffrederick@users.sourceforge.net>
0071 09 Jul 2003
0072
0073
0074 ===================== ================ ======================== ==========================================
0075 Nome magico Numero Struttura File
0076 ===================== ================ ======================== ==========================================
0077 PG_MAGIC 'P' pg_{read,write}_hdr ``include/linux/pg.h``
0078 CMAGIC 0x0111 user ``include/linux/a.out.h``
0079 MKISS_DRIVER_MAGIC 0x04bf mkiss_channel ``drivers/net/mkiss.h``
0080 HDLC_MAGIC 0x239e n_hdlc ``drivers/char/n_hdlc.c``
0081 APM_BIOS_MAGIC 0x4101 apm_user ``arch/x86/kernel/apm_32.c``
0082 DB_MAGIC 0x4442 fc_info ``drivers/net/iph5526_novram.c``
0083 DL_MAGIC 0x444d fc_info ``drivers/net/iph5526_novram.c``
0084 FASYNC_MAGIC 0x4601 fasync_struct ``include/linux/fs.h``
0085 FF_MAGIC 0x4646 fc_info ``drivers/net/iph5526_novram.c``
0086 PTY_MAGIC 0x5001 ``drivers/char/pty.c``
0087 PPP_MAGIC 0x5002 ppp ``include/linux/if_pppvar.h``
0088 SSTATE_MAGIC 0x5302 serial_state ``include/linux/serial.h``
0089 SLIP_MAGIC 0x5302 slip ``drivers/net/slip.h``
0090 STRIP_MAGIC 0x5303 strip ``drivers/net/strip.c``
0091 SIXPACK_MAGIC 0x5304 sixpack ``drivers/net/hamradio/6pack.h``
0092 AX25_MAGIC 0x5316 ax_disp ``drivers/net/mkiss.h``
0093 TTY_MAGIC 0x5401 tty_struct ``include/linux/tty.h``
0094 MGSL_MAGIC 0x5401 mgsl_info ``drivers/char/synclink.c``
0095 TTY_DRIVER_MAGIC 0x5402 tty_driver ``include/linux/tty_driver.h``
0096 MGSLPC_MAGIC 0x5402 mgslpc_info ``drivers/char/pcmcia/synclink_cs.c``
0097 USB_SERIAL_MAGIC 0x6702 usb_serial ``drivers/usb/serial/usb-serial.h``
0098 FULL_DUPLEX_MAGIC 0x6969 ``drivers/net/ethernet/dec/tulip/de2104x.c``
0099 USB_BLUETOOTH_MAGIC 0x6d02 usb_bluetooth ``drivers/usb/class/bluetty.c``
0100 RFCOMM_TTY_MAGIC 0x6d02 ``net/bluetooth/rfcomm/tty.c``
0101 USB_SERIAL_PORT_MAGIC 0x7301 usb_serial_port ``drivers/usb/serial/usb-serial.h``
0102 CG_MAGIC 0x00090255 ufs_cylinder_group ``include/linux/ufs_fs.h``
0103 LSEMAGIC 0x05091998 lse ``drivers/fc4/fc.c``
0104 RIEBL_MAGIC 0x09051990 ``drivers/net/atarilance.c``
0105 NBD_REQUEST_MAGIC 0x12560953 nbd_request ``include/linux/nbd.h``
0106 RED_MAGIC2 0x170fc2a5 (any) ``mm/slab.c``
0107 BAYCOM_MAGIC 0x19730510 baycom_state ``drivers/net/baycom_epp.c``
0108 ISDN_X25IFACE_MAGIC 0x1e75a2b9 isdn_x25iface_proto_data ``drivers/isdn/isdn_x25iface.h``
0109 ECP_MAGIC 0x21504345 cdkecpsig ``include/linux/cdk.h``
0110 LSOMAGIC 0x27091997 lso ``drivers/fc4/fc.c``
0111 LSMAGIC 0x2a3b4d2a ls ``drivers/fc4/fc.c``
0112 WANPIPE_MAGIC 0x414C4453 sdla_{dump,exec} ``include/linux/wanpipe.h``
0113 CS_CARD_MAGIC 0x43525553 cs_card ``sound/oss/cs46xx.c``
0114 LABELCL_MAGIC 0x4857434c labelcl_info_s ``include/asm/ia64/sn/labelcl.h``
0115 ISDN_ASYNC_MAGIC 0x49344C01 modem_info ``include/linux/isdn.h``
0116 CTC_ASYNC_MAGIC 0x49344C01 ctc_tty_info ``drivers/s390/net/ctctty.c``
0117 ISDN_NET_MAGIC 0x49344C02 isdn_net_local_s ``drivers/isdn/i4l/isdn_net_lib.h``
0118 SAVEKMSG_MAGIC2 0x4B4D5347 savekmsg ``arch/*/amiga/config.c``
0119 CS_STATE_MAGIC 0x4c4f4749 cs_state ``sound/oss/cs46xx.c``
0120 SLAB_C_MAGIC 0x4f17a36d kmem_cache ``mm/slab.c``
0121 COW_MAGIC 0x4f4f4f4d cow_header_v1 ``arch/um/drivers/ubd_user.c``
0122 I810_CARD_MAGIC 0x5072696E i810_card ``sound/oss/i810_audio.c``
0123 TRIDENT_CARD_MAGIC 0x5072696E trident_card ``sound/oss/trident.c``
0124 ROUTER_MAGIC 0x524d4157 wan_device [in ``wanrouter.h`` pre 3.9]
0125 SAVEKMSG_MAGIC1 0x53415645 savekmsg ``arch/*/amiga/config.c``
0126 GDA_MAGIC 0x58464552 gda ``arch/mips/include/asm/sn/gda.h``
0127 RED_MAGIC1 0x5a2cf071 (any) ``mm/slab.c``
0128 EEPROM_MAGIC_VALUE 0x5ab478d2 lanai_dev ``drivers/atm/lanai.c``
0129 HDLCDRV_MAGIC 0x5ac6e778 hdlcdrv_state ``include/linux/hdlcdrv.h``
0130 PCXX_MAGIC 0x5c6df104 channel ``drivers/char/pcxx.h``
0131 KV_MAGIC 0x5f4b565f kernel_vars_s ``arch/mips/include/asm/sn/klkernvars.h``
0132 I810_STATE_MAGIC 0x63657373 i810_state ``sound/oss/i810_audio.c``
0133 TRIDENT_STATE_MAGIC 0x63657373 trient_state ``sound/oss/trident.c``
0134 M3_CARD_MAGIC 0x646e6f50 m3_card ``sound/oss/maestro3.c``
0135 FW_HEADER_MAGIC 0x65726F66 fw_header ``drivers/atm/fore200e.h``
0136 SLOT_MAGIC 0x67267321 slot ``drivers/hotplug/cpqphp.h``
0137 SLOT_MAGIC 0x67267322 slot ``drivers/hotplug/acpiphp.h``
0138 LO_MAGIC 0x68797548 nbd_device ``include/linux/nbd.h``
0139 M3_STATE_MAGIC 0x734d724d m3_state ``sound/oss/maestro3.c``
0140 VMALLOC_MAGIC 0x87654320 snd_alloc_track ``sound/core/memory.c``
0141 KMALLOC_MAGIC 0x87654321 snd_alloc_track ``sound/core/memory.c``
0142 PWC_MAGIC 0x89DC10AB pwc_device ``drivers/usb/media/pwc.h``
0143 NBD_REPLY_MAGIC 0x96744668 nbd_reply ``include/linux/nbd.h``
0144 ENI155_MAGIC 0xa54b872d midway_eprom ``drivers/atm/eni.h``
0145 CODA_MAGIC 0xC0DAC0DA coda_file_info ``fs/coda/coda_fs_i.h``
0146 YAM_MAGIC 0xF10A7654 yam_port ``drivers/net/hamradio/yam.c``
0147 CCB_MAGIC 0xf2691ad2 ccb ``drivers/scsi/ncr53c8xx.c``
0148 QUEUE_MAGIC_FREE 0xf7e1c9a3 queue_entry ``drivers/scsi/arm/queue.c``
0149 QUEUE_MAGIC_USED 0xf7e1cc33 queue_entry ``drivers/scsi/arm/queue.c``
0150 HTB_CMAGIC 0xFEFAFEF1 htb_class ``net/sched/sch_htb.c``
0151 NMI_MAGIC 0x48414d4d455201 nmi_s ``arch/mips/include/asm/sn/nmi.h``
0152 ===================== ================ ======================== ==========================================
0153
0154 Da notare che ci sono anche dei numeri magici specifici per driver nel
0155 *sound memory management*. Consultate ``include/sound/sndmagic.h`` per una
0156 lista completa. Molti driver audio OSS hanno i loro numeri magici costruiti a
0157 partire dall'identificativo PCI della scheda audio - nemmeno questi sono
0158 elencati in questo file.
0159
0160 Il file-system HFS è un altro grande utilizzatore di numeri magici - potete
0161 trovarli qui ``fs/hfs/hfs.h``.