Breve documentazione di {{{SO_ATTACH_FILTER}}} e {{{SO_DETACH_FILTER}}}
[gapil.git] / sockctrl.tex
index 3204a753358f60bf02b3f4c960507dc6d4f380f8..a2323e3e25c1143c9bd0d0e5065bf62125466b32 100644 (file)
@@ -2301,9 +2301,23 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   usualmente utilizzata per ricevere il codice di errore, come accennato in
   sez.~\ref{sec:TCP_sock_select}, quando si sta osservando il socket con una
   \func{select} che ritorna a causa dello stesso.
-\end{basedescript}
+
+\item[\const{SO\_ATTACH\_FILTER}] questa opzione permette di agganciare ad un
+  socket un filtro di pacchetti che consente di selezionare quali pacchetti,
+  fra tutti quelli ricevuti, verranno letti. Viene usato pincipalmente con i
+  socket di tipo \const{PF\_PACKET} con la libreria \texttt{libpcap} per
+  implementare programmi di cattura dei pacchetti, torneremo su questo in
+  sez.~\ref{sec:packet_socket}.
+
+\item[\const{SO\_DETACH\_FILTER}] consente di distaccare un filtro
+  precedentemente aggiunto ad un socket.
 
 % TODO documentare SO_ATTACH_FILTER e SO_DETACH_FILTER
+% riferimenti http://www.rcpt.to/lsfcc/lsf.html
+% Documentation/networking/filter.txt
+
+
+\end{basedescript}
 
 
 \subsection{L'uso delle principali opzioni dei socket}
@@ -2924,11 +2938,12 @@ sez.~\ref{sec:net_sendmsg}).
   ricerca è disabilitata ed è responsabilità del programma creare pacchetti di
   dimensioni appropriate e ritrasmettere eventuali pacchetti persi. Se
   l'opzione viene abilitata, il kernel si incaricherà di tenere traccia
-  automaticamente della \textit{Path MTU} verso ciascuna destinazione, e
-  rifiuterà immediatamente la trasmissione di pacchetti di dimensioni maggiori
-  della MTU con un errore di \errval{EMSGSIZE}.\footnote{in caso contrario la
-    trasmissione del pacchetto sarebbe effettuata, ottenendo o un fallimento
-    successivo della trasmissione, o la frammentazione dello stesso.} 
+  automaticamente della \itindex{Maximum~Transfer~Unit} \textit{Path MTU}
+  verso ciascuna destinazione, e rifiuterà immediatamente la trasmissione di
+  pacchetti di dimensioni maggiori della MTU con un errore di
+  \errval{EMSGSIZE}.\footnote{in caso contrario la trasmissione del pacchetto
+    sarebbe effettuata, ottenendo o un fallimento successivo della
+    trasmissione, o la frammentazione dello stesso.}
 
 \item[\const{IP\_MTU}] Permette di leggere il valore della \textit{Path MTU}
   di percorso del socket.  L'opzione richiede per \param{optval} un intero che
@@ -4084,7 +4099,6 @@ accessibile con \texttt{man 7 ip}, sono i seguenti:
   quanto in caso di problemi di routing si allunga inutilmente il numero di
   ritrasmissioni.
 
-
 \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
@@ -4094,16 +4108,16 @@ accessibile con \texttt{man 7 ip}, sono i seguenti:
   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 (o con qualunque altro valore diverso dai precedenti) la
-  si abilità in modalità \textsl{prolissa}; di default la funzionalità è
-  disabilitata.
+  può essere modificato. Prende un valore intero, con 0 si disabilita la
+  funzionalità, con 1 la si abilita, con 2 (o con qualunque altro valore
+  diverso dai precedenti) la si abilità in modalità \textsl{prolissa}; di
+  default la funzionalità è disabilitata.
 
 \item[\procrelfile{/proc/sys/net/ipv4}{ip\_autoconfig}] specifica se
   l'indirizzo IP è stato configurato automaticamente dal kernel all'avvio
-  attraverso DHCP, BOOTP o RARP; è un valore logico (0 falso, 1 vero)
-  accessibile in lettura, è inutilizzato nei kernel recenti ed eliminato a
-  partire dal 2.6.18.
+  attraverso DHCP, BOOTP o RARP. Riporta un valore logico (0 falso, 1 vero)
+  accessibile solo in lettura, è inutilizzato nei kernel recenti ed eliminato
+  a partire dal kernel 2.6.18.
 
 \item[\procrelfile{/proc/sys/net/ipv4}{ip\_local\_port\_range}] imposta
   l'intervallo dei valori usati per l'assegnazione delle porte effimere,
@@ -4116,26 +4130,41 @@ accessibile con \texttt{man 7 ip}, sono i seguenti:
   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[\procrelfile{/proc/sys/net/ipv4}{ip\_no\_pmtu\_disc}] permette di
+  disabilitare per i socket \const{SOCK\_STREAM} la ricerca automatica della
+  \itindex{Maximum~Transfer~Unit} \textit{Path MTU} (vedi
+  sez.~\ref{sec:net_lim_dim} e sez.~\ref{sec:sock_ipv4_options}); prende un
+  valore logico, e di default è disabilitato (cioè la ricerca viene eseguita).
+
+  In genere si abilita questo parametro quando per qualche motivo il
+  procedimento del \itindex{Maximum~Transfer~Unit} \textit{Path MTU discovery}
+  fallisce; dato che questo può avveniera a causa di router\footnote{ad
+    esempio se si scartano tutti i pacchetti ICMP, il problema è affrontato
+    anche in sez.~1.4.4 di \cite{FwGL}.} o interfacce\footnote{ad esempio se i
+    due capi di un collegamento \textit{point-to-point} non si accordano sulla
+    stessa MTU.}  mal configurate è opportuno correggere le configurazioni,
+  perché disabilitare globalmente il procedimento con questo parametro ha
+  pesanti ripercussioni in termini di prestazioni di rete.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{ip\_always\_defrag}] fa si 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
+    tutte in fase di compilazione del kernel con l'opzione
+    \texttt{CONFIG\_IP\_ALWAYS\_DEFRAG}.} prende un valore logico e di default
+  è disabilitato. Con i kernel dalla serie 2.4 in poi la deframmentazione viene
+  attivata automaticamente quando si utilizza il sistema del netfilter, e
+  questo parametro non è più presente. 
+
+\item[\procrelfile{/proc/sys/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
+  valore \texttt{ipfrag\_low\_thresh}.
 
 \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