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.
   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
 
 % 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}
 
 
 \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
   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
 
 \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.
 
   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
 \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
   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
 
 \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,
 
 \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.
 
   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}{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
 \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