Correzioni ortografiche e vocabolario.
[gapil.git] / sockctrl.tex
index c751d0abdc5fe19c51745f87bac2bde0d7b9d124..2d5a2c99c1e0017a7c08f943714540a04803994c 100644 (file)
@@ -1,6 +1,6 @@
 %% sockctrl.tex
 %%
 %% sockctrl.tex
 %%
-%% Copyright (C) 2004-2005 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2004-2006 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",
@@ -2013,7 +2013,8 @@ tab.~\ref{tab:sock_opt_socklevel}.
     \const{SO\_KEEPALIVE}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
                           controlla l'attività della connessione.\\
     \const{SO\_OOBINLINE}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
     \const{SO\_KEEPALIVE}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
                           controlla l'attività della connessione.\\
     \const{SO\_OOBINLINE}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-                          lascia in linea i dati \textit{out-of-band}.\\
+                          lascia in linea i dati \itindex{out-of-band}
+                          \textit{out-of-band}.\\
     \const{SO\_RCVLOWAT} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
                           basso livello sul buffer di ricezione.\\
     \const{SO\_SNDLOWAT} &$\bullet$&$\bullet$&         &\texttt{int}&
     \const{SO\_RCVLOWAT} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
                           basso livello sul buffer di ricezione.\\
     \const{SO\_SNDLOWAT} &$\bullet$&$\bullet$&         &\texttt{int}&
@@ -2085,13 +2086,14 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   forniti in sez.~\ref{sec:sock_options_main}.
 
 \item[\const{SO\_OOBINLINE}] se questa opzione viene abilitata i dati
   forniti in sez.~\ref{sec:sock_options_main}.
 
 \item[\const{SO\_OOBINLINE}] se questa opzione viene abilitata i dati
-  \textit{out-of-band} vengono inviati direttamente nel flusso di dati del
-  socket (e sono quindi letti con una normale \func{read}) invece che restare
-  disponibili solo per l'accesso con l'uso del flag \const{MSG\_OOB} di
-  \func{recvmsg}. L'argomento è trattato in dettaglio in
+  \itindex{out-of-band} \textit{out-of-band} vengono inviati direttamente nel
+  flusso di dati del socket (e sono quindi letti con una normale \func{read})
+  invece che restare disponibili solo per l'accesso con l'uso del flag
+  \const{MSG\_OOB} di \func{recvmsg}. L'argomento è trattato in dettaglio in
   sez.~\ref{sec:TCP_urgent_data}. L'opzione funziona soltanto con socket che
   sez.~\ref{sec:TCP_urgent_data}. L'opzione funziona soltanto con socket che
-  supportino i dati \textit{out-of-band} (non ha senso per socket UDP ad
-  esempio), ed utilizza per \param{optval} un intero usato come valore logico.
+  supportino i dati \itindex{out-of-band} \textit{out-of-band} (non ha senso
+  per socket UDP ad esempio), ed utilizza per \param{optval} un intero usato
+  come valore logico.
 
 \item[\const{SO\_RCVLOWAT}] questa opzione imposta il valore che indica il
   numero minimo di byte che devono essere presenti nel buffer di ricezione
 
 \item[\const{SO\_RCVLOWAT}] questa opzione imposta il valore che indica il
   numero minimo di byte che devono essere presenti nel buffer di ricezione
@@ -2659,8 +2661,6 @@ specificato in \var{l\_linger}.
 
 
 
 
 
 
-
-
 \subsection{Le opzioni per il protocollo IPv4}
 \label{sec:sock_ipv4_options}
 
 \subsection{Le opzioni per il protocollo IPv4}
 \label{sec:sock_ipv4_options}
 
@@ -2669,11 +2669,10 @@ socket che usano il protocollo IPv4.\footnote{come per le precedenti opzioni
   generiche una descrizione di esse è disponibile nella settima sezione delle
   pagine di manuale, nel caso specifico la documentazione si può consultare
   con \texttt{man 7 ip}.}  Se si vuole operare su queste opzioni generiche il
   generiche una descrizione di esse è disponibile nella settima sezione delle
   pagine di manuale, nel caso specifico la documentazione si può consultare
   con \texttt{man 7 ip}.}  Se si vuole operare su queste opzioni generiche il
-livello da utilizzare è \const{SOL\_IP}; si è riportato un elenco di queste
-opzioni in tab.~\ref{tab:sock_opt_iplevel}. Le costanti indicanti le opzioni e
-tutte le altre costanti ad esse collegate sono definite in
-\file{netinet/ip.h}, ed accessibili includendo detto file.
-
+livello da utilizzare è \const{SOL\_IP} (o l'equivalente \const{IPPROTO\_IP});
+si è riportato un elenco di queste opzioni in tab.~\ref{tab:sock_opt_iplevel}.
+Le costanti indicanti le opzioni e tutte le altre costanti ad esse collegate
+sono definite in \file{netinet/ip.h}, ed accessibili includendo detto file.
 
 \begin{table}[!htb]
   \centering
 
 \begin{table}[!htb]
   \centering
@@ -2728,9 +2727,9 @@ tutte le altre costanti ad esse collegate sono definite in
   \label{tab:sock_opt_iplevel}
 \end{table}
 
   \label{tab:sock_opt_iplevel}
 \end{table}
 
-Le descrizioni di tab.~\ref{tab:sock_opt_iplevel} sono estremamente succinte,
-una maggiore quantità di dettagli su queste opzioni è fornito nel seguente
-elenco:
+Le descrizioni riportate in tab.~\ref{tab:sock_opt_iplevel} sono estremamente
+succinte, una maggiore quantità di dettagli sulle varie opzioni è fornita nel
+seguente elenco:
 \begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
 
 
 \begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
 
 
@@ -2988,6 +2987,152 @@ sez.~\ref{sec:net_sendmsg}).
 
 
 
 
 
 
+\subsection{Le opzioni per i protocolli TCP e UDP}
+\label{sec:sock_tcp_udp_options}
+
+In questa sezione tratteremo le varie opzioni disponibili per i socket che
+usano i due principali protocolli di comunicazione del livello di trasporto;
+UDP e TCP.\footnote{come per le precedenti, una descrizione di queste opzioni
+  è disponibile nella settima sezione delle pagine di manuale, che si può
+  consultare rispettivamente con \texttt{man 7 tcp} e \texttt{man 7 udp}; le
+  pagine di manuale però, alla stesura di questa sezione (Agosto 2006) sono
+  alquanto incomplete.}  Dato che questi protocolli sono entrambi trasportati
+su IP, oltre alle opzioni generiche di sez.~\ref{sec:sock_generic_options}
+saranno comunque disponibili anche le precedenti opzioni di
+sez.~\ref{sec:sock_ipv4_options}.\footnote{in realtà in
+  sez.~\ref{sec:sock_ipv4_options} si sono riportate le opzioni per IPv4, ma
+  quelle per TCP e UDP sono le stesse anche quando si usa IPv6.}
+
+
+Il protocollo che supporta il maggior numero di opzioni è TCP; per poterle
+utilizzare occorre specificare \const{SOL\_TCP} (o l'equivalente
+\const{IPPROTO\_TCP}) come valore per l'argomento \param{level}. Si è
+riportato un elenco di queste opzioni in tab.~\ref{tab:sock_opt_tcp}.  Le
+costanti indicanti le opzioni del protocollo TCP e tutte le altre costanti ad
+esse collegate sono definite in \file{netinet/tcp.h}, ed accessibili
+includendo detto file.\footnote{in realtà questo è il file usato dalle
+  librerie; la definizione delle opzioni effettivamente supportate da Linux si
+  trova nel file \texttt{linux/tcp.h}, dal quale si sono estratte le costanti
+  di tab.~\ref{tab:sock_opt_tcplevel}.}
+
+\begin{table}[!htb]
+  \centering
+  \footnotesize
+  \begin{tabular}[c]{|l|c|c|c|l|l|}
+    \hline
+    \textbf{Opzione}&\texttt{get}&\texttt{set}&\textbf{flag}&\textbf{Tipo}&
+                    \textbf{Descrizione}\\
+    \hline
+    \hline
+    \const{TCP\_NODELAY}      &$\bullet$&$\bullet$&&\texttt{}& %??? 
+      .\\
+    \const{TCP\_MAXSEG}       &$\bullet$&$\bullet$&&\texttt{}& %??? 
+      .\\
+    \const{TCP\_CORK}         &$\bullet$&$\bullet$&&\texttt{}& %??? 
+      .\\
+    \const{TCP\_KEEPIDLE}     &$\bullet$&$\bullet$&&\texttt{}& %??? 
+      .\\
+    \const{TCP\_KEEPINTVL}    &$\bullet$&$\bullet$&&\texttt{}& %??? 
+      .\\
+    \const{TCP\_KEEPCNT}      &$\bullet$&$\bullet$&&\texttt{}& %??? 
+      .\\
+    \const{TCP\_SYNCNT}       &$\bullet$&$\bullet$&&\texttt{}& %??? 
+      .\\
+    \const{TCP\_LINGER2}      &$\bullet$&$\bullet$&&\texttt{}& %??? 
+      .\\
+    \const{TCP\_DEFER\_ACCEPT}&$\bullet$&$\bullet$&&\texttt{}& %??? 
+      .\\
+    \const{TCP\_WINDOW\_CLAMP}&$\bullet$&$\bullet$&&\texttt{}& %??? 
+      .\\
+    \const{TCP\_INFO}         &$\bullet$&$\bullet$&&\texttt{}& %??? 
+      .\\
+    \const{TCP\_QUICKACK}     &$\bullet$&$\bullet$&&\texttt{}& %??? 
+      .\\
+    \const{TCP\_CONGESTION}   &$\bullet$&$\bullet$&&\texttt{}& %??? 
+      .\\
+   \hline
+  \end{tabular}
+  \caption{Le opzioni per i socket TCP disponibili al livello
+    \const{SOL\_TCP}.}
+  \label{tab:sock_opt_tcplevel}
+\end{table}
+
+Le descrizioni di tab.~\ref{tab:sock_opt_tcplevel} sono estremamente
+sintetiche, una maggiore quantità di dettagli su queste opzioni è fornita nel
+seguente elenco:
+\begin{basedescript}{\desclabelwidth{3.0cm}\desclabelstyle{\nextlinelabel}}
+
+\item[\const{TCP\_NODELAY}] 
+
+\item[\const{TCP\_MAXSEG}] 
+
+\item[\const{TCP\_CORK}] 
+
+\item[\const{TCP\_KEEPINTVL}] 
+
+\item[\const{TCP\_KEEPCNT}] 
+
+\item[\const{TCP\_SYNCNT}] 
+
+\item[\const{TCP\_LINGER2}] 
+
+\item[\const{TCP\_DEFER\_ACCEPT}] 
+
+\item[\const{TCP\_WINDOW\_CLAMP}] 
+
+\item[\const{TCP\_INFO}] 
+
+\item[\const{TCP\_QUICKACK}] 
+
+\item[\const{TCP\_CONGESTION}] Introdotta con il kernel 2.6.13.
+
+\end{basedescript}
+
+
+Il protocollo UDP, anche per la sua maggiore semplicità, supporta un numero
+ridotto di opzioni, riportate in tab.~\ref{tab:sock_opt_udp}; anche in questo
+caso per poterle utilizzare occorrerà impostare l'opportuno valore per
+l'argomento \param{level}, che è \const{SOL\_UDP} (o l'equivalente
+\const{IPPROTO\_UDP}).  Le costanti che identificano dette opzioni sono
+definite in \file{netinet/udp.h}, ed accessibili includendo detto
+file.\footnote{come per TCP, la definizione delle opzioni effettivamente
+  supportate dal kernel si trova in realtà nel file \texttt{linux/udp.h}, dal
+  quale si sono estratte le costanti di tab.~\ref{tab:sock_opt_udplevel}.}
+
+\begin{table}[!htb]
+  \centering
+  \footnotesize
+  \begin{tabular}[c]{|l|c|c|c|l|l|}
+    \hline
+    \textbf{Opzione}&\texttt{get}&\texttt{set}&\textbf{flag}&\textbf{Tipo}&
+                    \textbf{Descrizione}\\
+    \hline
+    \hline
+    \const{UDP\_CORK}  &$\bullet$&$\bullet$&&\texttt{}& %??? 
+      .\\
+    \const{UDP\_ENCAP} &$\bullet$&$\bullet$&&\texttt{}& %??? 
+      .\\
+   \hline
+  \end{tabular}
+  \caption{Le opzioni per i socket UDP disponibili al livello
+    \const{SOL\_UDP}.}
+  \label{tab:sock_opt_udplevel}
+\end{table}
+
+Ancora una volta le descrizioni contenute tab.~\ref{tab:sock_opt_udplevel}
+sono un semplice riferimento, una maggiore quantità di dettagli sulle
+caratteristiche delle opzioni citate è quello dell'elenco seguente:
+\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
+
+\item[\const{UDP\_CORK}] Introdotta con il kernel 2.5.44
+
+\item[\const{UDP\_ENCAP}] Introdotta con il kernel 2.5.67.
+
+\end{basedescript}
+
+
+
+
 \section{La gestione attraverso le funzioni di controllo}
 \label{sec:sock_ctrl_func}
 
 \section{La gestione attraverso le funzioni di controllo}
 \label{sec:sock_ctrl_func}
 
@@ -3025,18 +3170,19 @@ identificano le operazioni sono le seguenti:
 \item[\const{SIOCGSTAMP}] restituisce il contenuto di una struttura
   \struct{timeval} con la marca temporale dell'ultimo pacchetto ricevuto sul
   socket, questa operazione può essere utilizzata per effettuare delle
 \item[\const{SIOCGSTAMP}] restituisce il contenuto di una struttura
   \struct{timeval} con la marca temporale dell'ultimo pacchetto ricevuto sul
   socket, questa operazione può essere utilizzata per effettuare delle
-  misurazioni precise del tempo di andata e ritorno\footnote{il cosiddetto
-    \itindex{round~trip~time} \textit{round trip time}.} dei pacchetti sulla
-  rete.
+  misurazioni precise del tempo di andata e ritorno\footnote{il
+    \itindex{Round~Trip~Time} \textit{Round Trip Time} cui abbiamo già
+    accennato in sez.~\ref{sec:net_tcp}.} dei pacchetti sulla rete.
 
 \item[\const{SIOCSPGRP}] imposta il processo o il \itindex{process~group}
   \textit{process group} a cui inviare i segnali \const{SIGIO} e
   \const{SIGURG} quando viene completata una operazione di I/O asincrono o
 
 \item[\const{SIOCSPGRP}] imposta il processo o il \itindex{process~group}
   \textit{process group} a cui inviare i segnali \const{SIGIO} e
   \const{SIGURG} quando viene completata una operazione di I/O asincrono o
-  arrivano dei dati urgenti. Il terzo argomento deve essere un puntatore ad una
-  variabile di tipo \type{pid\_t}; un valore positivo indica direttamente il
-  \acr{pid} del processo, mentre un valore negativo indica (col valore
-  assoluto) il \textit{process group}. Senza privilegi di amministratore o la
-  capability \const{CAP\_KILL} si può impostare solo se stessi o il proprio
+  arrivano dei dati urgenti \itindex{out-of-band} (\texttt{out-of-band}). Il
+  terzo argomento deve essere un puntatore ad una variabile di tipo
+  \type{pid\_t}; un valore positivo indica direttamente il \acr{pid} del
+  processo, mentre un valore negativo indica (col valore assoluto) il
+  \textit{process group}. Senza privilegi di amministratore o la capability
+  \const{CAP\_KILL} si può impostare solo se stessi o il proprio
   \textit{process group}.
 
 \item[\const{SIOCGPGRP}] legge le impostazioni presenti sul socket
   \textit{process group}.
 
 \item[\const{SIOCGPGRP}] legge le impostazioni presenti sul socket
@@ -3064,31 +3210,75 @@ processo che riceve i segnali) che si effettuano chiamando \func{ioctl} con
 \const{SIOCGPGRP} e \const{SIOCSPGRP}.
 
 
 \const{SIOCGPGRP} e \const{SIOCSPGRP}.
 
 
-
-
-\subsection{L'uso di \func{ioctl} per i socket IP}
+\subsection{L'uso di \func{ioctl} per i socket TCP e UDP}
 \label{sec:sock_ioctl_IP}
 
 \label{sec:sock_ioctl_IP}
 
+Oltre alle caratteristiche che si possono impostare per i socket generici, la
+funzione \func{ioctl} consente di effettuare alcune operazioni specifiche per
+i socket UDP e TCP. Non esistono operazioni specifiche per i socket IP
+generici, mentre per i pacchetti di altri protocolli trasportati su IP,
+qualora li si gestisca attraverso dei socket, si dovrà fare riferimento
+direttamente all'eventuale supporto presente per il tipo di socket usato (ad
+esempio si possono ricevere pacchetti ICMP con socket di tipo \texttt{raw},
+nel qual caso si dovrà fare riferimento alle operazioni di quest'ultimo).
+
+Le operazioni di controllo disponibili per i socket TCP, come illustrate dalla
+relativa pagina di manuale, accessibile con \texttt{man 7 tcp}, prevedono come
+possibile valore per il secondo argomento della funzione le costanti
+illustrate nell'elenco seguente; il terzo argomento della funzione, gestito
+come \itindex{value~result~argument} \textit{value result argument}, deve
+essere sempre il puntatore ad una variabile di tipo \ctyp{int}:
+\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
+\item[\const{SIOCINQ}] restituisce la quantità di dati non ancora letti
+  presenti nel buffer di ricezione; il socket non deve essere in stato
+  \texttt{LISTEN}, altrimenti si avrà un errore di \errval{EINVAL}.
+\item[\const{SIOCATMARK}] ritorna un intero non nullo, da intendere come
+  valore logico, se il flusso di dati letti sul socket è arrivato sulla
+  posizione (detta anche \textit{urgent mark}) in cui sono stati ricevuti
+  \itindex{out-of-band} dati urgenti (vedi sez.~\ref{sec:TCP_urgent_data}).
+  Una operazione di lettura da un socket non attraversa mai questa posizione,
+  per cui è possibile controllare se la si è raggiunta o meno con questa
+  operazione.
+
+  Questo è utile quando si attiva l'opzione \const{SO\_OOBINLINE} (vedi
+  sez.~\ref{sec:sock_generic_options}) per ricevere i dati urgenti all'interno
+  del flusso dei dati ordinari del socket;\footnote{vedremo in
+    sez.~\ref{sec:TCP_urgent_data} che in genere i dati urgenti presenti su un
+    socket si leggono \textit{out-of-band} usando un opportuno flag per
+    \func{recvmsg}.}  in tal caso quando \const{SIOCATMARK} restituisce un
+  valore non nullo si saprà che la successiva lettura dal socket restituirà i
+  dati urgenti e non il normale traffico; torneremo su questo in maggior
+  dettaglio in sez.~\ref{sec:TCP_urgent_data}.
+
+\item[\const{SIOCOUTQ}] restituisce la quantità di dati non ancora inviati
+  presenti nel buffer di spedizione; come per \const{SIOCINQ} il socket non
+  deve essere in stato \texttt{LISTEN}, altrimenti si avrà un errore di
+  \errval{EINVAL}.
+\end{basedescript}
 
 
 
 
-\subsection{L'uso di \func{ioctl} per i socket TCP e UDP}
-\label{sec:sock_ioctl_TCP_UDP}
-
-
+Le operazioni di controllo disponibili per i socket UDP, come illustrate dalla
+relativa pagina di manuale, accessibile con \texttt{man 7 udp}, sono quelle
+indicate nelle costanti del seguente elenco; come per i socket TCP il terzo
+argomento viene gestito come \itindex{value~result~argument} \textit{value
+  result argument} e deve essere un puntatore ad una variabile di tipo
+\ctyp{int}:
+\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
+\item[\const{FIONREAD}] 
+\item[\const{TIOCOUTQ}] 
+\end{basedescript}
 
 
 
 \section{La gestione con \func{sysctl} ed il filesystem \texttt{/proc}}
 \label{sec:sock_sysctl_proc}
 
 
 
 
 \section{La gestione con \func{sysctl} ed il filesystem \texttt{/proc}}
 \label{sec:sock_sysctl_proc}
 
-
 Come ultimo argomento di questo capitolo tratteremo l'uso della funzione
 \func{sysctl} (che è stata introdotta nelle sue funzionalità generiche in
 sez.~\ref{sec:sys_sysctl}) per quanto riguarda le sue capacità di effettuare
 impostazioni relative alle proprietà dei socket.  Dato che le stesse
 funzionalità sono controllabili direttamente attraverso il filesystem
 Come ultimo argomento di questo capitolo tratteremo l'uso della funzione
 \func{sysctl} (che è stata introdotta nelle sue funzionalità generiche in
 sez.~\ref{sec:sys_sysctl}) per quanto riguarda le sue capacità di effettuare
 impostazioni relative alle proprietà dei socket.  Dato che le stesse
 funzionalità sono controllabili direttamente attraverso il filesystem
-\texttt{/proc}, tratteremo anche di quest'ultimo.
-
+\texttt{/proc}, le tratteremo attraverso i file presenti in quest'ultimo.
 
 
 \subsection{L'uso di \func{sysctl} e \texttt{/proc} per le proprietà della
 
 
 \subsection{L'uso di \func{sysctl} e \texttt{/proc} per le proprietà della
@@ -3103,7 +3293,6 @@ di un singolo socket, mentre con \func{sysctl} e con \texttt{/proc} si
 impostano proprietà (o valori di default) validi a livello dell'intero
 sistema, e cioè per tutti i socket.
 
 impostano proprietà (o valori di default) validi a livello dell'intero
 sistema, e cioè per tutti i socket.
 
-
 Le opzioni disponibili per le proprietà della rete, nella gerarchia dei valori
 impostabili con \func{sysctl}, sono riportate sotto il nodo \texttt{net}, o,
 se acceduti tramite l'interfaccia del filesystem \texttt{/proc}, sotto
 Le opzioni disponibili per le proprietà della rete, nella gerarchia dei valori
 impostabili con \func{sysctl}, sono riportate sotto il nodo \texttt{net}, o,
 se acceduti tramite l'interfaccia del filesystem \texttt{/proc}, sotto
@@ -3131,17 +3320,20 @@ Si tenga presente infine che se 
 sottonodi di quest'ultima sono mappati come file e directory sotto
 \texttt{/proc/sys/}, non è vero il contrario, ed in particolare Linux consente
 di impostare alcuni parametri o leggere lo stato della rete a livello di
 sottonodi di quest'ultima sono mappati come file e directory sotto
 \texttt{/proc/sys/}, non è vero il contrario, ed in particolare Linux consente
 di impostare alcuni parametri o leggere lo stato della rete a livello di
-sistema sotto \texttt{/proc/net}.
+sistema sotto \texttt{/proc/net}, dove sono presenti dei file che non
+corrispondono a nessun nodo di \func{sysctl}.
+
 
 
 \subsection{I valori di controllo per i socket generici}
 \label{sec:sock_gen_sysctl}
 
 
 
 \subsection{I valori di controllo per i socket generici}
 \label{sec:sock_gen_sysctl}
 
-Nella directory \texttt{/proc/sys/net/core} sono disponibili i parametri
-generici validi per tutti i socket, quelli descritti anche nella rispettiva
-pagina di manuale, accessibile con \texttt{man 7 socket}.  Essi sono:
+Nella directory \texttt{/proc/sys/net/core} sono presenti i file
+corrispondenti ai parametri generici validi per tutti i socket. Quelli
+descritti anche nella pagina di manuale, accessibile con \texttt{man 7 socket}
+sono i seguenti:
 
 
-\begin{basedescript}{\desclabelwidth{3.2cm}\desclabelstyle{\nextlinelabel}}
+\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
 \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
@@ -3152,36 +3344,96 @@ pagina di manuale, accessibile con \texttt{man 7 socket}.  Essi sono:
 \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{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}] impostano i valori
-  delle impostazioni del \itindex{bucket~filter} \textit{bucket filter}
-  (rispettivamente flusso a regime e dimensione di picchi di emissione) che
-  limita l'ammontare dei messaggi di avvertimento inviati dal kernel a causa
-  di eventi esterni sulla rete.
-% TODO: spiegare il bucket filter e questa opzione
+\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.}
+
+  Il \itindex{bucket~filter} \textit{bucket filter} è un algoritmo generico
+  che permette di impostare dei limiti di flusso su una quantità\footnote{uno
+    analogo viene usato nel \index{netfilter} \textit{netfilter} per imporre
+    dei limiti sul flusso dei pacchetti.}  senza dovere eseguire medie
+  temporali, che verrebbero a dipendere in misura non controllabile dalla
+  dimensione dell'intervallo su cui si media e dalla distribuzione degli
+  eventi;\footnote{in caso di un picco di flusso (il cosiddetto
+    \textit{burst}) il flusso medio verrebbe a dipendere in maniera esclusiva
+    dalla dimensione dell'intervallo di tempo su cui calcola la media.} in
+  questo caso si definisce la dimensione di un ``\textsl{bidone}'' (il
+  \textit{bucket}) e del flusso che da esso può uscire, la presenza di una
+  dimensione iniziale consente di assorbire eventuali picchi di emissione,
+  l'aver fissato un flusso di uscita garantisce che a regime questo sarà il
+  valore medio del flusso ottenibile dal \textit{bucket}.
+
+  I due valori indicano rispettivamente il flusso a regime (non sarà inviato
+  più di un messaggio per il numero di secondi specificato da
+  \texttt{message\_cost}) e la dimensione iniziale per in caso di picco di
+  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[\texttt{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}).
 \end{basedescript}
 
 \item[\texttt{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
+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. % 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.
 
 
-\subsection{I valori di controllo per i socket IP}
-\label{sec:sock_gen_sysctl}
+\item[\texttt{mod\_cong}] valore per l'occupazione della coda di ricezione
+  sotto la quale si considera di avere una congestione moderata.
 
 
-Nella directory \texttt{/proc/sys/net/ipv4} sono disponibili i parametri per i
-socket IPv4, descritti anche nella rispettiva pagina di manuale, accessibile
-con \texttt{man 7 ip}. Essi sono:
+\item[\texttt{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[\texttt{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.
+
+\end{basedescript}
+
+
+\subsection{I valori di controllo per il protocollo IPv4}
+\label{sec:sock_ipv4_sysctl}
+
+Nella directory \texttt{/proc/sys/net/ipv4} sono presenti i file che
+corrispondono ai parametri dei socket che usano il protocollo IPv4, relativi
+quindi sia alle caratteristiche di IP, che a quelle degli altri protocolli che
+vengono usati all'interno di quest'ultimo (come ICMP, TCP e UDP) o a fianco
+dello stesso (come ARP).
+
+I file che consentono di controllare le caratteristiche specifiche del
+protocollo IP in quanto tale, descritti anche nella pagina di manuale
+accessibile con \texttt{man 7 ip}, sono i seguenti:
 \begin{basedescript}{\desclabelwidth{3.2cm}\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. Il valore può
 \begin{basedescript}{\desclabelwidth{3.2cm}\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. Il valore può
-  essere modificato per il singolo socket con l'opzione
-  \const{IP\_TTL}. Prende un valore intero.
+  essere modificato per il singolo socket con l'opzione \const{IP\_TTL}.
+  Prende un valore intero.
 
 \item[\texttt{ip\_forward}] abilita l'inoltro dei pacchetti da una interfaccia
 
 \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).
+  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
 
 \item[\texttt{ip\_dynaddr}] Abilita la riscrittura automatica degli indirizzi
   associati ad un socket quando una interfaccia cambia indirizzo. Viene usato
@@ -3190,7 +3442,8 @@ con \texttt{man 7 ip}. Essi sono:
   valore nullo disabilita la funzionalità, con 1 la si abilita, con 2 la si
   abilità in modalità \textsl{prolissa}.
 
   valore nullo disabilita la funzionalità, con 1 la si abilita, con 2 la si
   abilità in modalità \textsl{prolissa}.
 
-\item[\texttt{ip\_autoconfig}] non documentato
+\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
 
 \item[\texttt{ip\_local\_port\_range}] imposta l'intervallo dei valori usati
   per l'assegnazione delle porte effimere, permette cioè di modificare i
@@ -3222,12 +3475,22 @@ con \texttt{man 7 ip}. Essi sono:
     di compilazione del kernel con l'opzione
     \texttt{CONFIG\_IP\_ALWAYS\_DEFRAG}.}
 
     di compilazione del kernel con l'opzione
     \texttt{CONFIG\_IP\_ALWAYS\_DEFRAG}.}
 
-\item[\texttt{neigh/*}] La directory contiene i valori 
+\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[\texttt{neigh/*}] La directory contiene i valori 
+% TODO trattare neigh/* nella parte su arp, da capire dove sarà.
 
 \end{basedescript}
 
 
 
 \end{basedescript}
 
 
+
+
 % LocalWords:  socket sez dotted decimal resolver Domain Name Service cap DNS
 % LocalWords:  client fig LDAP Lightweight Access Protocol NIS Information Sun
 % LocalWords:  like netgroup Switch Solaris glibc libc uclib NSS tab shadow uid
 % LocalWords:  socket sez dotted decimal resolver Domain Name Service cap DNS
 % LocalWords:  client fig LDAP Lightweight Access Protocol NIS Information Sun
 % LocalWords:  like netgroup Switch Solaris glibc libc uclib NSS tab shadow uid
@@ -3287,4 +3550,8 @@ con \texttt{man 7 ip}. Essi sono:
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
-% LocalWords:  quest'ultime neigh
+% LocalWords:  quest'ultime neigh dev weight cong mod somaxconn Di SIOCINQ DoS
+% LocalWords:  Documentation SIOCATMARK SIOCOUTQ FIONREAD TIOCOUTQ Denial work
+% LocalWords:  netfilter scheduler mark ARP DHCP BOOTP RARP nonlocal sniffer
+% LocalWords:  linux NODELAY MAXSEG CORK KEEPIDLE KEEPINTVL KEEPCNT SYNCNT INFO
+% LocalWords:  DEFER ACCEPT WINDOW CLAMP QUICKACK CONGESTION ENCAP urgent