Reindicizzate alcune macro, messa sezione sulle opzioni di IP, risistemata
[gapil.git] / sockctrl.tex
index 90e922b63a072d1e442fa2bf38741397a924f592..89c3bfce0cc97af6007417a308ab8a1f0e5e34eb 100644 (file)
@@ -2072,7 +2072,7 @@ anche di trattare i vari casi particolari, dato che nonostante queste opzioni
 siano indicate al livello generico, alcune di esse han senso solo per alcuni
 tipi di socket. L'elenco dettagliato del significato di ciascuna di esse è
 allora il seguente:
-\begin{basedescript}{\desclabelwidth{3cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
 \item[\const{SO\_KEEPALIVE}] una connessione può restare attiva se non viene
   effettuato alcun traffico su di essa; in certi casi però può essere utile
   controllarne lo stato per accorgersi di eventuali problemi. Per questo, se
@@ -2236,12 +2236,12 @@ allora il seguente:
   di amministratore (in particolare con la \textit{capability}
   \const{CAP\_NET\_ADMIN}).  L'opzione necessita inoltre dell'opportuno
   supporto nel kernel;\footnote{deve cioè essere definita la macro di
-    preprocessore \texttt{SOCK\_DEBUGGING} nel file \file{include/net/sock.h}
+    preprocessore \macro{SOCK\_DEBUGGING} nel file \file{include/net/sock.h}
     dei sorgenti del kernel, questo è sempre vero nei kernel delle serie
     superiori alla 2.3, per i kernel delle serie precedenti invece è
     necessario aggiungere a mano detta definizione; è inoltre possibile
     abilitare anche il tracciamento degli stati del TCP definendo la macro
-    \texttt{STATE\_TRACE} in \file{include/net/tcp.h}.}  quando viene
+    \macro{STATE\_TRACE} in \file{include/net/tcp.h}.}  quando viene
   abilitata una serie di messaggi con le informazioni di debug vengono inviati
   direttamente al sistema del kernel log.\footnote{si tenga presente che il
     comportamento è diverso da quanto avviene con BSD, dove l'opzione opera
@@ -2273,7 +2273,7 @@ allora il seguente:
 
   Usando \const{SO\_REUSEADDR} fra la chiamata a \func{socket} e quella a
   \func{bind} si consente a quest'ultima di avere comunque successo anche se
-  la connessione è attiva (o nello stato texttt{TIME\_WAIT}). È bene però
+  la connessione è attiva (o nello stato \texttt{TIME\_WAIT}). È bene però
   ricordare (si riveda quanto detto in sez.~\ref{sec:TCP_time_wait}) che la
   presenza dello stato \texttt{TIME\_WAIT} ha una ragione, ed infatti se si
   usa questa opzione esiste sempre una probabilità, anche se estremamente
@@ -2294,16 +2294,20 @@ allora il seguente:
   impostato \const{SO\_REUSEADDR}. Usando questa opzione diventa anche
   possibile eseguire \func{bind} sull'indirizzo generico, e questo permetterà
   il collegamento per tutti gli indirizzi (di quelli presenti) per i quali la
-  porta risulti libera. Infine si tenga presente che con il protocollo TCP non
-  è mai possibile far partire server che eseguano \func{bind} sullo stesso
-  indirizzo e la stessa porta, cioè ottenere quello che viene chiamato un
-  \textit{completely duplicate binding}.
+  porta non risulti occupata da una precedente chiamata più specifica. Infine
+  si tenga presente che con il protocollo TCP non è mai possibile far partire
+  server che eseguano \func{bind} sullo stesso indirizzo e la stessa porta,
+  cioè ottenere quello che viene chiamato un \textit{completely duplicate
+    binding}.
 
   Il terzo impiego è simile al precedente e prevede l'uso di \func{bind}
   all'interno dello stesso programma per associare indirizzi diversi a socket
-  diversi. Vale in questo caso quanto detto in precedenza, l'unica differenza
-  è che in questo caso le diverse chiamate a  \func{bind} sono eseguite
-  all'interno dello stesso programma.
+  diversi. Il meccanismo funziona fintanto che ciascuna chiamata usa degli
+  indirizzi remoti diversi. In genere questo viene fatto per i socket UDP, per
+  ottenere l'indirizzo remoto, sui sistemi per i quali non è diponibile
+  l'opzione \const{IP\_RECVDSTADDR}, non viene usata per TCP dato che su tali
+  socket si può sempre invocare \func{getsockname} una volta che si è
+  completata la connessione.
 
 
 \item[\const{SO\_TYPE}] questa opzione permette di leggere il tipo di socket
@@ -2348,23 +2352,87 @@ allora il seguente:
 \item[\const{SO\_PRIORITY}] questa opzione permette di impostare le priorità
   per tutti i pacchetti che sono inviati sul socket, prende per \param{optval}
   un valore intero. Con questa opzione il kernel usa il valore per ordinare le
-  priorità sulle code di rete,\foonote{questo richiede che sia abilitato il
+  priorità sulle code di rete,\footnote{questo richiede che sia abilitato il
     sistema di \textit{Quality of Service} disponibile con le opzioni di
     routing avanzato.} i pacchetti con priorità più alta vengono processati
   per primi, in modalità che dipendono dalla disciplina di gestione della
   coda. Nel caso di protocollo IP questa opzione permette anche di impostare i
-  valori del campo \textit{type of service} (TOF, vedi
-  sez.~\ref{sec:IP_intro}) per i pacchetti uscenti. Per impostare una priorità
+  valori del campo \textit{type of service} (noto come TOS, vedi
+  sez.~\ref{sec:IP_xxx}) per i pacchetti uscenti. Per impostare una priorità
   al di fuori dell'intervallo di valori fra 0 e 6 sono richiesti i privilegi
   di amministratore con la capability \const{CAP\_NET\_ADMIN}.
 
 \item[\const{SO\_ERROR}] questa opzione riceve un errore presente sul socket;
   può essere utilizzata soltanto con \func{getsockopt} e prende per
-  \param{optval} un valore intero. 
+  \param{optval} un valore intero.  
 \end{basedescript}
 
 
+\subsection{Le opzioni per il protocollo IPv4}
+\label{sec:sock_ipv4_options}
+
+Il secondo insieme di opzioni dei socket che tratteremo è quello relativo ai
+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
+livello da utilizzare è \const{SOL\_IP}; si è riportato un elenco di queste
+opzioni in tab.~\ref{tab:sock_opt_iplevel}.
+
+
+\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{IP\_OPTIONS}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
+                          .\\
+    \const{IP\_PKTINFO}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
+                          .\\
+    \const{IP\_RECVTOS}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
+                          .\\
+    \const{IP\_RECVTTL}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
+                          .\\
+    \const{IP\_RECVOPTS}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
+                          .\\
+    \const{IP\_RETOPTS}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
+                          .\\
+    \const{IP\_TOS}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
+                          .\\
+    \const{IP\_TTL}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
+                          .\\
+    \const{IP\_HDRINCL}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
+                          .\\
+    \const{IP\_RECVERR}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
+                          .\\
+    \const{IP\_MTU\_DISCOVER}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
+                          .\\
+    \const{IP\_MTU}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
+                          .\\
+    \const{IP\_ROUTER\_ALERT}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
+                          .\\
+    \const{IP\_MULTICAST\_TTL}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
+                          .\\
+    \const{IP\_MULTICAST\_LOOP}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
+                          .\\
+    \const{IP\_ADD\_MEMBERSHIP}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
+                          .\\
+    \const{IP\_DROP\_MEMBERSHIP}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
+                          .\\
+    \const{IP\_MULTICAST\_IF}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
+                          .\\
+   \hline
+  \end{tabular}
+  \caption{Le opzioni disponibili al livello \const{SOL\_IP}.} 
+  \label{tab:sock_opt_iplevel}
+\end{table}
+
+
+
 
 
 \section{Altre funzioni di controllo}
@@ -2427,7 +2495,7 @@ possibile intervenire; un contenuto tipico 
 
 Nella directory \texttt{/proc/sys/net/core} sono disponibili le opzioni
 generiche dei socket, descritte anche nella rispettiva pagina di
-manuale.\foonote{quella accessibile con \texttt{man 7 socket}.} Queste sono:
+manuale.\footnote{quella accessibile con \texttt{man 7 socket}.} Queste sono:
 
 \begin{basedescript}{\desclabelwidth{3cm}\desclabelstyle{\nextlinelabel}}
 \item[\texttt{rmem\_default}] imposta la dimensione di default del buffer di