Indicizzati file sotto /proc, ed ulteriore materiale su ''inotify''.
authorSimone Piccardi <piccardi@gnulinux.it>
Sun, 15 Jul 2007 18:25:39 +0000 (18:25 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Sun, 15 Jul 2007 18:25:39 +0000 (18:25 +0000)
12 files changed:
fileadv.tex
fileunix.tex
intro.tex
ipc.tex
macro.tex
process.tex
prochand.tex
session.tex
signal.tex
sockctrl.tex
system.tex
tcpsock.tex

index 90157c7..662d8f8 100644 (file)
@@ -882,7 +882,7 @@ sola modalit
 anche con il fatto che sono stati restituiti meno dati di quelli richiesti.
 
 Come le precedenti \func{select} e \func{poll}, le funzioni dell'interfaccia
-di \textit{epoll} vengono utiilizzate prevalentemente con i server di rete,
+di \textit{epoll} vengono utilizzate prevalentemente con i server di rete,
 quando si devono tenere sotto osservazione un gran numero di socket; per
 questo motivo rimandiamo di nuovo la trattazione di un esempio concreto a
 quando avremo esaminato in dettaglio le caratteristiche dei socket, in
@@ -996,8 +996,8 @@ diventati attivi. L'unico modo per essere sicuri che questo non avvenga 
 impostare la lunghezza della coda dei segnali real-time ad una dimensione
 identica al valore massimo del numero di file descriptor
 utilizzabili.\footnote{vale a dire impostare il contenuto di
-  \texttt{/proc/sys/kernel/rtsig-max} allo stesso valore del contenuto di
-  \texttt{/proc/sys/fs/file-max}.}
+  \procfile{/proc/sys/kernel/rtsig-max} allo stesso valore del contenuto di
+  \procfile{/proc/sys/fs/file-max}.}
 
 % TODO fare esempio che usa O_ASYNC
 
@@ -1145,7 +1145,7 @@ operazione di lettura, declassando il \textit{lease} a lettura con
 
 Se il \textit{lease holder} non provvede a rilasciare il \textit{lease} entro
 il numero di secondi specificato dal parametro di sistema mantenuto in
-\file{/proc/sys/fs/lease-break-time} sarà il kernel stesso a rimuoverlo (o
+\procfile{/proc/sys/fs/lease-break-time} sarà il kernel stesso a rimuoverlo (o
 declassarlo) automaticamente.\footnote{questa è una misura di sicurezza per
   evitare che un processo blocchi indefinitamente l'accesso ad un file
   acquisendo un \textit{lease}.} Una volta che un \textit{lease} è stato
@@ -1164,8 +1164,8 @@ di gestione dei file dei vari desktop grafici.
 
 Per risolvere questo problema a partire dal kernel 2.4 è stata allora creata
 un'altra interfaccia,\footnote{si ricordi che anche questa è una interfaccia
-  specifica di Linux che deve essere evitata se si vogliono scrivere progammi
-  portabili, e che le funzionalità illustrate sono disponibili soltato se è
+  specifica di Linux che deve essere evitata se si vogliono scrivere programmi
+  portabili, e che le funzionalità illustrate sono disponibili soltanto se è
   stata definita la macro \macro{\_GNU\_SOURCE}.} chiamata \textit{dnotify},
 che consente di richiedere una notifica quando una directory, o uno qualunque
 dei file in essa contenuti, viene modificato.  Come per i \textit{file lease}
@@ -1254,15 +1254,16 @@ problematica.
 
 \index{file!dnotify|)}
 
-Per risolvere i problemi appena illustrati, a partire dal kernel 2.6.13, è
-stata introdotta una nuova interfaccia per l'osservazione delle modifiche a
-file o directory, chiamata \textit{inotify}.\footnote{le corrispondenti
-  funzioni di interfaccia sono state introdotte nelle glibc 2.4.} Anche questa
-è una interfaccia specifica di Linux (pertanto non deve essere usata se si
-devono scrivere programmi portabili), ed è basata sull'uso di una coda di
-notifica degli eventi associata ad un singolo file descriptor, risolvendo così
-il principale problema di \itindex{dnotify} \textit{dnotify}. La coda viene
-creata attraverso la funzione \funcd{inotify\_init}, il cui prototipo è:
+Per risolvere i problemi appena illustrati è stata introdotta una nuova
+interfaccia per l'osservazione delle modifiche a file o directory, chiamata
+\textit{inotify}.\footnote{l'interfaccia è disponibile a partire dal kernel
+  2.6.13, le relative funzioni sono state introdotte nelle glibc 2.4.}  Anche
+questa è una interfaccia specifica di Linux (pertanto non deve essere usata se
+si devono scrivere programmi portabili), ed è basata sull'uso di una coda di
+notifica degli eventi associata ad un singolo file descriptor, il che permette
+di risolvere il principale problema di \itindex{dnotify} \textit{dnotify}.  La
+coda viene creata attraverso la funzione \funcd{inotify\_init}, il cui
+prototipo è:
 \begin{prototype}{sys/inotify.h}
   {int inotify\_init(void)}
   
@@ -1281,35 +1282,39 @@ creata attraverso la funzione \funcd{inotify\_init}, il cui prototipo 
 }
 \end{prototype}
 
-La funzione non prende alcun argomento, e restituisce un file descriptor
-associato alla coda, attraverso il quale verranno effettuate le operazioni di
-notifica. Si tratta di un file descriptor speciale, che non è associato a
-nessun file su disco, ma che viene utilizzato per notificare gli eventi che si
-sono posti in osservazione all'applicazione che usa l'interfaccia di
-\textit{inotify}. Dato che questo file descriptor non è associato a nessun
-file o directory, questo consente anche di evitare l'inconveniente di non
-poter smontare un filesystem i cui file sono tenuti sotto
-osservazione.\footnote{anzi, una delle capacità dell'interfaccia di
+La funzione non prende alcun argomento; inizializza una istanza di
+\textit{inotify} e restituisce un file descriptor attraverso il quale verranno
+effettuate le operazioni di notifica;\footnote{per evitare abusi delle risorse
+  di sistema è previsto che un utente possa utilizzare un numero limitato di
+  istanze di \textit{inotify}; il valore di default del limite è di 128, ma
+  questo valore può essere cambiato con \func{sysctl} o usando il file
+  \procfile{/proc/sys/fs/inotify/max\_user\_instances}.} si tratta di un file
+descriptor speciale che non è associato a nessun file su disco, e che viene
+utilizzato solo per notificare gli eventi che sono stati posti in
+osservazione. Dato che questo file descriptor non è associato a nessun file o
+directory reale, l'inconveniente di non poter smontare un filesystem i cui
+file sono tenuti sotto osservazione viene completamente
+eliminato.\footnote{anzi, una delle capacità dell'interfaccia di
   \textit{inotify} è proprio quella di notificare il fatto che il filesystem
   su cui si trova il file o la directory osservata è stato smontato.}
 
 Inoltre trattandosi di un file descriptor a tutti gli effetti, esso potrà
 essere utilizzato come argomento per le funzioni \func{select} e \func{poll} e
-con l'interfaccia di \textit{epoll}, e siccome gli eventi vengono notificati
+con l'interfaccia di \textit{epoll}; siccome gli eventi vengono notificati
 come dati disponibili in lettura sul file descriptor, dette funzioni
 ritorneranno tutte le volte che si avrà un evento di notifica. Così, invece di
-dover utilizzare i segnali, si potrà gestire l'osservazione delle modifiche
-con l'\textit{I/O multiplexing}, utilizzando secondo le modalità illustrate in
-sez.~\ref{sec:file_multiplexing}.
+dover utilizzare i segnali,\footnote{considerati una pessima scelta dal punto
+  di vista dell'interfaccia utente.} si potrà gestire l'osservazione delle
+modifiche con una qualunque delle modalità di \textit{I/O multiplexing}
+illustrate in sez.~\ref{sec:file_multiplexing}.
 
 Infine l'interfaccia di \textit{inotify} consente di mettere sotto
-osservazione sia singoli file, che intere directory; in quest'ultimo caso
-l'interfaccia restituirà informazioni sia riguardo alla directory che ai file
-che essa contiene.  Una volta creata la coda di notifica si devono definire
-gli eventi da tenere sotto osservazione; questo viene fatto tramite una
-\textsl{lista di osservazione} (o \textit{watch list}) associata alla coda.
-Per gestire la lista di osservazione l'interfaccia fornisce due funzioni, la
-prima di queste è \funcd{inotify\_add\_watch}, il cui prototipo è:
+osservazione, oltre che una directory anche singoli file.  Una volta creata la
+coda di notifica si devono definire gli eventi da tenere sotto osservazione;
+questo viene fatto attraverso una \textsl{lista di osservazione} (o
+\textit{watch list}) che è associata alla coda. Per gestire la lista di
+osservazione l'interfaccia fornisce due funzioni, la prima di queste è
+\funcd{inotify\_add\_watch}, il cui prototipo è:
 \begin{prototype}{sys/inotify.h}
   {int inotify\_add\_watch(int fd, const char *pathname, uint32\_t mask)}
 
@@ -1327,23 +1332,36 @@ prima di queste 
   ed inoltre \errval{EFAULT}, \errval{ENOMEM} e \errval{EBADF}.}
 \end{prototype}
 
-La funzione consente di creare un \textsl{evento di osservazione} (un
-cosiddetto ``\textit{watch}'') nella lista di una coda di notifica, indicata
-specificando il file descriptor ad essa associato nell'argomento \param{fd}.
-Il file o la directory da porre sotto osservazione viene invece indicato per
-nome, che viene passato nell'argomento \param{pathname}. Infine il terzo
-argomento, \param{mask}, indica che tipo di eventi devono essere tenuti sotto
-osservazione. Questo deve essere specificato come maschera binaria combinando
-i valori delle costanti riportate in tab.~\ref{tab:inotify_event_watch}. In
-essa si sono marcati con un ``$\bullet$'' gli eventi che, quando specificati
-per una directory, vengono osservati anche su tutti i file che essa contiene.
+La funzione consente di creare un ``\textsl{osservatore}'' (il cosiddetto
+``\textit{watch}'') nella lista di osservazione di una coda di notifica, che
+deve essere indicata specificando il file descriptor ad essa associato
+nell'argomento \param{fd}.\footnote{questo ovviamente dovrà essere un file
+  descriptor creato con \func{inotify\_init}.}  Il file o la directory da
+porre sotto osservazione vengono invece indicati per nome, da passare
+nell'argomento \param{pathname}.  Infine il terzo argomento, \param{mask},
+indica che tipo di eventi devono essere tenuti sotto osservazione e le
+modalità della stessa.  L'operazione può essere ripetuta per tutti i file e le
+directory che si vogliono tenere sotto osservazione,\footnote{anche in questo
+  caso c'è un limite massimo che di default è pari a 8192, ed anche questo
+  valore può essere cambiato con \func{sysctl} o usando il file
+  \procfile{/proc/sys/fs/inotify/max\_user\_watches}.} e si utilizzerà sempre
+un solo file descriptor.
+
+Il tipo di evento che si vuole osservare deve essere specificato
+nell'argomento \param{mask} come maschera binaria, combinando i valori delle
+costanti riportate in tab.~\ref{tab:inotify_event_watch} che identificano i
+singoli bit della maschera ed il relativo significato. In essa si sono marcati
+con un ``$\bullet$'' gli eventi che, quando specificati per una directory,
+vengono osservati anche su tutti i file che essa contiene.  Nella seconda
+parte della tabella si sono poi indicate alcune combinazioni predefinite dei
+flag della prima parte.
 
 \begin{table}[htb]
   \centering
   \footnotesize
   \begin{tabular}[c]{|l|c|p{10cm}|}
     \hline
-    \textbf{Valore}  & & \textbf{Significato} \\
+    \textbf{Flag}  & & \textbf{Significato} \\
     \hline
     \hline
     \const{IN\_ACCESS}        &$\bullet$& C'è stato accesso al file in
@@ -1355,7 +1373,7 @@ per una directory, vengono osservati anche su tutti i file che essa contiene.
     \const{IN\_CLOSE\_WRITE}  &$\bullet$& È stato chiuso un file aperto in
                                           scrittura.\\  
     \const{IN\_CLOSE\_NOWRITE}&$\bullet$& È stato chiuso un file aperto in
-                                          sola lettura.\\ 
+                                          sola lettura.\\
     \const{IN\_CREATE}        &$\bullet$& È stato creato un file o una
                                           directory in una directory sotto
                                           osservazione.\\  
@@ -1373,24 +1391,93 @@ per una directory, vengono osservati anche su tutti i file che essa contiene.
                                           directory sotto osservazione.\\ 
     \const{IN\_OPEN}          &$\bullet$& Un file è stato aperto.\\ 
     \hline    
+    \const{IN\_CLOSE}         & --      & Combinazione di
+                                          \const{IN\_CLOSE\_WRITE} e
+                                          \const{IN\_CLOSE\_NOWRITE}.\\  
+    \const{IN\_MOVE}          & --      & Combinazione di
+                                          \const{IN\_MOVED\_FROM} e
+                                          \const{IN\_MOVED\_TO}.\\
+    \const{IN\_ALL\_EVENTS}   & --      & Combinazione di tutti i flag
+                                          possibili.\\
+    \hline    
   \end{tabular}
   \caption{Le costanti che identificano i valori per la maschera binaria
-    dell'argomento \param{mask} di \func{inotify\_add\_watch}.} 
+    dell'argomento \param{mask} di \func{inotify\_add\_watch} che indicano il
+    tipo di evento da tenere sotto osservazione.} 
   \label{tab:inotify_event_watch}
 \end{table}
 
+Oltre ai flag di tab.~\ref{tab:inotify_event_watch}, che indicano il tipo di
+evento da osservare e che vengono utilizzati anche in uscita per indicare il
+tipo di evento avvenuto, \func{inotify\_add\_watch} supporta ulteriori
+flag,\footnote{i flag \const{IN\_DONT\_FOLLOW}, \const{IN\_MASK\_ADD} e
+  \const{IN\_ONLYDIR} sono stati introdotti a partire dalle glibc 2.5, se si
+  usa la versione 2.4 è necessario definirli a mano.}  riportati in
+tab.~\ref{tab:inotify_add_watch_flag}, che indicano le modalità di
+osservazione (da passare sempre nell'argomento \param{mask}) e che al
+contrario dei precedenti non vengono mai impostati nei risultati in uscita.
+
+\begin{table}[htb]
+  \centering
+  \footnotesize
+  \begin{tabular}[c]{|l|p{10cm}|}
+    \hline
+    \textbf{Flag}  & \textbf{Significato} \\
+    \hline
+    \hline
+    \const{IN\_DONT\_FOLLOW}& Non dereferenzia \param{pathname} se questo è un
+                              link simbolico.\\
+    \const{IN\_MASK\_ADD}   & Aggiunge a quelli già impostati i flag indicati
+                              nell'argomento \param{mask}, invece di
+                              sovrascriverli.\\
+    \const{IN\_ONESHOT}     & Esegue l'osservazione su \param{pathname} per una
+                              sola volta, rimuovendolo poi dalla \textit{watch
+                                list}.\\ 
+    \const{IN\_ONLYDIR}     & Se \param{pathname} è una directory riporta
+                              soltanto gli eventi ad essa relativi e non
+                              quelli per i file che contiene.\\ 
+    \hline    
+  \end{tabular}
+  \caption{Le costanti che identificano i valori per la maschera binaria
+    dell'argomento \param{mask} di \func{inotify\_add\_watch} che indicano le
+    modalità di osservazione.} 
+  \label{tab:inotify_add_watch_flag}
+\end{table}
+
 Se non esiste nessun \textit{watch} per il file o la directory specificata
 questo verrà creato per gli eventi specificati dall'argomento \param{mask},
-altrimenti la funzione sovrascriverà le impostazioni precedenti. In caso di
-successo la funzione ritorna un intero positivo, detto \textit{watch
-  descriptor} che identifica univocamente l'evento di osservazione. Questo
-valore è importante perché è soltanto con esso che si può rimuovere un evento
-di osservazione, usando la seconda funzione dell'interfaccia di gestione,
-\funcd{inotify\_rm\_watch}, il cui prototipo è:
+altrimenti la funzione sovrascriverà le impostazioni precedenti, a meno che
+non si sia usato il flag \const{IN\_MASK\_ADD}, nel qual caso gli eventi
+specificati saranno aggiunti a quelli già presenti.
+
+Come accennato quando si tiene sotto osservazione una directory vengono
+restituite le informazioni sia riguardo alla directory stessa che ai file che
+essa contiene; questo comportamento può essere disabilitato utilizzando il
+flag \const{IN\_ONLYDIR}, che richiede di riportare soltanto gli eventi
+relativi alla directory stessa. Si tenga presente inoltre che quando si
+osserva una directory vengono riportati solo gli eventi sui file che essa
+contiene direttamente, non quelli relativi a file contenuti in eventuali
+sottodirectory; se si vogliono osservare anche questi sarà necessario creare
+ulteriori \textit{watch} per ciascuna sottodirectory.
+
+Infine usando il flag \const{IN\_ONESHOT} è possibile richiedere una notifica
+singola;\footnote{questa funzionalità però è disponibile soltato a partire dal
+  kernel 2.6.16.} una volta verificatosi uno qualunque fra gli eventi
+richiesti con \func{inotify\_add\_watch} l'\textsl{osservatore} verrà
+automaticamente rimosso dalla lista di osservazione e nessun ulteriore evento
+sarà più notificato.
+
+In caso di successo \func{inotify\_add\_watch} ritorna un intero positivo,
+detto \textit{watch descriptor}; è tramite questo valore che si identifica
+univocamente un \textsl{osservatore} su una coda di notifica, sia per quanto
+riguarda i risultati restituiti da \textit{inotify}, che per quanto riguarda
+la eventuale rimozione dello stesso; la seconda funzione per la gestione delle
+liste di osservazione è infatti \funcd{inotify\_rm\_watch}, che permette di
+rimuovere un \textsl{osservatore}; il suo prototipo è:
 \begin{prototype}{sys/inotify.h}
   {int inotify\_rm\_watch(int fd, uint32\_t wd)}
 
-  Rimuove un evento di osservazione.
+  Rimuove un \textsl{osservatore} da una coda di notifica.
   
   \bodydesc{La funzione restituisce 0 in caso di successo, o $-1$ in caso di
     errore, nel qual caso \var{errno} assumerà uno dei valori:
@@ -1403,9 +1490,20 @@ di osservazione, usando la seconda funzione dell'interfaccia di gestione,
 }
 \end{prototype}
 
+La funzione rimuove dalla coda di notifica identificata dall'argomento
+\param{fd} l'osservatore identificato dal \textit{watch descriptor}
+\param{wd};\footnote{ovviamente deve essere usato per questo argomento un
+  valore ritornato da \func{inotify\_add\_watch}, altrimenti si avrà un errore
+  di \errval{EINVAL}.} inoltre, contemporaneamente alla rimozione
+dell'osservatore, sulla coda di notifica verrà generato un evento di tipo
+\const{IN\_IGNORED} (vedi tab.~\ref{tab:inotify_read_event_flag}).
+
+
 Oltre che per la rimozione, il \textit{watch descriptor} viene usato anche per
 identificare l'evento a cui si fa riferimento nella lista dei risultati
-restituiti da \textit{inotify}
+restituiti da \textit{inotify}; questi ultimi infatti vengono notificati alle
+applicazioni che usano l'interfaccia di \textit{inotify} come dati presenti in
+lettura su file descriptor creato con \func{inotify\_init}. 
 
 
 \begin{figure}[!htb]
@@ -1431,6 +1529,29 @@ numero di file che sono cambiati.
 
 
 
+
+
+\begin{table}[htb]
+  \centering
+  \footnotesize
+  \begin{tabular}[c]{|l|p{10cm}|}
+    \hline
+    \textbf{Flag}  & \textbf{Significato} \\
+    \hline
+    \hline
+    \const{IN\_IGNORED}    & .\\
+    \const{IN\_ISDIR}      & .\\
+    \const{IN\_Q\_OVERFLOW}& .\\
+    \const{IN\_UNMOUNT}    & .\\
+    \hline    
+  \end{tabular}
+  \caption{Le costanti che identificano i flag aggiuntivi usati nella maschera
+    binaria del campo \var{mask} di \structd{inotify\_event}.} 
+  \label{tab:inotify_read_event_flag}
+\end{table}
+
+
+
 % TODO inserire anche inotify, vedi http://www.linuxjournal.com/article/8478
 % TODO e man inotify
 
@@ -2512,7 +2633,7 @@ mappatura che gi
 Uno dei problemi che si presenta nella gestione dell'I/O è quello in cui si
 devono trasferire grandi quantità di dati da un file descriptor ed un altro;
 questo usualmente comporta la lettura dei dati dal primo file descriptor in un
-buffer in menoria, da cui essi vengono poi scritti sul secondo.
+buffer in memoria, da cui essi vengono poi scritti sul secondo.
 
 Benché il kernel ottimizzi la gestione di questo processo quando si ha a che
 fare con file normali, in generale quando i dati da trasferire sono molti si
@@ -2578,7 +2699,7 @@ supervisione da parte dei programmi, si eseguir
 tutte le operazioni (e a gestire il \textit{caching} dei dati) per portarle a
 termine in quello che ritiene essere il modo più efficiente.
 
-Il problema è che il concetto di migliore efficienza inpiegato dal kernel è
+Il problema è che il concetto di migliore efficienza impiegato dal kernel è
 relativo all'uso generico, mentre esistono molti casi in cui ci sono esigenze
 specifiche dei singoli programmi, che avendo una conoscenza diretta di come
 verranno usati i file, possono necessitare di effettuare delle ottimizzazioni
@@ -3495,10 +3616,11 @@ possibilit
 % LocalWords:  attribute Universe epoll Solaris kqueue level triggered Jonathan
 % LocalWords:  Lemon BSDCON edge Libenzi kevent backporting epfd EEXIST ENOENT
 % LocalWords:  MOD wait EPOLLIN EPOLLOUT EPOLLRDHUP SOCK EPOLLPRI EPOLLERR one
-% LocalWords:  EPOLLHUP EPOLLET EPOLLONESHOT shot maxevents
+% LocalWords:  EPOLLHUP EPOLLET EPOLLONESHOT shot maxevents ctlv ALL DONT HPUX
 
 
 %%% Local Variables: 
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
+% LocalWords:  FOLLOW ONESHOT ONLYDIR FreeBSD EIO caching
index 9be2f23..f4c8fa6 100644 (file)
@@ -922,9 +922,9 @@ valore tradizionale, usato da BSD, per l'update dei dati 
 in Linux il valore utilizzato è di 5 secondi; con le nuove versioni\footnote{a
   partire dal kernel 2.2.8} poi, è il kernel che si occupa direttamente di
 tutto quanto attraverso il demone interno \cmd{bdflush}, il cui comportamento
-può essere controllato attraverso il file \file{/proc/sys/vm/bdflush} (per il
-significato dei valori si può leggere la documentazione allegata al kernel in
-\file{Documentation/sysctl/vm.txt}).
+può essere controllato attraverso il file \procfile{/proc/sys/vm/bdflush} (per
+il significato dei valori si può leggere la documentazione allegata al kernel
+in \file{Documentation/sysctl/vm.txt}).
 
 Quando si vogliono scaricare soltanto i dati di un file (ad esempio essere
 sicuri che i dati di un database sono stati registrati su disco) si possono
index 69b22e7..aff48b7 100644 (file)
--- a/intro.tex
+++ b/intro.tex
@@ -254,9 +254,9 @@ accesso ai file e quindi anche alle periferiche, in maniera pi
 definendo gruppi di lavoro, di accesso a determinate risorse, ecc.
 
 L'utente e il gruppo sono identificati da due numeri, la cui corrispondenza ad
-un nome espresso in caratteri è inserita nei due file \file{/etc/passwd} e
-\file{/etc/groups}.\footnote{in realtà negli sistemi più moderni, come vedremo
-  in sez.~\ref{sec:sys_user_group} queste informazioni possono essere
+un nome espresso in caratteri è inserita nei due file \conffile{/etc/passwd} e
+\conffile{/etc/group}.\footnote{in realtà negli sistemi più moderni, come
+  vedremo in sez.~\ref{sec:sys_user_group} queste informazioni possono essere
   mantenute, con l'uso del \itindex{Name~Service~Switch} \textit{Name Service
     Switch}, su varie tipologie di supporti, compresi server centralizzati
   come LDAP.}  Questi numeri sono l'\textit{user identifier}, detto in breve
diff --git a/ipc.tex b/ipc.tex
index 169f1dd..df279c9 100644 (file)
--- a/ipc.tex
+++ b/ipc.tex
@@ -1017,8 +1017,9 @@ Il sistema dispone sempre di un numero fisso di oggetti di IPC,\footnote{fino
   altri limiti relativi al \textit{SysV IPC}) solo con una ricompilazione del
   kernel, andando a modificarne la definizione nei relativi header file.  A
   partire dal kernel 2.4.x è possibile cambiare questi valori a sistema attivo
-  scrivendo sui file \file{shmmni}, \file{msgmni} e \file{sem} di
-  \file{/proc/sys/kernel} o con l'uso di \func{sysctl}.} e per ciascuno di
+  scrivendo sui file \procrelfile{/proc/sys/kernel}{shmmni},
+  \procrelfile{/proc/sys/kernel}{msgmni} e \procrelfile{/proc/sys/kernel}{sem}
+  di \file{/proc/sys/kernel} o con l'uso di \func{sysctl}.} e per ciascuno di
 essi viene mantenuto in \var{seq} un numero di sequenza progressivo che viene
 incrementato di uno ogni volta che l'oggetto viene cancellato. Quando
 l'oggetto viene creato usando uno spazio che era già stato utilizzato in
@@ -1175,7 +1176,9 @@ Le code di messaggi sono caratterizzate da tre limiti fondamentali, definiti
 negli header e corrispondenti alle prime tre costanti riportate in
 tab.~\ref{tab:ipc_msg_limits}, come accennato però in Linux è possibile
 modificare questi limiti attraverso l'uso di \func{sysctl} o scrivendo nei
-file \file{msgmax}, \file{msgmnb} e \file{msgmni} di \file{/proc/sys/kernel/}.
+file \procrelfile{/proc/sys/kernel}{msgmax},
+\procrelfile{/proc/sys/kernel}{msgmnb} e
+\procrelfile{/proc/sys/kernel}{msgmni} di \file{/proc/sys/kernel/}.
 
 
 \begin{figure}[htb]
@@ -1882,7 +1885,7 @@ Come per le code di messaggi anche per gli insiemi di semafori esistono una
 serie di limiti, i cui valori sono associati ad altrettante costanti, che si
 sono riportate in tab.~\ref{tab:ipc_sem_limits}. Alcuni di questi limiti sono
 al solito accessibili e modificabili attraverso \func{sysctl} o scrivendo
-direttamente nel file \file{/proc/sys/kernel/sem}.
+direttamente nel file \procfile{/proc/sys/kernel/sem}.
 
 La funzione che permette di effettuare le varie operazioni di controllo sui
 semafori (fra le quali, come accennato, è impropriamente compresa anche la
@@ -2428,14 +2431,16 @@ che permettono di cambiarne il valore.
     & \textbf{Significato} \\
     \hline
     \hline
-    \const{SHMALL}& 0x200000&\file{shmall}& Numero massimo di pagine che 
-                                       possono essere usate per i segmenti di
-                                       memoria condivisa.\\
-    \const{SHMMAX}&0x2000000&\file{shmmax}& Dimensione massima di un segmento 
-                                            di memoria condivisa.\\
-    \const{SHMMNI}&     4096&\file{msgmni}& Numero massimo di segmenti di 
-                                            memoria condivisa presenti nel
-                                            kernel.\\ 
+    \const{SHMALL}& 0x200000&\procrelfile{/proc/sys/kernel}{shmall}
+                            & Numero massimo di pagine che 
+                              possono essere usate per i segmenti di
+                              memoria condivisa.\\
+    \const{SHMMAX}&0x2000000&\procrelfile{/proc/sys/kernel}{shmmax} 
+                            & Dimensione massima di un segmento di memoria
+                              condivisa.\\ 
+    \const{SHMMNI}&     4096&\procrelfile{/proc/sys/kernel}{msgmni}
+                            & Numero massimo di segmenti di memoria condivisa
+                              presenti nel kernel.\\ 
     \const{SHMMIN}&        1& ---         & Dimensione minima di un segmento di
                                             memoria condivisa.\\
     \const{SHMLBA}&\const{PAGE\_SIZE}&--- & Limite inferiore per le dimensioni
index d8af80e..9f4ea32 100644 (file)
--- a/macro.tex
+++ b/macro.tex
 \newcommand{\link}[1]{\texttt{#1}}    % html link
 \newcommand{\ctyp}[1]{\texttt{#1}}    % C standard type
 
+\newcommand{\headfile}[1]{%
+\index{file!include!{#1}@{{\tt {#1}}}}\texttt{#1}%
+%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
+}                                     % header file name
+\newcommand{\procfile}[1]{%
+\index{file!filesystem~\texttt{/proc}!{#1}@{{\tt {#1}}}}\texttt{#1}%
+%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
+}                                     % /proc file name
+\newcommand{\sysfile}[1]{%
+\index{file!di~sistema!{#1}@{{\tt {#1}}}}\texttt{#1}%
+%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
+}                                     % system file name
+\newcommand{\conffile}[1]{%
+\index{file!di~configurazione!{#1}@{{\tt {#1}}}}\texttt{#1}%
+%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
+}                                     % configuration file name
+\newcommand{\procrelfile}[2]{%
+\index{file!filesystem~\texttt{/proc}!{#2}@{{\tt {#1}/{#2}}}}\texttt{#2}%
+%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
+}   
+
+
 \newcommand{\type}[1]{%
 \index{tipo!{#1}@{{\tt {#1}}}}\texttt{#1}%
 %\index{#1@{{\tt {#1}} (tipo)}}\texttt{#1}%
index 5ad94ed..a0e32df 100644 (file)
@@ -49,7 +49,7 @@ dinamico del codice e alla fine lo esegue. Infatti, a meno di non aver
 specificato il flag \texttt{-static} durante la compilazione, tutti i
 programmi in Linux sono incompleti e necessitano di essere \textsl{collegati}
 alle librerie condivise quando vengono avviati.  La procedura è controllata da
-alcune variabili di ambiente e dal contenuto di \file{/etc/ld.so.conf}. I
+alcune variabili di ambiente e dal contenuto di \conffile{/etc/ld.so.conf}. I
 dettagli sono riportati nella man page di \cmd{ld.so}.
 
 Il sistema fa partire qualunque programma chiamando la funzione \func{main};
index a6b8484..9717529 100644 (file)
@@ -1471,8 +1471,8 @@ condivise, viene lanciato il \textit{linker} dinamico \cmd{/lib/ld.so} prima
 del programma per caricare le librerie necessarie ed effettuare il link
 dell'eseguibile. Se il programma è in formato ELF per caricare le librerie
 dinamiche viene usato l'interprete indicato nel segmento \const{PT\_INTERP},
-in genere questo è \file{/lib/ld-linux.so.1} per programmi collegati con le
-\acr{libc5}, e \file{/lib/ld-linux.so.2} per programmi collegati con le
+in genere questo è \sysfile{/lib/ld-linux.so.1} per programmi collegati con le
+\acr{libc5}, e \sysfile{/lib/ld-linux.so.2} per programmi collegati con le
 \acr{glibc}. 
 
 Infine nel caso il file sia uno script esso deve iniziare con una linea nella
@@ -1721,12 +1721,12 @@ il programma, effettuare il lavoro che non necessita di privilegi aggiuntivi,
 ed eventualmente tornare indietro.
 
 Come esempio per chiarire l'uso di queste funzioni prendiamo quello con cui
-viene gestito l'accesso al file \file{/var/log/utmp}.  In questo file viene
+viene gestito l'accesso al file \sysfile{/var/log/utmp}.  In questo file viene
 registrato chi sta usando il sistema al momento corrente; chiaramente non può
 essere lasciato aperto in scrittura a qualunque utente, che potrebbe
 falsificare la registrazione. Per questo motivo questo file (e l'analogo
-\file{/var/log/wtmp} su cui vengono registrati login e logout) appartengono ad
-un gruppo dedicato (\acr{utmp}) ed i programmi che devono accedervi (ad
+\sysfile{/var/log/wtmp} su cui vengono registrati login e logout) appartengono
+ad un gruppo dedicato (\acr{utmp}) ed i programmi che devono accedervi (ad
 esempio tutti i programmi di terminale in X, o il programma \cmd{screen} che
 crea terminali multipli su una console) appartengono a questo gruppo ed hanno
 il bit \acr{sgid} impostato.
@@ -1740,8 +1740,8 @@ situazione degli identificatori 
   \textsl{group-ID salvato}    &=& \textrm{\acr{utmp}}
 \end{eqnarray*}
 in questo modo, dato che il \textsl{group-ID effettivo} è quello giusto, il
-programma può accedere a \file{/var/log/utmp} in scrittura ed aggiornarlo. A
-questo punto il programma può eseguire una \code{setgid(getgid())} per
+programma può accedere a \sysfile{/var/log/utmp} in scrittura ed aggiornarlo.
+questo punto il programma può eseguire una \code{setgid(getgid())} per
 impostare il \textsl{group-ID effettivo} a quello dell'utente (e dato che il
 \textsl{group-ID reale} corrisponde la funzione avrà successo), in questo modo
 non sarà possibile lanciare dal terminale programmi che modificano detto file,
@@ -1754,7 +1754,7 @@ in tal caso infatti la situazione degli identificatori sarebbe:
 \end{eqnarray*}
 e ogni processo lanciato dal terminale avrebbe comunque \acr{gid} come
 \textsl{group-ID effettivo}. All'uscita dal terminale, per poter di nuovo
-aggiornare lo stato di \file{/var/log/utmp} il programma eseguirà una
+aggiornare lo stato di \sysfile{/var/log/utmp} il programma eseguirà una
 \code{setgid(utmp)} (dove \var{utmp} è il valore numerico associato al gruppo
 \acr{utmp}, ottenuto ad esempio con una precedente \func{getegid}), dato che
 in questo caso il valore richiesto corrisponde al \textsl{group-ID salvato} la
@@ -1765,7 +1765,7 @@ funzione avr
   \textsl{group-ID effettivo}  &=& \textrm{\acr{utmp}} \\
   \textsl{group-ID salvato}    &=& \textrm{\acr{utmp} (invariato)}
 \end{eqnarray*}
-consentendo l'accesso a \file{/var/log/utmp}.
+consentendo l'accesso a \sysfile{/var/log/utmp}.
 
 Occorre però tenere conto che tutto questo non è possibile con un processo con
 i privilegi di amministratore, in tal caso infatti l'esecuzione di una
@@ -2055,7 +2055,7 @@ un utente specifico, si pu
 \end{functions}
 
 La funzione esegue la scansione del database dei gruppi (usualmente
-\file{/etc/groups}) cercando i gruppi di cui è membro l'utente \param{user}
+\conffile{/etc/group}) cercando i gruppi di cui è membro l'utente \param{user}
 con cui costruisce una lista di gruppi supplementari, a cui aggiunge anche
 \param{group}, infine imposta questa lista per il processo corrente usando
 \func{setgroups}.  Si tenga presente che sia \func{setgroups} che
@@ -2330,7 +2330,7 @@ un \textsl{AND} binario del contenuto corrente del \textit{capabilities
 capacità in esso elencate.
 
 Il \textit{capabilities bounding set} è un parametro di sistema, accessibile
-attraverso il contenuto del file \file{/proc/sys/kernel/cap-bound}, che per
+attraverso il contenuto del file \procfile{/proc/sys/kernel/cap-bound}, che per
 questa sua caratteristica consente di impostare un limite generale alle
 capacità che possono essere accordate ai vari processi.  Questo valore può
 essere impostato ad un valore arbitrario esclusivamente dal primo processo
index 4652bc5..da7aff4 100644 (file)
@@ -497,7 +497,7 @@ Nella maggior parte delle distribuzioni di GNU/Linux\footnote{fa eccezione la
   distribuzione \textit{Slackware}, come alcune distribuzioni su dischetto, ed
   altre distribuzioni dedicate a compiti limitati e specifici.}  viene usata
 la procedura di avvio di System V; questa prevede che \cmd{init} legga dal
-file di configurazione \file{/etc/inittab} quali programmi devono essere
+file di configurazione \conffile{/etc/inittab} quali programmi devono essere
 lanciati, ed in quali modalità, a seconda del cosiddetto \textit{run level},
 anch'esso definito nello stesso file.
 
@@ -527,7 +527,7 @@ perci
 tutto ripetuto per ciascuno dei terminali che si hanno a disposizione (o per
 un certo numero di essi, nel caso delle console virtuali), secondo quanto
 indicato dall'amministratore nel file di configurazione del programma,
-\file{/etc/inittab}.
+\conffile{/etc/inittab}.
 
 Quando viene lanciato da \cmd{init} il programma parte con i privilegi di
 amministratore e con un ambiente vuoto; \cmd{getty} si cura di chiamare
@@ -720,7 +720,7 @@ meccanismi come:
 \item scartare.
 \end{itemize*}
 secondo le modalità che questo preferisce e che possono essere impostate
-attraverso il file di configurazione \file{/etc/syslog.conf} (maggiori
+attraverso il file di configurazione \conffile{/etc/syslog.conf} (maggiori
 dettagli si possono trovare sulle pagine di manuale per questo file e per
 \cmd{syslogd}).
 
index 0679079..f2dd09b 100644 (file)
@@ -2452,8 +2452,8 @@ installato un gestore con \const{SA\_SIGINFO} e ci sono risorse disponibili,
   sez.~\ref{sec:sys_limits}; il suo valore minimo secondo lo standard,
   \const{\_POSIX\_SIGQUEUE\_MAX}, è pari a 32. Nel caso di Linux questo è uno
   dei parametri del kernel impostabili sia con \func{sysctl}, che scrivendolo
-  direttamente in \file{/proc/sys/kernel/rtsig-max}, il valore predefinito è
-  di 1024.} nella coda dei segnali real-time) esso viene inserito e diventa
+  direttamente in \procfile{/proc/sys/kernel/rtsig-max}, il valore predefinito
+  è di 1024.} nella coda dei segnali real-time) esso viene inserito e diventa
 pendente; una volta consegnato riporterà nel campo \var{si\_code} di
 \struct{siginfo\_t} il valore \const{SI\_QUEUE} e il campo \var{si\_value}
 riceverà quanto inviato con \param{value}. Se invece si è installato un
index 454aece..c5bfafc 100644 (file)
@@ -2260,8 +2260,10 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   per mantenere dati amministrativi e strutture interne, e solo una parte
   viene usata come buffer per i dati, mentre il valore letto da
   \func{getsockopt} e quello riportato nei vari parametri di
-  \textit{sysctl}\footnote{cioè \texttt{wmem\_max} e \texttt{rmem\_max} in
-    \texttt{/proc/sys/net/core} e \texttt{tcp\_wmem} e \texttt{tcp\_rmem} in
+  \textit{sysctl}\footnote{cioè \procrelfile{/proc/sys/net/core}{wmem\_max} e
+    \procrelfile{/proc/sys/net/core}{rmem\_max} in \texttt{/proc/sys/net/core}
+    e \procrelfile{/proc/sys/net/ipv4}{tcp\_wmem} e
+    \procrelfile{/proc/sys/net/ipv4}{tcp\_rmem} in
     \texttt{/proc/sys/net/ipv4}, vedi sez.~\ref{sec:sock_sysctl}.} indica la
   memoria effettivamente impiegata.  Si tenga presente inoltre che le
   modifiche alle dimensioni dei buffer di ingresso e di uscita, per poter
@@ -3203,7 +3205,7 @@ quantit
   di tentativi di ritrasmissione dei segmenti SYN usati nel
   \itindex{three~way~handshake} \textit{three way handshake} prima che il
   tentativo di connessione venga abortito (si ricordi quanto accennato in
-  sez.\ref{sec:TCP_func_connect}). Sovrascrive per il singolo socket il valore
+  sez.~\ref{sec:TCP_func_connect}). Sovrascrive per il singolo socket il valore
   globale impostato con la \textit{sysctl} \texttt{tcp\_syn\_retries} (vedi
   sez.~\ref{sec:sock_ipv4_sysctl}).  Non vengono accettati valori maggiori di
   255; anche questa opzione non è standard e deve essere evitata se si vuole
@@ -3969,24 +3971,25 @@ socket.  Quelli descritti anche nella pagina di manuale, accessibile con
 \texttt{man 7 socket} sono i seguenti:
 
 \begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
-\item[\texttt{rmem\_default}] imposta la dimensione di default del buffer di
-  lettura (cioè per i dati in ingresso) dei socket.
-\item[\texttt{rmem\_max}] imposta la dimensione massima che si può assegnare al
-  buffer di ingresso dei socket attraverso l'uso dell'opzione
-  \const{SO\_RCVBUF}.
-\item[\texttt{wmem\_default}] imposta la dimensione di default del buffer di
-  scrittura (cioè per i dati in uscita) dei socket.
-\item[\texttt{wmem\_max}] imposta la dimensione massima che si può assegnare al
-  buffer di uscita dei socket attraverso l'uso dell'opzione
-  \const{SO\_SNDBUF}.
-\item[\texttt{message\_cost}, \texttt{message\_burst}] contengono le
-  impostazioni del \itindex{bucket~filter} \textit{bucket filter} che
-  controlla l'emissione di messaggi di avviso da parte kernel per eventi
-  relativi a problemi sulla rete, imponendo un limite che consente di
-  prevenire eventuali attacchi di \itindex{Denial~of~Service~(DoS)}
-  \textit{Denial of Service} usando i log.\footnote{senza questo limite un
-    attaccante potrebbe inviare ad arte un traffico che generi
-    intenzionalmente messaggi di errore, per saturare il sistema dei log.}
+\item[\procrelfile{/proc/sys/net/core}{rmem\_default}] imposta la dimensione
+  di default del buffer di lettura (cioè per i dati in ingresso) dei socket.
+\item[\procrelfile{/proc/sys/net/core}{rmem\_max}] imposta la dimensione
+  massima che si può assegnare al buffer di ingresso dei socket attraverso
+  l'uso dell'opzione \const{SO\_RCVBUF}.
+\item[\procrelfile{/proc/sys/net/core}{wmem\_default}] imposta la dimensione
+  di default del buffer di scrittura (cioè per i dati in uscita) dei socket.
+\item[\procrelfile{/proc/sys/net/core}{wmem\_max}] imposta la dimensione
+  massima che si può assegnare al buffer di uscita dei socket attraverso l'uso
+  dell'opzione \const{SO\_SNDBUF}.
+\item[\procrelfile{/proc/sys/net/core}{message\_cost},
+  \procrelfile{/proc/sys/net/core}{message\_burst}] contengono le impostazioni
+  del \itindex{bucket~filter} \textit{bucket filter} che controlla l'emissione
+  di messaggi di avviso da parte kernel per eventi relativi a problemi sulla
+  rete, imponendo un limite che consente di prevenire eventuali attacchi di
+  \itindex{Denial~of~Service~(DoS)} \textit{Denial of Service} usando i
+  log.\footnote{senza questo limite un attaccante potrebbe inviare ad arte un
+    traffico che generi intenzionalmente messaggi di errore, per saturare il
+    sistema dei log.}
 
   Il \itindex{bucket~filter} \textit{bucket filter} è un algoritmo generico
   che permette di impostare dei limiti di flusso su una quantità\footnote{uno
@@ -4009,11 +4012,11 @@ socket.  Quelli descritti anche nella pagina di manuale, accessibile con
   emissione (verranno accettati inizialmente fino ad un massimo di
   \texttt{message\_cost/message\_burst} messaggi).
 
-\item[\texttt{netdev\_max\_backlog}] numero massimo di pacchetti che possono
-  essere contenuti nella coda di ingresso generale.
+\item[\procrelfile{/proc/sys/net/core}{netdev\_max\_backlog}] numero massimo
+  di pacchetti che possono essere contenuti nella coda di ingresso generale.
 
-\item[\texttt{optmem\_max}] lunghezza massima dei dati ancillari e di
-  controllo (vedi sez.~\ref{sec:net_ancillary_data}).
+\item[\procrelfile{/proc/sys/net/core}{optmem\_max}] lunghezza massima dei
+  dati ancillari e di controllo (vedi sez.~\ref{sec:net_ancillary_data}).
 \end{basedescript}
 
 Oltre a questi nella directory \texttt{/proc/sys/net/core} si trovano altri
@@ -4021,30 +4024,34 @@ file, la cui documentazione dovrebbe essere mantenuta nei sorgenti del kernel,
 nel file \texttt{Documentation/networking/ip-sysctl.txt}; la maggior parte di
 questi però non è documentato:
 \begin{basedescript}{\desclabelwidth{3.0cm}\desclabelstyle{\nextlinelabel}}
-\item[\texttt{dev\_weight}] blocco di lavoro (\textit{work quantum}) dello
-  scheduler di processo dei pacchetti. 
+\item[\procrelfile{/proc/sys/net/core}{dev\_weight}] blocco di lavoro
+  (\textit{work quantum}) dello scheduler di processo dei pacchetti.
 
 % TODO da documentare meglio
 
-\item[\texttt{lo\_cong}] valore per l'occupazione della coda di ricezione
-  sotto la quale si considera di avere una bassa congestione.
+\item[\procrelfile{/proc/sys/net/core}{lo\_cong}] valore per l'occupazione
+  della coda di ricezione sotto la quale si considera di avere una bassa
+  congestione.
 
-\item[\texttt{mod\_cong}] valore per l'occupazione della coda di ricezione
-  sotto la quale si considera di avere una congestione moderata.
+\item[\procrelfile{/proc/sys/net/core}{mod\_cong}] valore per l'occupazione
+  della coda di ricezione sotto la quale si considera di avere una congestione
+  moderata.
 
-\item[\texttt{no\_cong}] valore per l'occupazione della coda di ricezione
-  sotto la quale si si considera di non avere congestione.
+\item[\procrelfile{/proc/sys/net/core}{no\_cong}] valore per l'occupazione
+  della coda di ricezione sotto la quale si si considera di non avere
+  congestione.
 
-\item[\texttt{no\_cong\_thresh}] valore minimo (\textit{low water mark}) per
-  il riavvio dei dispositivi congestionati.
+\item[\procrelfile{/proc/sys/net/core}{no\_cong\_thresh}] valore minimo
+  (\textit{low water mark}) per il riavvio dei dispositivi congestionati.
 
-%\item[\texttt{netdev\_fastroute}] è presente soltanto quando si è compilato il
-%  kernel con l'apposita opzione di ottimizzazione per l'uso come router (.
+  % \item[\procrelfile{/proc/sys/net/core}{netdev\_fastroute}] è presente
+  %   soltanto quando si è compilato il kernel con l'apposita opzione di
+  %   ottimizzazione per l'uso come router.
 
-\item[\texttt{somaxconn}] imposta la dimensione massima del \textit{backlog}
-  della funzione \func{listen} (vedi sez.~\ref{sec:TCP_func_listen}), e
-  corrisponde al valore della costante \const{SOMAXCONN}; il suo valore di
-  default è 128.
+\item[\procrelfile{/proc/sys/net/core}{somaxconn}] imposta la dimensione
+  massima del \textit{backlog} della funzione \func{listen} (vedi
+  sez.~\ref{sec:TCP_func_listen}), e corrisponde al valore della costante
+  \const{SOMAXCONN}; il suo valore di default è 128.
 
 \end{basedescript}
 
@@ -4063,70 +4070,72 @@ protocollo IP in quanto tale, descritti anche nella pagina di manuale
 accessibile con \texttt{man 7 ip}, sono i seguenti:
 \begin{basedescript}{\desclabelwidth{3.5cm}\desclabelstyle{\nextlinelabel}}
 
-\item[\texttt{ip\_default\_ttl}] imposta il valore di default per il campo TTL
-  (vedi sez.~\ref{sec:IP_header}) di tutti i pacchetti uscenti, stabilendo
-  così il numero massimo di router che i pacchetti possono attraversare. Il
-  valore può essere modificato anche per il singolo socket con l'opzione
-  \const{IP\_TTL}.  Prende un valore intero, ma dato che il campo citato è di
-  8 bit hanno senso solo valori fra 0 e 255. Il valore di default è 64, e non
-  ci normalmente non c'è nessuna necessità di modificarlo,\footnote{l'unico
-    motivo sarebbe per raggiungere macchine estremamente ``{lontane}'' in
-    termini di \textit{hop}, ma è praticamente } aumentare il valore è una
-  pratica poco gentile, in quanto in caso di problemi di routing si allunga
-  inutilmente il numero di ritrasmissioni.
+\item[\procrelfile{/proc/sys/net/ipv4}{ip\_default\_ttl}] imposta il valore di
+  default per il campo TTL (vedi sez.~\ref{sec:IP_header}) di tutti i
+  pacchetti uscenti, stabilendo così il numero massimo di router che i
+  pacchetti possono attraversare. Il valore può essere modificato anche per il
+  singolo socket con l'opzione \const{IP\_TTL}.  Prende un valore intero, ma
+  dato che il campo citato è di 8 bit hanno senso solo valori fra 0 e 255. Il
+  valore di default è 64, e non ci normalmente non c'è nessuna necessità di
+  modificarlo,\footnote{l'unico motivo sarebbe per raggiungere macchine
+    estremamente ``{lontane}'' in termini di \textit{hop}, ma è praticamente }
+  aumentare il valore è una pratica poco gentile, in quanto in caso di
+  problemi di routing si allunga inutilmente il numero di ritrasmissioni.
   
 
-\item[\texttt{ip\_forward}] abilita l'inoltro dei pacchetti da una interfaccia
-  ad un altra, e può essere impostato anche per la singola interfaccia. Prende
-  un valore logico (0 disabilita, diverso da zero abilita).
-
-\item[\texttt{ip\_dynaddr}] Abilita la riscrittura automatica degli indirizzi
-  associati ad un socket quando una interfaccia cambia indirizzo. Viene usato
-  per le interfacce usate nei collegamenti in dial-up, il cui indirizzo IP
-  viene assegnato dinamicamente dal provider, e può essere modificato. Un
-  valore nullo disabilita la funzionalità, con 1 la si abilita, con 2 la si
-  abilità in modalità \textsl{prolissa}.
-
-\item[\texttt{ip\_autoconfig}] Specifica se l'indirizzo IP è stato configurato
-  automaticamente via DHCP, BOOTP o RARP.
-
-\item[\texttt{ip\_local\_port\_range}] imposta l'intervallo dei valori usati
-  per l'assegnazione delle porte effimere, permette cioè di modificare i
-  valori illustrati in fig.~\ref{fig:TCP_port_alloc}; prende due valori
-  numerici, che indicano gli estremi dell'intervallo. Si abbia cura di non
-  definire un intervallo che si sovrappone a quello delle porte usate per il
-  \itindex{masquerading} \textit{masquerading}, il kernel può gestire la
-  sovrapposizione, ma si avrà una perdita di prestazioni. Si imposti sempre un
-  valore iniziale maggiore di 1024 (o meglio ancora di 4096) per evitare
-  conflitti con le porte usate dai servizi noti.
-
-\item[\texttt{ip\_no\_pmtu\_disc}] imposta la disciplina di ricerca della
-  \itindex{Maximum~Transfer~Unit} \textit{Path MTU} (vedi
-  sez.~\ref{sec:net_lim_dim} e sez.~\ref{sec:sock_ipv4_options}).
-
-\item[\texttt{ipfrag\_high\_thresh}] limite massimo (espresso in numero di
-  byte) sui pacchetti IP frammentati presenti in coda; quando questo valore
-  viene raggiunta la coda viene ripulita fino al valore
+\item[\procrelfile{/proc/sys/net/ipv4}{ip\_forward}] abilita l'inoltro dei
+  pacchetti da una interfaccia ad un altra, e può essere impostato anche per
+  la singola interfaccia. Prende un valore logico (0 disabilita, diverso da
+  zero abilita).
+
+\item[\procrelfile{/proc/sys/net/ipv4}{ip\_dynaddr}] Abilita la riscrittura
+  automatica degli indirizzi associati ad un socket quando una interfaccia
+  cambia indirizzo. Viene usato per le interfacce usate nei collegamenti in
+  dial-up, il cui indirizzo IP viene assegnato dinamicamente dal provider, e
+  può essere modificato. Un valore nullo disabilita la funzionalità, con 1 la
+  si abilita, con 2 la si abilità in modalità \textsl{prolissa}.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{ip\_autoconfig}] Specifica se
+  l'indirizzo IP è stato configurato automaticamente via DHCP, BOOTP o RARP.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{ip\_local\_port\_range}] imposta
+  l'intervallo dei valori usati per l'assegnazione delle porte effimere,
+  permette cioè di modificare i valori illustrati in
+  fig.~\ref{fig:TCP_port_alloc}; prende due valori numerici, che indicano gli
+  estremi dell'intervallo. Si abbia cura di non definire un intervallo che si
+  sovrappone a quello delle porte usate per il \itindex{masquerading}
+  \textit{masquerading}, il kernel può gestire la sovrapposizione, ma si avrà
+  una perdita di prestazioni. Si imposti sempre un valore iniziale maggiore di
+  1024 (o meglio ancora di 4096) per evitare conflitti con le porte usate dai
+  servizi noti.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{ip\_no\_pmtu\_disc}] imposta la
+  disciplina di ricerca della \itindex{Maximum~Transfer~Unit} \textit{Path
+    MTU} (vedi sez.~\ref{sec:net_lim_dim} e sez.~\ref{sec:sock_ipv4_options}).
+
+\item[\procrelfile{/proc/sys/net/ipv4}{ipfrag\_high\_thresh}] limite massimo
+  (espresso in numero di byte) sui pacchetti IP frammentati presenti in coda;
+  quando questo valore viene raggiunta la coda viene ripulita fino al valore
   \texttt{ipfrag\_low\_thresh}.
 
-\item[\texttt{ipfrag\_low\_thresh}] soglia bassa (specificata in byte) cui
-  viene riportata la coda dei pacchetti IP frammentati quando si raggiunge il
-  valore \texttt{ipfrag\_high\_thresh}.
-
-\item[\texttt{ip\_always\_defrag}] se abilitato (prende un intero come valore
-  logico) tutti i pacchetti IP frammentati saranno riassemblati, anche in caso
-  in successivo immediato inoltro.\footnote{introdotto con il kernel 2.2.13,
-    nelle versioni precedenti questo comportamento poteva essere solo in fase
-    di compilazione del kernel con l'opzione
-    \texttt{CONFIG\_IP\_ALWAYS\_DEFRAG}.}
-
-\item[\texttt{ip\_nonlocal\_bind}] se abilitato (prende un intero come valore
-  logico) è possibile che una applicazione possa collegarsi (con \func{bind}
-  su un indirizzo non locale. Questo può risultare utile per applicazioni
-  particolari (come gli \textit{sniffer}) che hanno la necessità di ricevere
-  pacchetti anche non diretti agli indirizzi presenti sulla macchina, ad
-  esempio per intercettare il traffico per uno specifico indirizzo che si
-  vuole tenere sotto controllo.
+\item[\procrelfile{/proc/sys/net/ipv4}{ipfrag\_low\_thresh}] soglia bassa
+  (specificata in byte) cui viene riportata la coda dei pacchetti IP
+  frammentati quando si raggiunge il valore \texttt{ipfrag\_high\_thresh}.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{ip\_always\_defrag}] se abilitato
+  (prende un intero come valore logico) tutti i pacchetti IP frammentati
+  saranno riassemblati, anche in caso in successivo immediato
+  inoltro.\footnote{introdotto con il kernel 2.2.13, nelle versioni precedenti
+    questo comportamento poteva essere solo in fase di compilazione del kernel
+    con l'opzione \texttt{CONFIG\_IP\_ALWAYS\_DEFRAG}.}
+
+\item[\procrelfile{/proc/sys/net/ipv4}{ip\_nonlocal\_bind}] se abilitato
+  (prende un intero come valore logico) è possibile che una applicazione possa
+  collegarsi (con \func{bind} su un indirizzo non locale. Questo può risultare
+  utile per applicazioni particolari (come gli \textit{sniffer}) che hanno la
+  necessità di ricevere pacchetti anche non diretti agli indirizzi presenti
+  sulla macchina, ad esempio per intercettare il traffico per uno specifico
+  indirizzo che si vuole tenere sotto controllo.
 
 % \item[\texttt{neigh/*}] La directory contiene i valori 
 % TODO trattare neigh/* nella parte su arp, da capire dove sarà.
@@ -4137,30 +4146,31 @@ caratteristiche specifiche del protocollo TCP, elencati anche nella rispettiva
 pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
 \begin{basedescript}{\desclabelwidth{3.9cm}\desclabelstyle{\nextlinelabel}}
 
-\item[\texttt{tcp\_abort\_on\_overflow}] è un valore logico (disabilitato di
-  default) che indica di azzerare le connessioni quando il programma che le
-  riceve è troppo lento ed incapace di accettarle. Questo consente di
-  recuperare le connessioni se si è avuto un eccesso dovuto ad un qualche
-  picco di traffico, ma ovviamente va a discapito dei client che interrogano
-  il server. Pertanto è da abilitare soltanto quando si è sicuri che non è
-  possibile ottimizzare il server in modo che sia in grado di accettare
-  connessioni più rapidamente.
-
-\item[\texttt{tcp\_adv\_win\_scale}] questa variabile intera indica al kernel
-  quanto spazio all'interno del buffer associato ad un socket (quello
-  impostato con \texttt{tcp\_rmem}) deve essere utilizzato per la finestra del
-  protocollo TCP (quello che costituisce la \itindex{advertised~window}
-  \textit{advertised window} annunciata all'altro capo del socket) e quello
-  che viene usato come buffer applicativo per isolare la rete dalle latenze
-  dell'applicazione. Il valore viene calcolato secondo la formula
-  $\texttt{buffer}/2^\texttt{tcp\_adv\_win\_scale}$ se positivo o con 
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_abort\_on\_overflow}] è un valore
+  logico (disabilitato di default) che indica di azzerare le connessioni
+  quando il programma che le riceve è troppo lento ed incapace di accettarle.
+  Questo consente di recuperare le connessioni se si è avuto un eccesso dovuto
+  ad un qualche picco di traffico, ma ovviamente va a discapito dei client che
+  interrogano il server. Pertanto è da abilitare soltanto quando si è sicuri
+  che non è possibile ottimizzare il server in modo che sia in grado di
+  accettare connessioni più rapidamente.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_adv\_win\_scale}] questa variabile
+  intera indica al kernel quanto spazio all'interno del buffer associato ad un
+  socket (quello impostato con \texttt{tcp\_rmem}) deve essere utilizzato per
+  la finestra del protocollo TCP (quello che costituisce la
+  \itindex{advertised~window} \textit{advertised window} annunciata all'altro
+  capo del socket) e quello che viene usato come buffer applicativo per
+  isolare la rete dalle latenze dell'applicazione. Il valore viene calcolato
+  secondo la formula $\texttt{buffer}/2^\texttt{tcp\_adv\_win\_scale}$ se
+  positivo o con
   $\texttt{buffer}-\texttt{buffer}/2^\texttt{tcp\_adv\_win\_scale}$ se
   negativo. Il valore di default è 2 che significa che al buffer
   dell'applicazione viene riservato un quarto del totale.
 
-\item[\texttt{tcp\_app\_win}] il valore indica quanti byte della finestra TCP
-  vengono riservati per la bufferizzazione, valore è il massimo fra la
-  \itindex{Maximum~Segment~Size} MSS e
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_app\_win}] il valore indica quanti
+  byte della finestra TCP vengono riservati per la bufferizzazione, valore è
+  il massimo fra la \itindex{Maximum~Segment~Size} MSS e
   $\texttt{window}/2^\texttt{tcp\_app\_win}$. Un valore nullo significa che
   non viene riservato nessuno spazio; il default è 31.
 
@@ -4170,70 +4180,73 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
 % \item[\texttt{tcp\_bic\_low\_window}] 
 % \item[\texttt{tcp\_bic\_fast\_convergence}] 
 
-\item[\texttt{tcp\_dsack}] Abilita il supporto definito
-  nell'\href{http://www.ietf.org/rfc/rfc2884.txt}{RFC~2884} per il
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_dsack}] Abilita il supporto
+  definito nell'\href{http://www.ietf.org/rfc/rfc2884.txt}{RFC~2884} per il
   \textit{Duplicate SACK}.\footnote{si indica con SACK (\textit{Selective
       Acknowledgement}) un'opzione TCP, definita
     nell'\href{http://www.ietf.org/rfc/rfc2018.txt}{RFC~2018}, usata per dare
     un \textit{acknowledgement} unico su blocchi di pacchetti non contigui.}
 
-\item[\texttt{tcp\_ecn}] Abilita il meccanismo della \textit{Explicit
-    Congestion Notification} (o ECN) definito
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_ecn}] Abilita il meccanismo della
+  \textit{Explicit Congestion Notification} (o ECN) definito
   nell'\href{http://www.ietf.org/rfc/rfc2884.txt}{RFC~2884}. Si tenga presente
   che se si abilita questa opzione si possono avere dei malfunzionamenti
   apparentemente casuali dipendenti dalla destinazione, dovuti al fatto che
   alcuni vecchi router non supportano il meccanismo ed alla sua attivazione
   scartano i relativi pacchetti.\\
 
-\item[\texttt{tcp\_fack}] è un valore logico che abilita il supporto per il
-  \textit{TCP Forward Acknowledgement}. Di default è abilitato.
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_fack}] è un valore logico che
+  abilita il supporto per il \textit{TCP Forward Acknowledgement}. Di default
+  è abilitato.
 % TODO documentare o descrivere che cos'è il TCP Forward Acknowledgement
 
-\item[\texttt{tcp\_fin\_timeout}] specifica il numero di secondi (il default è
-  60\footnote{nei kernel della serie 2.2.x era invece di 120 secondi.}) da
-  passare in stato \texttt{FIN\_WAIT2} nell'attesa delle ricezione del
-  pacchetto FIN conclusivo, passati quali il socket viene comunque chiuso
-  forzatamente.  L'uso di questa opzione realizza quella che in sostanza è una
-  violazione delle specifiche del protocollo TCP, ma è utile per fronteggiare
-  alcuni attacchi di \itindex{Denial~of~Service~(DoS)} \textit{Denial of
-    Service}.
-
-\item[\texttt{tcp\_frto}] è un valore logico che abilita il supporto per
-  l'algoritmo F-RTO, un algoritmo usato per la ritrasmissione dei timeout del
-  protocollo TCP, che diventa molto utile per le reti wireless dove la perdita
-  di pacchetti è usualmente dovuta a delle interferenze radio, piuttosto che
-  alla congestione dei router. Di default è disabilitato.
-
-
-\item[\texttt{tcp\_keepalive\_intvl}] il numero di secondi che deve
-  trascorrere fra l'emissione di due successivi pacchetti di test quando è
-  abilitata la funzionalità del \textit{keepalive} (vedi
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_fin\_timeout}] specifica il numero
+  di secondi (il default è 60\footnote{nei kernel della serie 2.2.x era invece
+    di 120 secondi.}) da passare in stato \texttt{FIN\_WAIT2} nell'attesa
+  delle ricezione del pacchetto FIN conclusivo, passati quali il socket viene
+  comunque chiuso forzatamente.  L'uso di questa opzione realizza quella che
+  in sostanza è una violazione delle specifiche del protocollo TCP, ma è utile
+  per fronteggiare alcuni attacchi di \itindex{Denial~of~Service~(DoS)}
+  \textit{Denial of Service}.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_frto}] è un valore logico che
+  abilita il supporto per l'algoritmo F-RTO, un algoritmo usato per la
+  ritrasmissione dei timeout del protocollo TCP, che diventa molto utile per
+  le reti wireless dove la perdita di pacchetti è usualmente dovuta a delle
+  interferenze radio, piuttosto che alla congestione dei router. Di default è
+  disabilitato.
+
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_keepalive\_intvl}] il numero di
+  secondi che deve trascorrere fra l'emissione di due successivi pacchetti di
+  test quando è abilitata la funzionalità del \textit{keepalive} (vedi
   sez.~\ref{sec:sock_options_main}). Il valore di default è 75.
 
-\item[\texttt{tcp\_keepalive\_probes}] il massimo numero pacchetti di
-  \textit{keepalive} (vedi sez.~\ref{sec:sock_options_main}) che devono essere
-  inviati senza ricevere risposta prima che il kernel decida che la
-  connessione è caduta e la termini. Il valore di default è 9.
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_keepalive\_probes}] il massimo
+  numero pacchetti di \textit{keepalive} (vedi
+  sez.~\ref{sec:sock_options_main}) che devono essere inviati senza ricevere
+  risposta prima che il kernel decida che la connessione è caduta e la
+  termini. Il valore di default è 9.
 
-\item[\texttt{tcp\_keepalive\_time}] il numero di secondi che devono passare
-  senza traffico sulla connessione prima che il kernel, qualora si sia
-  utilizzata l'opzione \const{SO\_KEEPALIVE} (vedi
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_keepalive\_time}] il numero di
+  secondi che devono passare senza traffico sulla connessione prima che il
+  kernel, qualora si sia utilizzata l'opzione \const{SO\_KEEPALIVE} (vedi
   sez.~\ref{sec:sock_options_main}), inizi ad inviare pacchetti di pacchetti
   di \textit{keepalive}. Il default è 7200, pari a due ore.
 
-\item[\texttt{tcp\_low\_latency}] un valore logico che indica allo stack TCP
-  del kernel di ottimizzare il comportamento per ottenere tempi di latenza più
-  bassi a scapito di valori più alti per l'utilizzo della banda. Di default è
-  disabilitato in quanto un maggior utilizzo della banda è preferito, ma
-  esistono applicazioni particolari in cui la riduzione della latenza è più
-  importante (ad esempio i cluster di calcolo parallelo) in cui lo si può
-  abilitare. 
-
-\item[\texttt{tcp\_max\_orphans}] il numero massimo di socket TCP
-  ``\textsl{orfani}'' (vale a dire non associati a nessun file descriptor)
-  consentito nel sistema.\footnote{trattasi in genere delle connessioni
-    relative a socket chiusi che non hanno completato il processo di
-    chiusura.}  Quando il limite viene ecceduto la connessione orfana viene
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_low\_latency}] un valore logico
+  che indica allo stack TCP del kernel di ottimizzare il comportamento per
+  ottenere tempi di latenza più bassi a scapito di valori più alti per
+  l'utilizzo della banda. Di default è disabilitato in quanto un maggior
+  utilizzo della banda è preferito, ma esistono applicazioni particolari in
+  cui la riduzione della latenza è più importante (ad esempio i cluster di
+  calcolo parallelo) in cui lo si può abilitare.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_max\_orphans}] il numero massimo
+  di socket TCP ``\textsl{orfani}'' (vale a dire non associati a nessun file
+  descriptor) consentito nel sistema.\footnote{trattasi in genere delle
+    connessioni relative a socket chiusi che non hanno completato il processo
+    di chiusura.}  Quando il limite viene ecceduto la connessione orfana viene
   resettata e viene stampato un avvertimento. Questo limite viene usato per
   contrastare alcuni elementari attacchi di \textit{denial of service}.
   Diminuire il valore non è mai raccomandato, in certe condizioni di rete può
@@ -4243,11 +4256,11 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   \texttt{NR\_FILE}, e viene aggiustato a seconda della memoria disponibile.
 % TODO verificare la spiegazione di connessione orfana
 
-\item[\texttt{tcp\_max\_syn\_backlog}] un numero intero che indica la
-  lunghezza della coda delle connessioni incomplete, cioè delle connessioni
-  per le quali si è ricevuto un SYN di richiesta ma non l'ACK finale del
-  \itindex{three~way~handshake} \textit{three way handshake} (si riveda quanto
-  illustrato in sez.\ref{sec:TCP_func_listen}).
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_max\_syn\_backlog}] un numero
+  intero che indica la lunghezza della coda delle connessioni incomplete, cioè
+  delle connessioni per le quali si è ricevuto un SYN di richiesta ma non
+  l'ACK finale del \itindex{three~way~handshake} \textit{three way handshake}
+  (si riveda quanto illustrato in sez.~\ref{sec:TCP_func_listen}).
 
   Quando questo valore è superato il kernel scarterà immediatamente ogni
   ulteriore richiesta di connessione. Il valore di default (che è 256) viene
@@ -4260,19 +4273,20 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
     sia $\mathtt{tcp\_max\_syn\_backlog} \ge \mathtt{16*TCP\_SYNQ\_HSIZE}$,
     per poi ricompilare il kernel.}
 
-\item[\texttt{tcp\_max\_tw\_buckets}] questo valore indica il numero massimo
-  di socket in stato \texttt{TIME\_WAIT} consentito nel sistema; viene
-  impostato per prevenire semplici attacchi di \textit{denial of service} ed
-  inizializzato di default ad un valore del parametro \texttt{NR\_FILE}, per
-  poi essere aggiustato a seconda della memoria presente. Se il valore viene
-  superato il socket viene chiuso con la stampa di un avviso.
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_max\_tw\_buckets}] questo valore
+  indica il numero massimo di socket in stato \texttt{TIME\_WAIT} consentito
+  nel sistema; viene impostato per prevenire semplici attacchi di
+  \textit{denial of service} ed inizializzato di default ad un valore del
+  parametro \texttt{NR\_FILE}, per poi essere aggiustato a seconda della
+  memoria presente. Se il valore viene superato il socket viene chiuso con la
+  stampa di un avviso.
   
 
-\item[\texttt{tcp\_mem}] una tripletta di valori usati dallo stack TCP per
-  controllare il proprio uso della memoria. Il primo valore, chiamato
-  \textit{low} nelle pagine di manuale, indica il numero di pagine allocate
-  sotto il quale non viene usato nessun meccanismo di regolazione dell'uso
-  della memoria. 
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_mem}] una tripletta di valori
+  usati dallo stack TCP per controllare il proprio uso della memoria. Il primo
+  valore, chiamato \textit{low} nelle pagine di manuale, indica il numero di
+  pagine allocate sotto il quale non viene usato nessun meccanismo di
+  regolazione dell'uso della memoria.
 
   Il secondo valore, chiamato \textit{pressure} indica il numero di pagine
   allocate passato il quale lo stack TCP inizia a moderare il suo consumo di
@@ -4284,62 +4298,64 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   valore specificato dagli altri limiti del kernel.
 
 
-\item[\texttt{tcp\_orphan\_retries}] il numero massimo di volte che si esegue
-  un tentativo di controllo sull'altro capo di una connessione che è stata già
-  chiusa dalla nostra parte. Il valore di default è 8 volte.
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_orphan\_retries}] il numero
+  massimo di volte che si esegue un tentativo di controllo sull'altro capo di
+  una connessione che è stata già chiusa dalla nostra parte. Il valore di
+  default è 8 volte.
 
-\item[\texttt{tcp\_reordering}] il numero massimo di volte che un pacchetto
-  può essere riordinato nel flusso di dati, prima che lo stack TCP assuma che
-  è andato perso e si ponga nello stato di \textit{slow start} (si veda
-  sez.~\ref{sez:tcp_protocol_xxx}) viene usata questa metrica di
-  riconoscimento dei riordinamenti per evitare inutili ritrasmissioni
-  provocate dal riordinamento. Non è opportuno modificare questo valore dal
-  default che è 3.
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_reordering}] il numero massimo di
+  volte che un pacchetto può essere riordinato nel flusso di dati, prima che
+  lo stack TCP assuma che è andato perso e si ponga nello stato di
+  \textit{slow start} (si veda sez.~\ref{sez:tcp_protocol_xxx}) viene usata
+  questa metrica di riconoscimento dei riordinamenti per evitare inutili
+  ritrasmissioni provocate dal riordinamento. Non è opportuno modificare
+  questo valore dal default che è 3.
 
-\item[\texttt{tcp\_retrans\_collapse}] 
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_retrans\_collapse}]
 
-\item[\texttt{tcp\_retries1}] imposta il massimo numero di volte che
-  protocollo tenterà la ritrasmissione si un pacchetto su una connessione
-  stabilita prima di fare ricorso ad ulteriori sforzi che coinvolgano anche il
-  livello di rete. Passato questo numero di ritrasmissioni verrà fatto
-  eseguire al livello di rete un tentativo di aggiornamento della rotta verso
-  la destinazione prima di eseguire ogni successiva ritrasmissione.
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_retries1}] imposta il massimo
+  numero di volte che protocollo tenterà la ritrasmissione si un pacchetto su
+  una connessione stabilita prima di fare ricorso ad ulteriori sforzi che
+  coinvolgano anche il livello di rete. Passato questo numero di
+  ritrasmissioni verrà fatto eseguire al livello di rete un tentativo di
+  aggiornamento della rotta verso la destinazione prima di eseguire ogni
+  successiva ritrasmissione.
 
-\item[\texttt{tcp\_retries2}] imposta il numero di tentativi di ritrasmissione
-  di un pacchetto inviato su una connessione già stabilita per il quale non si
-  sia ricevuto una risposta di ACK (si veda anche quanto illustrato in
-  sez.~\ref{sec:TCP_server_crash}). Il valore default è 15, che significa un
-  tempo variabile fra 13 e 30 minuti; questo non corrisponde a quanto
-  richiesto nell'\href{http://www.ietf.org/rfc/rfc1122.txt}{RFC~1122} dove è
-  indicato un massimo di 100 secondi, che però è un valore considerato troppo
-  basso.
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_retries2}] imposta il numero di
+  tentativi di ritrasmissione di un pacchetto inviato su una connessione già
+  stabilita per il quale non si sia ricevuto una risposta di ACK (si veda
+  anche quanto illustrato in sez.~\ref{sec:TCP_server_crash}). Il valore
+  default è 15, che significa un tempo variabile fra 13 e 30 minuti; questo
+  non corrisponde a quanto richiesto
+  nell'\href{http://www.ietf.org/rfc/rfc1122.txt}{RFC~1122} dove è indicato un
+  massimo di 100 secondi, che però è un valore considerato troppo basso.
 
 
-\item[\texttt{tcp\_rfc1337}] 
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_rfc1337}] 
 
-\item[\texttt{tcp\_rmem}] 
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_rmem}] 
 
 
-\item[\texttt{tcp\_sack}] 
-\item[\texttt{tcp\_stdurg}] 
-\item[\texttt{tcp\_synack\_retries}] 
-\item[\texttt{tcp\_syncookies}] 
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_sack}] 
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_stdurg}] 
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_synack\_retries}] 
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_syncookies}] 
 
-\item[\texttt{tcp\_syn\_retries}] imposta il numero di tentativi (il default è
-  5) di ritrasmissione dei pacchetti SYN di inizio connessione del
-  \itindex{three~way~handshake} \textit{three way handshake} (si ricordi
-  quanto illustrato in sez.\ref{sec:TCP_func_connect}). Il valore non deve
-  superare 255. 
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_syn\_retries}] imposta il numero
+  di tentativi (il default è 5) di ritrasmissione dei pacchetti SYN di inizio
+  connessione del \itindex{three~way~handshake} \textit{three way handshake}
+  (si ricordi quanto illustrato in sez.~\ref{sec:TCP_func_connect}). Il valore
+  non deve superare 255.
 
-\item[\texttt{tcp\_timestamps}] 
-\item[\texttt{tcp\_tw\_recycle}] 
-\item[\texttt{tcp\_tw\_reuse}] 
-\item[\texttt{tcp\_window\_scaling}] 
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_timestamps}] 
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_tw\_recycle}] 
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_tw\_reuse}] 
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_window\_scaling}] 
 
 
-\item[\texttt{tcp\_vegas\_cong\_avoid}] 
-\item[\texttt{tcp\_westwood}] 
-\item[\texttt{tcp\_wmem}] 
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_vegas\_cong\_avoid}] 
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_westwood}] 
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_wmem}] 
 \end{basedescript}
 
 % LocalWords:  socket sez dotted decimal resolver Domain Name Service cap DNS
index ab28481..9ca3767 100644 (file)
@@ -727,9 +727,10 @@ loro dati sono generati al volo ad ogni lettura, e passati al kernel ad ogni
 scrittura. 
 
 Il tipo di filesystem è specificato da \param{filesystemtype}, che deve essere
-una delle stringhe riportate nel file \file{/proc/filesystems}, che contiene
-l'elenco dei filesystem supportati dal kernel; nel caso si sia indicato uno
-dei filesystem virtuali, il contenuto di \param{source} viene ignorato.
+una delle stringhe riportate nel file \procfile{/proc/filesystems}, che
+contiene l'elenco dei filesystem supportati dal kernel; nel caso si sia
+indicato uno dei filesystem virtuali, il contenuto di \param{source} viene
+ignorato.
 
 Dopo l'esecuzione della funzione il contenuto del filesystem viene resto
 disponibile nella directory specificata come \textit{mount point}, il
@@ -901,15 +902,15 @@ genere 
 
 
 Le \acr{glibc} provvedono infine una serie di funzioni per la gestione dei due
-file \file{/etc/fstab} ed \file{/etc/mtab}, che convenzionalmente sono usati
-in quasi tutti i sistemi unix-like per mantenere rispettivamente le
+file \conffile{/etc/fstab} ed \conffile{/etc/mtab}, che convenzionalmente sono
+usati in quasi tutti i sistemi unix-like per mantenere rispettivamente le
 informazioni riguardo ai filesystem da montare e a quelli correntemente
 montati. Le funzioni servono a leggere il contenuto di questi file in
 opportune strutture \struct{fstab} e \struct{mntent}, e, per \file{/etc/mtab}
 per inserire e rimuovere le voci presenti nel file.
 
 In generale si dovrebbero usare queste funzioni (in particolare quelle
-relative a \file{/etc/mtab}), quando si debba scrivere un programma che
+relative a \conffile{/etc/mtab}), quando si debba scrivere un programma che
 effettua il montaggio di un filesystem; in realtà in questi casi è molto più
 semplice invocare direttamente il programma \cmd{mount}, per cui ne
 tralasceremo la trattazione, rimandando al manuale delle \acr{glibc}
@@ -924,18 +925,19 @@ tralasceremo la trattazione, rimandando al manuale delle \acr{glibc}
 
 Tradizionalmente le informazioni utilizzate nella gestione di utenti e gruppi
 (password, corrispondenze fra nomi simbolici e user-id, home directory, ecc.)
-venivano registrate all'interno dei due file di testo \file{/etc/passwd} ed
-\file{/etc/group},\footnote{in realtà oltre a questi nelle distribuzioni più
-  recenti è stato introdotto il sistema delle \textit{shadow password} che
-  prevede anche i due file \file{/etc/shadow} e \file{/etc/gshadow}, in cui
-  sono state spostate le informazioni di autenticazione (ed inserite alcune
-  estensioni) per toglierle dagli altri file che devono poter essere letti per
-  poter effettuare l'associazione fra username e \acr{uid}.} il cui formato è
-descritto dalle relative pagine del manuale\footnote{nella quinta sezione,
-  quella dei file di configurazione, occorre cioè usare \cmd{man 5 passwd}
-  dato che altrimenti si avrebbe la pagina di manuale del comando
-  \cmd{passwd}.} e tutte le funzioni che richiedevano l'accesso a queste
-informazione andavano a leggere direttamente il contenuto di questi file.
+venivano registrate all'interno dei due file di testo \conffile{/etc/passwd}
+ed \conffile{/etc/group},\footnote{in realtà oltre a questi nelle
+  distribuzioni più recenti è stato introdotto il sistema delle \textit{shadow
+    password} che prevede anche i due file \conffile{/etc/shadow} e
+  \conffile{/etc/gshadow}, in cui sono state spostate le informazioni di
+  autenticazione (ed inserite alcune estensioni) per toglierle dagli altri
+  file che devono poter essere letti per poter effettuare l'associazione fra
+  username e \acr{uid}.} il cui formato è descritto dalle relative pagine del
+manuale\footnote{nella quinta sezione, quella dei file di configurazione,
+  occorre cioè usare \cmd{man 5 passwd} dato che altrimenti si avrebbe la
+  pagina di manuale del comando \cmd{passwd}.} e tutte le funzioni che
+richiedevano l'accesso a queste informazione andavano a leggere direttamente
+il contenuto di questi file.
 
 Col tempo però questa impostazione ha incominciato a mostrare dei limiti: da
 una parte il meccanismo classico di autenticazione è stato ampliato, ed oggi
@@ -1087,16 +1089,16 @@ fig.~\ref{fig:sys_group_struct}.
 \end{figure}
 
 Le funzioni viste finora sono in grado di leggere le informazioni sia
-direttamente dal file delle password in \file{/etc/passwd} che tramite il
-sistema del \itindex{Name~Service~Switch} \textit{Name Service Switch} e
-sono completamente generiche. Si noti però che non c'è una funzione che
-permetta di impostare direttamente una password.\footnote{in realtà questo può
-  essere fatto ricorrendo a PAM, ma questo è un altro discorso.} Dato che
-POSIX non prevede questa possibilità esiste un'altra interfaccia che lo fa,
-derivata da SVID le cui funzioni sono riportate in
-tab.~\ref{tab:sys_passwd_func}. Questa però funziona soltanto quando le
-informazioni sono mantenute su un apposito file di \textsl{registro} di utenti
-e gruppi, con il formato classico di \file{/etc/passwd} e \file{/etc/group}.
+direttamente dal file delle password in \conffile{/etc/passwd} che tramite il
+sistema del \itindex{Name~Service~Switch} \textit{Name Service Switch} e sono
+completamente generiche. Si noti però che non c'è una funzione che permetta di
+impostare direttamente una password.\footnote{in realtà questo può essere
+  fatto ricorrendo a PAM, ma questo è un altro discorso.} Dato che POSIX non
+prevede questa possibilità esiste un'altra interfaccia che lo fa, derivata da
+SVID le cui funzioni sono riportate in tab.~\ref{tab:sys_passwd_func}. Questa
+però funziona soltanto quando le informazioni sono mantenute su un apposito
+file di \textsl{registro} di utenti e gruppi, con il formato classico di
+\conffile{/etc/passwd} e \conffile{/etc/group}.
 
 \begin{table}[htb]
   \footnotesize
@@ -1111,29 +1113,29 @@ e gruppi, con il formato classico di \file{/etc/passwd} e \file{/etc/group}.
     \func{fgetpwent\_r}& Come la precedente, ma rientrante.\\
     \func{putpwent}    & Immette una voce in un file di registro degli
                          utenti.\\ 
-    \func{getpwent}    & Legge una voce da \file{/etc/passwd}.\\
+    \func{getpwent}    & Legge una voce da \conffile{/etc/passwd}.\\
     \func{getpwent\_r} & Come la precedente, ma rientrante.\\
-    \func{setpwent}    & Ritorna all'inizio di \file{/etc/passwd}.\\
-    \func{endpwent}    & Chiude \file{/etc/passwd}.\\
+    \func{setpwent}    & Ritorna all'inizio di \conffile{/etc/passwd}.\\
+    \func{endpwent}    & Chiude \conffile{/etc/passwd}.\\
     \func{fgetgrent}   & Legge una voce dal file di registro dei gruppi 
                          specificato.\\
     \func{fgetgrent\_r}& Come la precedente, ma rientrante.\\
     \func{putgrent}    & Immette una voce in un file di registro dei gruppi.\\
-    \func{getgrent}    & Legge una voce da \file{/etc/group}.\\ 
+    \func{getgrent}    & Legge una voce da \conffile{/etc/group}.\\ 
     \func{getgrent\_r} & Come la precedente, ma rientrante.\\
-    \func{setgrent}    & Ritorna all'inizio di \file{/etc/group}.\\
-    \func{endgrent}    & Chiude \file{/etc/group}.\\
+    \func{setgrent}    & Ritorna all'inizio di \conffile{/etc/group}.\\
+    \func{endgrent}    & Chiude \conffile{/etc/group}.\\
     \hline
   \end{tabular}
   \caption{Funzioni per la manipolazione dei campi di un file usato come
-    registro per utenti o gruppi nel formato di \file{/etc/passwd} e
-    \file{/etc/groups}.} 
+    registro per utenti o gruppi nel formato di \conffile{/etc/passwd} e
+    \conffile{/etc/group}.} 
   \label{tab:sys_passwd_func}
 \end{table}
 
 Dato che oramai la gran parte delle distribuzioni di GNU/Linux utilizzano
 almeno le \textit{shadow password} (quindi con delle modifiche rispetto al
-formato classico del file \file{/etc/passwd}), si tenga presente che le
+formato classico del file \conffile{/etc/passwd}), si tenga presente che le
 funzioni di questa interfaccia che permettono di scrivere delle voci in un
 \textsl{registro} degli utenti (cioè \func{putpwent} e \func{putgrent}) non
 hanno la capacità di farlo specificando tutti i contenuti necessari rispetto a
@@ -1771,9 +1773,9 @@ vengono salvate in formato binario, e corrispondono al contenuto della
 apposita struttura dati definita all'interno del kernel.
 
 Il funzionamento di \func{acct} viene inoltre modificato da uno specifico
-parametro di sistema, modificabile attraverso \file{/proc/sys/kernel/acct} (o
-tramite la corrispondente \func{sysctl}). Esso contiene tre valori interi, il
-primo indica la percentuale di spazio disco libero sopra il quale viene
+parametro di sistema, modificabile attraverso \procfile{/proc/sys/kernel/acct}
+(o tramite la corrispondente \func{sysctl}). Esso contiene tre valori interi,
+il primo indica la percentuale di spazio disco libero sopra il quale viene
 ripresa una registrazione che era stata sospesa per essere scesi sotto il
 minimo indicato dal secondo valore (sempre in percentuale di spazio disco
 libero). Infine l'ultimo valore indica la frequenza in secondi con cui deve
@@ -1832,8 +1834,8 @@ demoni che compiono lavori amministrativi ad ore definite, come \cmd{cron}.
 
 Di solito questo tempo viene convertito automaticamente dal valore in UTC al
 tempo locale, utilizzando le opportune informazioni di localizzazione
-(specificate in \file{/etc/timezone}). E da tenere presente che questo tempo è
-mantenuto dal sistema e non è detto che corrisponda al tempo tenuto
+(specificate in \conffile{/etc/timezone}). E da tenere presente che questo
+tempo è mantenuto dal sistema e non è detto che corrisponda al tempo tenuto
 dall'orologio hardware del calcolatore.
 
 Anche il \itindex{process~time} \textit{process time} di solito si esprime in
@@ -2303,7 +2305,7 @@ funzione \funcd{tzset}, il cui prototipo 
 
 La funzione inizializza le variabili di fig.~\ref{fig:sys_tzname} a partire dal
 valore della variabile di ambiente \const{TZ}, se quest'ultima non è definita
-verrà usato il file \file{/etc/localtime}.
+verrà usato il file \conffile{/etc/localtime}.
 
 \begin{figure}[!htb]
   \footnotesize
index a2c674a..485f36f 100644 (file)
@@ -480,10 +480,10 @@ l'elenco delle porte assegnate dalla IANA (la \textit{Internet Assigned Number
   Authority}) ma l'elenco viene costantemente aggiornato e pubblicato su
 internet (una versione aggiornata si può trovare all'indirizzo
 \href{http://www.iana.org/assignments/port-numbers}
-{\texttt{http://www.iana.org/assignments/port-numbers}}); inoltre
-in un sistema unix-like un analogo elenco viene mantenuto nel file
-\file{/etc/services}, con la corrispondenza fra i vari numeri di porta ed il
-nome simbolico del servizio.  I numeri sono divisi in tre intervalli:
+{\texttt{http://www.iana.org/assignments/port-numbers}}); inoltre in un
+sistema unix-like un analogo elenco viene mantenuto nel file
+\conffile{/etc/services}, con la corrispondenza fra i vari numeri di porta ed
+il nome simbolico del servizio.  I numeri sono divisi in tre intervalli:
 
 \begin{enumerate*}
 \item \textsl{le porte note}. I numeri da 0 a 1023. Queste sono controllate e
@@ -709,7 +709,7 @@ per il server\footnote{un'eccezione a tutto ci
   demone che deve essere contattato dai client per ottenere la porta effimera
   su cui si trova il server.} che in genere viene identificato dalla porta su
 cui risponde (l'elenco di queste porte, e dei relativi servizi, è in
-\file{/etc/services}).
+\conffile{/etc/services}).
 
 Con \func{bind} si può assegnare un indirizzo IP specifico ad un socket,
 purché questo appartenga ad una interfaccia della macchina.  Per un client TCP
@@ -842,7 +842,7 @@ nella chiamata della funzione sono le seguenti:
   secondi per un numero di volte che può essere stabilito dall'utente. Questo
   può essere fatto a livello globale con una opportuna
   \func{sysctl},\footnote{o più semplicemente scrivendo il valore voluto in
-    \file{/proc/sys/net/ipv4/tcp\_syn\_retries}, vedi
+    \procfile{/proc/sys/net/ipv4/tcp\_syn\_retries}, vedi
     sez.~\ref{sec:sock_ipv4_sysctl}.} e a livello di singolo socket con
   l'opzione \const{TCP\_SYNCNT} (vedi sez.~\ref{sec:sock_tcp_udp_options}). Il
   valore predefinito per la ripetizione dell'invio è di 5 volte, che comporta
@@ -977,12 +977,12 @@ indicare la lunghezza della coda delle connessioni complete. La lunghezza
 della coda delle connessioni incomplete può essere ancora controllata usando
 la funzione \func{sysctl} con il parametro \const{NET\_TCP\_MAX\_SYN\_BACKLOG}
 o scrivendola direttamente in
-\file{/proc/sys/net/ipv4/tcp\_max\_syn\_backlog}.  Quando si attiva la
+\procfile{/proc/sys/net/ipv4/tcp\_max\_syn\_backlog}.  Quando si attiva la
 protezione dei syncookies però (con l'opzione da compilare nel kernel e da
-attivare usando \file{/proc/sys/net/ipv4/tcp\_syncookies}) questo valore viene
-ignorato e non esiste più un valore massimo.  In ogni caso in Linux il valore
-di \param{backlog} viene troncato ad un massimo di \const{SOMAXCONN} se è
-superiore a detta costante (che di default vale 128).\footnote{il valore di
+attivare usando \procfile{/proc/sys/net/ipv4/tcp\_syncookies}) questo valore
+viene ignorato e non esiste più un valore massimo.  In ogni caso in Linux il
+valore di \param{backlog} viene troncato ad un massimo di \const{SOMAXCONN} se
+è superiore a detta costante (che di default vale 128).\footnote{il valore di
   questa costante può essere controllato con un altro parametro di
   \func{sysctl}, vedi sez.~\ref{sec:sock_ioctl_IP}.}
 
@@ -2622,7 +2622,8 @@ successivo, per tentare di ristabilire la connessione.
 Il risultato finale qui dipende dall'implementazione dello stack TCP, e nel
 caso di Linux anche dall'impostazione di alcuni dei parametri di sistema che
 si trovano in \file{/proc/sys/net/ipv4}, che ne controllano il comportamento:
-in questo caso in particolare da \file{tcp\_retries2} (vedi
+in questo caso in particolare da
+\procrelfile{/proc/sys/net/ipv4}{tcp\_retries2} (vedi
 sez.~\ref{sec:sock_ipv4_sysctl}). Questo parametro infatti specifica il numero
 di volte che deve essere ritentata la ritrasmissione di un pacchetto nel mezzo
 di una connessione prima di riportare un errore di timeout.  Il valore