Aggiornamento date copyright più TODO 5.3
[gapil.git] / sockctrl.tex
index d8667d2da8c13b3776b3f41ae3ae35ed47f0f442..9d5279e6ab62856b34ff617697608b440c23c03e 100644 (file)
@@ -1,6 +1,6 @@
 %% sockctrl.tex
 %%
 %% sockctrl.tex
 %%
-%% Copyright (C) 2004-2018 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2004-2019 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Prefazione",
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Prefazione",
@@ -36,8 +36,8 @@ porte o altre proprietà del sistema.
 \label{sec:sock_resolver}
 
 \itindbeg{resolver} La risoluzione dei nomi è associata tradizionalmente al
 \label{sec:sock_resolver}
 
 \itindbeg{resolver} La risoluzione dei nomi è associata tradizionalmente al
-servizio del \itindex{Domain~Name~Service} \textit{Domain Name Service} che
-permette di identificare le macchine su internet invece che per numero IP
+servizio del \itindex{Domain~Name~Service~(DNS)} \textit{Domain Name Service}
+che permette di identificare le macchine su internet invece che per numero IP
 attraverso il relativo \textsl{nome a dominio}.\footnote{non staremo ad
   entrare nei dettagli della definizione di cosa è un nome a dominio, dandolo
   per noto, una introduzione alla problematica si trova in \cite{AGL} (cap.~9)
 attraverso il relativo \textsl{nome a dominio}.\footnote{non staremo ad
   entrare nei dettagli della definizione di cosa è un nome a dominio, dandolo
   per noto, una introduzione alla problematica si trova in \cite{AGL} (cap.~9)
@@ -87,7 +87,7 @@ dominio, e prevedeva solo l'utilizzo del DNS e del file statico
 
 Per questo aspetto il file di configurazione principale del sistema è
 \conffile{/etc/resolv.conf} che contiene in sostanza l'elenco degli indirizzi
 
 Per questo aspetto il file di configurazione principale del sistema è
 \conffile{/etc/resolv.conf} che contiene in sostanza l'elenco degli indirizzi
-IP dei server DNS da contattare; a questo si affiancava (fino alle \acr{glibc}
+IP dei server DNS da contattare; a questo si affiancava (fino alla \acr{glibc}
 2.4) il file \conffile{/etc/host.conf} il cui scopo principale era indicare
 l'ordine in cui eseguire la risoluzione dei nomi (se usare prima i valori di
 \conffile{/etc/hosts} o quelli del DNS). Tralasciamo i dettagli relativi alle
 2.4) il file \conffile{/etc/host.conf} il cui scopo principale era indicare
 l'ordine in cui eseguire la risoluzione dei nomi (se usare prima i valori di
 \conffile{/etc/hosts} o quelli del DNS). Tralasciamo i dettagli relativi alle
@@ -125,9 +125,9 @@ generico per la risoluzione di corrispondenze fra nomi ed informazioni ad essi
 associate chiamato \textit{Name Service Switch}, cui abbiamo accennato anche in
 sez.~\ref{sec:sys_user_group} per quanto riguarda la gestione dei dati
 associati a utenti e gruppi. Il sistema è stato introdotto la prima volta
 associate chiamato \textit{Name Service Switch}, cui abbiamo accennato anche in
 sez.~\ref{sec:sys_user_group} per quanto riguarda la gestione dei dati
 associati a utenti e gruppi. Il sistema è stato introdotto la prima volta
-nelle librerie standard di Solaris e le \acr{glibc} hanno ripreso lo stesso
+nella libreria standard di Solaris e la \acr{glibc} ha ripreso lo stesso
 schema; si tenga presente che questo sistema non esiste per altre librerie
 schema; si tenga presente che questo sistema non esiste per altre librerie
-standard come le \acr{libc5} o le \acr{uclib}.
+standard come la \acr{libc5} o la \acr{uClib}.
 
 Il \textit{Name Service Switch} (cui spesso si fa riferimento con l'acronimo
 NSS) è un sistema di librerie dinamiche che permette di definire in maniera
 
 Il \textit{Name Service Switch} (cui spesso si fa riferimento con l'acronimo
 NSS) è un sistema di librerie dinamiche che permette di definire in maniera
@@ -198,7 +198,7 @@ su cui vengono mantenuti, e che si usino o meno funzionalità aggiuntive
 fornite dal sistema del \textit{Name Service Switch}, dal punto di vista di un
 programma che deve effettuare la risoluzione di un nome a dominio, tutto
 quello che conta sono le funzioni classiche che il \textit{resolver} mette a
 fornite dal sistema del \textit{Name Service Switch}, dal punto di vista di un
 programma che deve effettuare la risoluzione di un nome a dominio, tutto
 quello che conta sono le funzioni classiche che il \textit{resolver} mette a
-disposizione (è cura delle \acr{glibc} tenere conto della presenza del
+disposizione (è cura della \acr{glibc} tenere conto della presenza del
 \textit{Name Service Switch}) e sono queste quelle che tratteremo nelle
 sezioni successive.  
 
 \textit{Name Service Switch}) e sono queste quelle che tratteremo nelle
 sezioni successive.  
 
@@ -749,7 +749,7 @@ vogliono ottenere degli indirizzi IPv6 occorrerà prima impostare l'opzione
 \const{RES\_USE\_INET6} nel campo \texttt{\_res.options} e poi chiamare
 \func{res\_init} (vedi sez.~\ref{sec:sock_resolver_functions}) per modificare
 le opzioni del \textit{resolver}; dato che questo non è molto comodo è stata
 \const{RES\_USE\_INET6} nel campo \texttt{\_res.options} e poi chiamare
 \func{res\_init} (vedi sez.~\ref{sec:sock_resolver_functions}) per modificare
 le opzioni del \textit{resolver}; dato che questo non è molto comodo è stata
-definita (è una estensione fornita dalle \acr{glibc}, disponibile anche in
+definita (è una estensione fornita dalla \acr{glibc}, disponibile anche in
 altri sistemi unix-like) un'altra funzione, \funcd{gethostbyname2}, il cui
 prototipo è:
 
 altri sistemi unix-like) un'altra funzione, \funcd{gethostbyname2}, il cui
 prototipo è:
 
@@ -822,7 +822,7 @@ come, essendo il campo \var{h\_addr\_list} un puntatore ad strutture di
 indirizzi generiche, questo sia ancora di tipo \texttt{char **} e si possa
 riutilizzare lo stesso puntatore usato per i nomi.
 
 indirizzi generiche, questo sia ancora di tipo \texttt{char **} e si possa
 riutilizzare lo stesso puntatore usato per i nomi.
 
-Per ciascun indirizzo valido si provvederà (\texttt{\small 41}) ad una
+Per ciascun indirizzo valido si provvederà (\texttt{\small 41}) a una
 conversione con la funzione \func{inet\_ntop} (vedi
 sez.~\ref{sec:sock_addr_func}) passandole gli opportuni argomenti, questa
 restituirà la stringa da stampare (\texttt{\small 42}) con il valore
 conversione con la funzione \func{inet\_ntop} (vedi
 sez.~\ref{sec:sock_addr_func}) passandole gli opportuni argomenti, questa
 restituirà la stringa da stampare (\texttt{\small 42}) con il valore
@@ -853,7 +853,7 @@ chiama una \itindex{deep~copy} \textit{deep copy}.\footnote{si chiama così
   contenuti in essa (e così via se vi sono altre sotto-strutture con altri
   puntatori) e copiare anche i dati da questi referenziati.}
 
   contenuti in essa (e così via se vi sono altre sotto-strutture con altri
   puntatori) e copiare anche i dati da questi referenziati.}
 
-Per ovviare a questi problemi nelle \acr{glibc} sono definite anche delle
+Per ovviare a questi problemi nella \acr{glibc} sono definite anche delle
 versioni rientranti delle precedenti funzioni, al solito queste sono
 caratterizzate dall'avere un suffisso \texttt{\_r}, pertanto avremo le due
 funzioni \funcd{gethostbyname\_r} e \funcd{gethostbyname2\_r} i cui prototipi
 versioni rientranti delle precedenti funzioni, al solito queste sono
 caratterizzate dall'avere un suffisso \texttt{\_r}, pertanto avremo le due
 funzioni \funcd{gethostbyname\_r} e \funcd{gethostbyname2\_r} i cui prototipi
@@ -976,7 +976,7 @@ dominio, la funzione comunque inizializza anche il primo campo della lista
 
 Dato che \func{gethostbyaddr} usa un buffer statico, anche di questa funzione
 esiste una versione rientrante \funcd{gethostbyaddr\_r} fornita come
 
 Dato che \func{gethostbyaddr} usa un buffer statico, anche di questa funzione
 esiste una versione rientrante \funcd{gethostbyaddr\_r} fornita come
-estensione dalle \acr{glibc}, il cui prototipo è:
+estensione dalla \acr{glibc}, il cui prototipo è:
 
 \begin{funcproto}{
 \fhead{netdb.h}
 
 \begin{funcproto}{
 \fhead{netdb.h}
@@ -1017,7 +1017,7 @@ del DNS. Nel caso della \acr{glibc} questa viene usata allora solo per la
 lettura delle voci presenti in quest'ultimo, come avviene anche in altri
 sistemi unix-like, ed inoltre ignora le voci relative ad indirizzi IPv6.
 
 lettura delle voci presenti in quest'ultimo, come avviene anche in altri
 sistemi unix-like, ed inoltre ignora le voci relative ad indirizzi IPv6.
 
-Della stessa funzione le \acr{glibc} forniscono anche una versione rientrante
+Della stessa funzione la \acr{glibc} fornisce anche una versione rientrante
 \funcd{gethostent\_r}, il cui prototipo è:
 
 \begin{funcproto}{
 \funcd{gethostent\_r}, il cui prototipo è:
 
 \begin{funcproto}{
@@ -1041,8 +1041,8 @@ tipo di indirizzi voluto (cosa che non è possibile con \func{gethostbyname}),
 è stata successivamente proposta,
 nell'\href{http://www.ietf.org/rfc/rfc2553.txt}{RFC~2553} un diversa
 interfaccia con l'introduzione due nuove funzioni di
 è stata successivamente proposta,
 nell'\href{http://www.ietf.org/rfc/rfc2553.txt}{RFC~2553} un diversa
 interfaccia con l'introduzione due nuove funzioni di
-risoluzione,\footnote{dette funzioni sono presenti nelle \acr{glibc} versione
-  2.1.96, ma essendo considerate deprecate (vedi
+risoluzione,\footnote{dette funzioni sono presenti nella \acr{glibc} 2.1.96,
+  ma essendo considerate deprecate (vedi
   sez.~\ref{sec:sock_advanced_name_services}) sono state rimosse nelle
   versioni successive.} \funcd{getipnodebyname} e \funcd{getipnodebyaddr}, i
 cui prototipi sono:
   sez.~\ref{sec:sock_advanced_name_services}) sono state rimosse nelle
   versioni successive.} \funcd{getipnodebyname} e \funcd{getipnodebyaddr}, i
 cui prototipi sono:
@@ -1529,7 +1529,7 @@ tab.~\ref{tab:ai_flags_values}, ciascuna delle quali identifica un bit della
 maschera. 
 
 Nella seconda parte della tabella si sono riportati i valori delle costanti
 maschera. 
 
 Nella seconda parte della tabella si sono riportati i valori delle costanti
-aggiunte a partire dalle \acr{glibc} 2.3.4 per gestire la
+aggiunte a partire dalla \acr{glibc} 2.3.4 per gestire la
 internazionalizazione dei nomi a dominio (IDN o \textit{Internationalized
   Domain Names}) secondo quanto specificato
 nell'\href{http://www.ietf.org/rfc/rfc3490.txt}{RFC~3490} (potendo cioè usare
 internazionalizazione dei nomi a dominio (IDN o \textit{Internationalized
   Domain Names}) secondo quanto specificato
 nell'\href{http://www.ietf.org/rfc/rfc3490.txt}{RFC~3490} (potendo cioè usare
@@ -1794,7 +1794,7 @@ argomento \param{flags} è una maschera binaria i cui bit consentono di
 impostare le modalità con cui viene eseguita la ricerca, e deve essere
 specificato attraverso l'OR aritmetico dei valori illustrati in
 tab.~\ref{tab:getnameinfo_flags}, nella seconda parte della tabella si sono
 impostare le modalità con cui viene eseguita la ricerca, e deve essere
 specificato attraverso l'OR aritmetico dei valori illustrati in
 tab.~\ref{tab:getnameinfo_flags}, nella seconda parte della tabella si sono
-aggiunti i valori introdotto con le \acr{glibc} 2.3.4 per gestire la
+aggiunti i valori introdotto con la \acr{glibc} 2.3.4 per gestire la
 internazionalizzione dei nomi a dominio.
 
 \begin{table}[!htb]
 internazionalizzione dei nomi a dominio.
 
 \begin{table}[!htb]
@@ -2130,7 +2130,7 @@ socket, mentre l'ultimo argomento \param{optlen},\footnote{questo argomento è
   in realtà sempre di tipo \ctyp{int}, come era nelle \acr{libc4} e
   \acr{libc5}; l'uso di \type{socklen\_t} è stato introdotto da POSIX (valgono
   le stesse considerazioni per l'uso di questo tipo di dato fatte in
   in realtà sempre di tipo \ctyp{int}, come era nelle \acr{libc4} e
   \acr{libc5}; l'uso di \type{socklen\_t} è stato introdotto da POSIX (valgono
   le stesse considerazioni per l'uso di questo tipo di dato fatte in
-  sez.~\ref{sec:TCP_func_accept}) ed adottato dalle \acr{glibc}.} è la
+  sez.~\ref{sec:TCP_func_accept}) ed adottato dalla \acr{glibc}.} è la
 dimensione in byte dei dati presenti all'indirizzo indicato da \param{optval}.
 Dato che il tipo di dati varia a seconda dell'opzione scelta, occorrerà
 individuare qual è quello che deve essere usato, ed utilizzare le opportune
 dimensione in byte dei dati presenti all'indirizzo indicato da \param{optval}.
 Dato che il tipo di dati varia a seconda dell'opzione scelta, occorrerà
 individuare qual è quello che deve essere usato, ed utilizzare le opportune
@@ -2318,7 +2318,7 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   \func{setsockopt} ed utilizza per \param{optval} un puntatore ad una
   struttura \struct{sock\_fprog} (definita in
   \headfile{linux/filter.h}). Questa opzione viene usata principalmente con i
   \func{setsockopt} ed utilizza per \param{optval} un puntatore ad una
   struttura \struct{sock\_fprog} (definita in
   \headfile{linux/filter.h}). Questa opzione viene usata principalmente con i
-  socket di tipo \const{PF\_PACKET} (torneremo su questo in
+  socket di tipo \const{AF\_PACKET} (torneremo su questo in
   sez.~\ref{sec:packet_socket}) dalla libreria \texttt{libpcap} per
   implementare programmi di cattura dei pacchetti, e per questo tipo di
   applicazione è opportuno usare sempre quest'ultima.\footnote{la trattazione
   sez.~\ref{sec:packet_socket}) dalla libreria \texttt{libpcap} per
   implementare programmi di cattura dei pacchetti, e per questo tipo di
   applicazione è opportuno usare sempre quest'ultima.\footnote{la trattazione
@@ -2347,17 +2347,17 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   \const{SOCK\_STREAM}.
 
 \item[\constd{SO\_BSDCOMPAT}] questa opzione abilita la compatibilità con il
   \const{SOCK\_STREAM}.
 
 \item[\constd{SO\_BSDCOMPAT}] questa opzione abilita la compatibilità con il
-  comportamento di BSD (in particolare ne riproduce alcuni bug).  Attualmente è una
-  opzione usata solo per il protocollo UDP e ne è prevista la rimozione.
+  comportamento di BSD (in particolare ne riproduce alcuni bug).  Attualmente
+  è una opzione usata solo per il protocollo UDP e ne è prevista la rimozione.
   L'opzione utilizza per \param{optval} un intero usato come valore logico.
 
   Quando viene abilitata gli errori riportati da messaggi ICMP per un socket
   L'opzione utilizza per \param{optval} un intero usato come valore logico.
 
   Quando viene abilitata gli errori riportati da messaggi ICMP per un socket
-  UDP non vengono passati al programma in user space. Con le versioni 2.0.x
-  del kernel erano anche abilitate altre opzioni di compatibilità per i socket
-  raw (modifiche casuali agli header, perdita del flag di \textit{broadcast})
-  che sono state rimosse con il passaggio al 2.2; è consigliato correggere i
-  programmi piuttosto che usare questa funzione. Dal kernel 2.4 viene
-  ignorata, e dal 2.6 genera un messaggio di log del kernel.
+  UDP non vengono passati al programma in \textit{user space}. Con le versioni
+  2.0.x del kernel erano anche abilitate altre opzioni di compatibilità per i
+  socket raw (modifiche casuali agli header, perdita del flag di
+  \textit{broadcast}) che sono state rimosse con il passaggio al 2.2; è
+  consigliato correggere i programmi piuttosto che usare questa funzione. Dal
+  kernel 2.4 viene ignorata, e dal 2.6 genera un messaggio di log del kernel.
 
 \item[\constd{SO\_BUSY\_POLL}] questa opzione, presente dal kernel 3.11,
   imposta un tempo approssimato in microsecondi, per cui in caso di ricezione
 
 \item[\constd{SO\_BUSY\_POLL}] questa opzione, presente dal kernel 3.11,
   imposta un tempo approssimato in microsecondi, per cui in caso di ricezione
@@ -2529,10 +2529,10 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   specificare come argomento per questa opzione sono impostabili tramiti gli
   opportuni valori di \func{sysctl} (vedi sez.~\ref{sec:sock_sysctl}).
 
   specificare come argomento per questa opzione sono impostabili tramiti gli
   opportuni valori di \func{sysctl} (vedi sez.~\ref{sec:sock_sysctl}).
 
-  Si tenga presente che nel caso di socket TCP, per entrambe le opzioni
-  \const{SO\_RCVBUF} e \const{SO\_SNDBUF}, il kernel alloca effettivamente una
-  quantità di memoria doppia rispetto a quanto richiesto con
-  \func{setsockopt}. Questo comporta che una successiva lettura con
+  Si tenga presente che nel caso di socket TCP il kernel alloca effettivamente
+  una quantità di memoria doppia rispetto a quanto richiesto con
+  \func{setsockopt} per entrambe le opzioni \const{SO\_RCVBUF} e
+  \const{SO\_SNDBUF}. Questo comporta che una successiva lettura con
   \func{getsockopt} riporterà un valore diverso da quello impostato con
   \func{setsockopt}.  Questo avviene perché TCP necessita dello spazio in più
   per mantenere dati amministrativi e strutture interne, e solo una parte
   \func{getsockopt} riporterà un valore diverso da quello impostato con
   \func{setsockopt}.  Questo avviene perché TCP necessita dello spazio in più
   per mantenere dati amministrativi e strutture interne, e solo una parte
@@ -2549,8 +2549,8 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
 
 \item[\constd{SO\_RCVBUFFORCE}] questa opzione, presente dal kernel 2.6.14, è
   identica a \const{SO\_RCVBUF} ma consente ad un processo con i privilegi di
 
 \item[\constd{SO\_RCVBUFFORCE}] questa opzione, presente dal kernel 2.6.14, è
   identica a \const{SO\_RCVBUF} ma consente ad un processo con i privilegi di
-  amministratore (con la \textit{capability} \const{CAP\_NET\_ADMIN}) di
-  impostare in valore maggiore del limite di
+  amministratore (per la precisione con la \textit{capability}
+  \const{CAP\_NET\_ADMIN}) di impostare in valore maggiore del limite di
   \sysctlrelfile{net/core}{rmem\_max}.
 
 \item[\constd{SO\_RCVLOWAT}] questa opzione imposta il valore che indica il
   \sysctlrelfile{net/core}{rmem\_max}.
 
 \item[\constd{SO\_RCVLOWAT}] questa opzione imposta il valore che indica il
@@ -2639,8 +2639,8 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
 
 \item[\constd{SO\_SNDBUFFORCE}] questa opzione, presente dal kernel 2.6.14, è
   identica a \const{SO\_SNDBUF} ma consente ad un processo con i privilegi di
 
 \item[\constd{SO\_SNDBUFFORCE}] questa opzione, presente dal kernel 2.6.14, è
   identica a \const{SO\_SNDBUF} ma consente ad un processo con i privilegi di
-  amministratore (con la \textit{capability} \const{CAP\_NET\_ADMIN}) di
-  impostare in valore maggiore del limite di
+  amministratore (per la precisione con la \textit{capability}
+  \const{CAP\_NET\_ADMIN}) di impostare in valore maggiore del limite di
   \sysctlrelfile{net/core}{wmem\_max}.
 
 % TODO verificare il timeout con un programma di test
   \sysctlrelfile{net/core}{wmem\_max}.
 
 % TODO verificare il timeout con un programma di test
@@ -3098,7 +3098,7 @@ manuale, nel caso specifico la documentazione si può consultare con
 \begin{table}[!htb]
   \centering
   \footnotesize
 \begin{table}[!htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|l|c|c|c|l|p{5.cm}|}
+  \begin{tabular}[c]{|l|c|c|c|l|p{4.8cm}|}
     \hline
     \textbf{Opzione}&\texttt{get}&\texttt{set}&\textbf{flag}&\textbf{Tipo}&
                     \textbf{Descrizione}\\
     \hline
     \textbf{Opzione}&\texttt{get}&\texttt{set}&\textbf{flag}&\textbf{Tipo}&
                     \textbf{Descrizione}\\
@@ -3192,7 +3192,7 @@ seguente elenco:
 
 \begin{figure}[!htb]
   \footnotesize \centering
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{0.70\textwidth}
+  \begin{minipage}[c]{0.90\textwidth}
     \includestruct{listati/ip_mreqn.h}
   \end{minipage}
   \caption{La struttura \structd{ip\_mreqn} utilizzata per unirsi a un gruppo di
     \includestruct{listati/ip_mreqn.h}
   \end{minipage}
   \caption{La struttura \structd{ip\_mreqn} utilizzata per unirsi a un gruppo di
@@ -3213,7 +3213,7 @@ differente dimensione passata in \param{optlen}.
 
 \begin{figure}[!htb]
   \footnotesize \centering
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{0.70\textwidth}
+  \begin{minipage}[c]{0.90\textwidth}
     \includestruct{listati/ip_mreq_source.h}
   \end{minipage}
   \caption{La struttura \structd{ip\_mreqn} utilizzata per unirsi a un gruppo di
     \includestruct{listati/ip_mreq_source.h}
   \end{minipage}
   \caption{La struttura \structd{ip\_mreqn} utilizzata per unirsi a un gruppo di
@@ -3280,7 +3280,7 @@ per collegarsi a diverse sorgenti.
 
 \begin{figure}[!htb]
   \footnotesize \centering
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{0.70\textwidth}
+  \begin{minipage}[c]{0.90\textwidth}
     \includestruct{listati/ip_msfilter.h}
   \end{minipage}
   \caption{La struttura \structd{ip\_msfilter} utilizzata per il
     \includestruct{listati/ip_msfilter.h}
   \end{minipage}
   \caption{La struttura \structd{ip\_msfilter} utilizzata per il
@@ -3288,13 +3288,14 @@ per collegarsi a diverse sorgenti.
   \label{fig:ip_msfilter_struct}
 \end{figure}
 
   \label{fig:ip_msfilter_struct}
 \end{figure}
 
-L'argomento \param{optval} è una struttura \struct{ip\_msfilter} illustrata in
-fig.~\ref{fig:ip_msfilter_struct}, il campo \var{imsf\_multiaddr} è
-l'indirizzo del gruppo di \textit{multicast}, il campo \var{imsf\_interface}
-l'indirizzo dell'interfaccia locale, il campo \var{imsf\_mode} indica la
-modalità di filtraggio e con i campi \var{imsf\_numsrc} e \var{imsf\_slist}
+L'argomento \param{optval} deve essere una struttura di tipo
+\struct{ip\_msfilter} (illustrata in fig.~\ref{fig:ip_msfilter_struct}); il
+campo \var{imsf\_multiaddr} indica l'indirizzo del gruppo di
+\textit{multicast}, il campo \var{imsf\_interface} l'indirizzo
+dell'interfaccia locale, il campo \var{imsf\_mode} indica la modalità di
+filtraggio e con i campi \var{imsf\_numsrc} e \var{imsf\_slist}
 rispettivamente la lunghezza della lista, e la lista stessa, degli indirizzi
 rispettivamente la lunghezza della lista, e la lista stessa, degli indirizzi
-sorgente. 
+sorgente.
 
 Come ausilio all'uso di questa opzione sono disponibili le macro
 \macro{MCAST\_INCLUDE} e \macro{MCAST\_EXCLUDE} che si possono usare per
 
 Come ausilio all'uso di questa opzione sono disponibili le macro
 \macro{MCAST\_INCLUDE} e \macro{MCAST\_EXCLUDE} che si possono usare per
@@ -3314,18 +3315,17 @@ di \param{optlen} con una struttura \struct{ip\_msfilter} contenente
   questo protocollo, senza doversi curare di verificarne la
   validità.\footnote{l'attacco viene in genere portato per causare un
     \textit{Denial of Service} aumentando il consumo di CPU del router nella
   questo protocollo, senza doversi curare di verificarne la
   validità.\footnote{l'attacco viene in genere portato per causare un
     \textit{Denial of Service} aumentando il consumo di CPU del router nella
-    verifica dell'autenticità di un gran numero di pacchetti di pacchetti
-    falsi; questi, arrivando da sorgenti diverse da un router adiacente, non
-    potrebbero più avere un TTL di 255 anche qualora questo fosse stato il
-    valore di partenza, e l'impostazione dell'opzione consente di scartarli
-    senza carico aggiuntivo sulla CPU (che altrimenti dovrebbe calcolare una
-    checksum).}
+    verifica dell'autenticità di un gran numero di pacchetti falsi; questi,
+    arrivando da sorgenti diverse da un router adiacente, non potrebbero più
+    avere un TTL di 255 anche qualora questo fosse stato il valore di
+    partenza, e l'impostazione dell'opzione consente di scartarli senza carico
+    aggiuntivo sulla CPU (che altrimenti dovrebbe calcolare una checksum).}
 
 \itindbeg{Path~MTU}
 \item[\constd{IP\_MTU}] Permette di leggere il valore della \textit{Path MTU}
 
 \itindbeg{Path~MTU}
 \item[\constd{IP\_MTU}] Permette di leggere il valore della \textit{Path MTU}
-  di percorso del socket.  L'opzione richiede per \param{optval} un intero che
-  conterrà il valore della \textit{Path MTU} in byte.  Questa è una opzione
-  introdotta con i kernel della serie 2.2.x, ed è specifica di Linux.
+  del socket.  L'opzione richiede per \param{optval} un intero che conterrà il
+  valore della \textit{Path MTU} in byte.  Questa è una opzione introdotta con
+  i kernel della serie 2.2.x, ed è specifica di Linux.
 
   È tramite questa opzione che un programma può leggere, quando si è avuto un
   errore di \errval{EMSGSIZE}, il valore della MTU corrente del socket. Si
 
   È tramite questa opzione che un programma può leggere, quando si è avuto un
   errore di \errval{EMSGSIZE}, il valore della MTU corrente del socket. Si
@@ -3333,7 +3333,7 @@ di \param{optlen} con una struttura \struct{ip\_msfilter} contenente
   la scoperta della \textit{Path MTU}, occorre che il socket sia stato
   esplicitamente connesso con \func{connect}. 
 
   la scoperta della \textit{Path MTU}, occorre che il socket sia stato
   esplicitamente connesso con \func{connect}. 
 
-  Ad esempio con i socket UDP si potrà ottenere una stima iniziale della
+  Ad esempio con i socket UDP si p ottenere una stima iniziale della
   \textit{Path MTU} eseguendo prima una \func{connect} verso la destinazione,
   e poi usando \func{getsockopt} con questa opzione. Si può anche avviare
   esplicitamente il procedimento di scoperta inviando un pacchetto di grosse
   \textit{Path MTU} eseguendo prima una \func{connect} verso la destinazione,
   e poi usando \func{getsockopt} con questa opzione. Si può anche avviare
   esplicitamente il procedimento di scoperta inviando un pacchetto di grosse
@@ -3804,7 +3804,7 @@ quantità di dettagli è fornita nel seguente elenco:
 
 \item[\constd{TCP\_INFO}] questa opzione, specifica di Linux, ma introdotta
   anche in altri kernel (ad esempio FreeBSD) permette di controllare lo stato
 
 \item[\constd{TCP\_INFO}] questa opzione, specifica di Linux, ma introdotta
   anche in altri kernel (ad esempio FreeBSD) permette di controllare lo stato
-  interno di un socket TCP direttamente da un programma in user space.
+  interno di un socket TCP direttamente da un programma in \textit{user space}.
   L'opzione restituisce in una speciale struttura \struct{tcp\_info}, la cui
   definizione è riportata in fig.~\ref{fig:tcp_info_struct}, tutta una serie
   di dati che il kernel mantiene, relativi al socket.  Anche questa opzione
   L'opzione restituisce in una speciale struttura \struct{tcp\_info}, la cui
   definizione è riportata in fig.~\ref{fig:tcp_info_struct}, tutta una serie
   di dati che il kernel mantiene, relativi al socket.  Anche questa opzione
@@ -3866,7 +3866,7 @@ quantità di dettagli è fornita nel seguente elenco:
     situazione.} utilizzare per il singolo socket. L'opzione è stata
   introdotta con il kernel 2.6.13,\footnote{alla data di stesura di queste
     note (Set. 2006) è pure scarsamente documentata, tanto che non è neanche
     situazione.} utilizzare per il singolo socket. L'opzione è stata
   introdotta con il kernel 2.6.13,\footnote{alla data di stesura di queste
     note (Set. 2006) è pure scarsamente documentata, tanto che non è neanche
-    definita nelle intestazioni delle \acr{glibc} per cui occorre definirla a
+    definita nelle intestazioni della \acr{glibc} per cui occorre definirla a
     mano al suo valore che è 13.} e prende come per \param{optval} il
   puntatore ad un buffer contenente il nome dell'algoritmo di controllo che
   si vuole usare. 
     mano al suo valore che è 13.} e prende come per \param{optval} il
   puntatore ad un buffer contenente il nome dell'algoritmo di controllo che
   si vuole usare. 
@@ -4532,10 +4532,11 @@ socket.  Quelli descritti anche nella pagina di manuale, accessibile con
   dati ancillari e di controllo (vedi sez.~\ref{sec:net_ancillary_data}).
 \end{basedescript}
 
   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
-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:
+Oltre a questi, nella directory \texttt{/proc/sys/net/core} si trovano diversi
+altri file, la cui documentazione, come per gli altri, 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{2.2cm}\desclabelstyle{\nextlinelabel}}
 \item[\sysctlrelfiled{net/core}{dev\_weight}] blocco di lavoro (\textit{work
     quantum}) dello \textit{scheduler} di processo dei pacchetti.
 \begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
 \item[\sysctlrelfiled{net/core}{dev\_weight}] blocco di lavoro (\textit{work
     quantum}) dello \textit{scheduler} di processo dei pacchetti.
@@ -4641,7 +4642,7 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti:
   disabilitare globalmente il procedimento con questo parametro ha pesanti
   ripercussioni in termini di prestazioni di rete.
 
   disabilitare globalmente il procedimento con questo parametro ha pesanti
   ripercussioni in termini di prestazioni di rete.
 
-\item[\sysctlrelfiled{net/ipv4}{ip\_always\_defrag}] fa si che tutti i
+\item[\sysctlrelfiled{net/ipv4}{ip\_always\_defrag}] fa sì che tutti i
   pacchetti IP frammentati siano riassemblati, anche in caso in successivo
   immediato inoltro.\footnote{introdotto con il kernel 2.2.13, nelle versioni
     precedenti questo comportamento poteva essere solo stabilito un volta per
   pacchetti IP frammentati siano riassemblati, anche in caso in successivo
   immediato inoltro.\footnote{introdotto con il kernel 2.2.13, nelle versioni
     precedenti questo comportamento poteva essere solo stabilito un volta per
@@ -4653,12 +4654,12 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti:
 
 \item[\sysctlrelfiled{net/ipv4}{ipfrag\_high\_thresh}] indica il limite
   massimo (espresso in numero di byte) sui pacchetti IP frammentati presenti
 
 \item[\sysctlrelfiled{net/ipv4}{ipfrag\_high\_thresh}] indica il 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
+  in coda; quando questo valore viene raggiunto la coda viene ripulita fino al
   valore \texttt{ipfrag\_low\_thresh}. Prende un valore intero.
 
   valore \texttt{ipfrag\_low\_thresh}. Prende un valore intero.
 
-\item[\sysctlrelfiled{net/ipv4}{ipfrag\_low\_thresh}] soglia bassa
-  (specificata in byte) a cui viene riportata la coda dei pacchetti IP
-  frammentati quando si raggiunge il valore massimo dato da 
+\item[\sysctlrelfiled{net/ipv4}{ipfrag\_low\_thresh}] indica la dimensione
+  (specificata in byte) della soglia inferiore a cui viene riportata la coda
+  dei pacchetti IP frammentati quando si raggiunge il valore massimo dato da
   \texttt{ipfrag\_high\_thresh}. Prende un valore intero.
 
 \item[\sysctlrelfiled{net/ipv4}{ip\_nonlocal\_bind}] se abilitato rende
   \texttt{ipfrag\_high\_thresh}. Prende un valore intero.
 
 \item[\sysctlrelfiled{net/ipv4}{ip\_nonlocal\_bind}] se abilitato rende
@@ -4708,7 +4709,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
 
 \item[\sysctlrelfiled{net/ipv4}{tcp\_app\_win}] indica la frazione della
   finestra TCP che viene riservata per gestire l'overhaed dovuto alla
 
 \item[\sysctlrelfiled{net/ipv4}{tcp\_app\_win}] indica la frazione della
   finestra TCP che viene riservata per gestire l'overhaed dovuto alla
-  bufferizzazione. Prende un valore valore intero che consente di calcolare la
+  bufferizzazione. Prende un valore intero che consente di calcolare la
   dimensione in byte come il massimo fra la MSS e
   $\texttt{window}/2^\texttt{tcp\_app\_win}$. Un valore nullo significa che
   non viene riservato nessuno spazio; il valore di default è 31.
   dimensione in byte come il massimo fra la MSS e
   $\texttt{window}/2^\texttt{tcp\_app\_win}$. Un valore nullo significa che
   non viene riservato nessuno spazio; il valore di default è 31.
@@ -4734,8 +4735,8 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
 \item[\sysctlrelfiled{net/ipv4}{tcp\_ecn}] abilita il meccanismo della
   \textit{Explicit Congestion Notification} (in breve ECN) nelle connessioni
   TCP. Prende valore logico che di default è disabilitato. La \textit{Explicit
 \item[\sysctlrelfiled{net/ipv4}{tcp\_ecn}] abilita il meccanismo della
   \textit{Explicit Congestion Notification} (in breve ECN) nelle connessioni
   TCP. Prende valore logico che di default è disabilitato. La \textit{Explicit
-    Congestion Notification} \itindex{Explicit~Congestion~Notification} è un
-  meccanismo che consente di notificare quando una rotta o una rete è
+    Congestion Notification} \itindex{Explicit~Congestion~Notification~(ECN)}
+  è un meccanismo che consente di notificare quando una rotta o una rete è
   congestionata da un eccesso di traffico,\footnote{il meccanismo è descritto
     in dettaglio nell'\href{http://www.ietf.org/rfc/rfc3168.txt}{RFC~3168}
     mentre gli effetti sulle prestazioni del suo utilizzo sono documentate
   congestionata da un eccesso di traffico,\footnote{il meccanismo è descritto
     in dettaglio nell'\href{http://www.ietf.org/rfc/rfc3168.txt}{RFC~3168}
     mentre gli effetti sulle prestazioni del suo utilizzo sono documentate
@@ -4787,13 +4788,12 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   risposta prima che il kernel decida che la connessione è caduta e la
   termini. Prende un valore intero che di default è 9.
 
   risposta prima che il kernel decida che la connessione è caduta e la
   termini. Prende un valore intero che di default è 9.
 
-\item[\sysctlrelfiled{net/ipv4}{tcp\_keepalive\_time}] indica il numero
-  di secondi che devono passare senza traffico sulla connessione prima che il
-  kernel inizi ad inviare pacchetti di pacchetti di
-  \textit{keepalive}.\footnote{ha effetto solo per i socket per cui si è
-    impostata l'opzione \const{SO\_KEEPALIVE} (vedi
-    sez.~\ref{sec:sock_options_main}.}  Prende un valore intero che di default
-  è 7200, pari a due ore.
+\item[\sysctlrelfiled{net/ipv4}{tcp\_keepalive\_time}] indica il numero di
+  secondi che devono passare senza traffico sulla connessione prima che il
+  kernel inizi ad inviare pacchetti di \textit{keepalive}.\footnote{ha effetto
+    solo per i socket per cui si è impostata l'opzione \const{SO\_KEEPALIVE}
+    (vedi sez.~\ref{sec:sock_options_main}.}  Prende un valore intero che di
+  default è 7200, pari a due ore.
 
 \item[\sysctlrelfiled{net/ipv4}{tcp\_low\_latency}] indica allo stack
   TCP del kernel di ottimizzare il comportamento per ottenere tempi di latenza
 
 \item[\sysctlrelfiled{net/ipv4}{tcp\_low\_latency}] indica allo stack
   TCP del kernel di ottimizzare il comportamento per ottenere tempi di latenza
@@ -4991,11 +4991,12 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
 \item[\sysctlrelfiled{net/ipv4}{tcp\_tw\_recycle}] abilita il riutilizzo
   rapido dei socket in stato \texttt{TIME\_WAIT}. Prende un valore logico e di
   default è disabilitato. Non è opportuno abilitare questa opzione che può
 \item[\sysctlrelfiled{net/ipv4}{tcp\_tw\_recycle}] abilita il riutilizzo
   rapido dei socket in stato \texttt{TIME\_WAIT}. Prende un valore logico e di
   default è disabilitato. Non è opportuno abilitare questa opzione che può
-  causare problemi con il NAT.\footnote{il
-    \itindex{Network~Address~Translation} \textit{Network Address Translation}
-    è una tecnica, impiegata nei firewall e nei router, che consente di
-    modificare al volo gli indirizzi dei pacchetti che transitano per una
-    macchina, Linux la supporta con il \textit{netfilter}.}
+  causare problemi con il NAT.\footnote{la
+    \itindex{Network~Address~Translation~(NAT)} \textit{Network Address
+      Translation} (abbreviato in NAT) è una tecnica, impiegata nei firewall e
+    nei router, che consente di modificare al volo gli indirizzi dei pacchetti
+    che transitano per una macchina, Linux la supporta con il
+    \textit{netfilter}.}
 
 \item[\sysctlrelfiled{net/ipv4}{tcp\_tw\_reuse}] abilita il riutilizzo
   dello stato \texttt{TIME\_WAIT} quando questo è sicuro dal punto di vista
 
 \item[\sysctlrelfiled{net/ipv4}{tcp\_tw\_reuse}] abilita il riutilizzo
   dello stato \texttt{TIME\_WAIT} quando questo è sicuro dal punto di vista
@@ -5038,9 +5039,9 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   \item il secondo valore, denominato \textit{default}, indica la dimensione
     di default in byte del buffer di spedizione di un socket TCP.  Questo
     valore sovrascrive il default iniziale impostato per tutti i tipi di
   \item il secondo valore, denominato \textit{default}, indica la dimensione
     di default in byte del buffer di spedizione di un socket TCP.  Questo
     valore sovrascrive il default iniziale impostato per tutti i tipi di
-    socket con \sysctlfile{net/core/wmem\_default}. Il default è 87380 byte,
-    ridotto a 43689 per sistemi con poca memoria. Si può aumentare questo
-    valore quando si desiderano dimensioni più ampie del buffer di
+    socket sul file \sysctlfile{net/core/wmem\_default}. Il default è 87380
+    byte, ridotto a 43689 per sistemi con poca memoria. Si può aumentare
+    questo valore quando si desiderano dimensioni più ampie del buffer di
     trasmissione per i socket TCP, ma come per il precedente
     \sysctlrelfile{net/ipv4}{tcp\_rmem}) se si vuole che in corrispondenza
     aumentino anche le dimensioni usate per la finestra TCP si deve abilitare
     trasmissione per i socket TCP, ma come per il precedente
     \sysctlrelfile{net/ipv4}{tcp\_rmem}) se si vuole che in corrispondenza
     aumentino anche le dimensioni usate per la finestra TCP si deve abilitare