\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}
-Oltre alle caratteristiche che si possono impostare per i socket generici, ci
-sono operazioni specifiche valide per i socket IP, e per gli altri
-protocolli.
-
-
-\subsection{L'uso di \func{ioctl} per i socket TCP e UDP}
-\label{sec:sock_ioctl_TCP_UDP}
+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}]
+\item[\const{SIOCATMARK}]
+\item[\const{SIOCOUTQ}]
+\end{basedescript}
+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}
\texttt{/proc}, le tratteremo attraverso i file presenti in quest'ultimo.
-
\subsection{L'uso di \func{sysctl} e \texttt{/proc} per le proprietà della
rete}
\label{sec:sock_sysctl}
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{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{optmem\_max}] lunghezza massima dei dati ancillari e di
controllo (vedi sez.~\ref{sec:net_ancillary_data}).
\end{basedescript}
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.2cm}\desclabelstyle{\nextlinelabel}}
-\item[\texttt{dev\_weight}] 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}] non documentato.
+\item[\texttt{lo\_cong}] valore per l'occupazione della coda di ricezione
+ sotto la quale si considera di avere una bassa congestione.
-\item[\texttt{mod\_cong}] non documentato.
+\item[\texttt{mod\_cong}] valore per l'occupazione della coda di ricezione
+ sotto la quale si considera di avere una congestione moderata.
-\item[\texttt{no\_cong}] non documentato.
+\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}] non documentato.
+\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
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). Nella
-stessa directory sono presenti altri file che consentono anche di gestire le
-altre funzionalità generiche dei vari protocolli.
+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
\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
- 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
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
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}
-I parametri specifici
-
% LocalWords: socket sez dotted decimal resolver Domain Name Service cap DNS
% LocalWords: client fig LDAP Lightweight Access Protocol NIS Information Sun
%%% mode: latex
%%% TeX-master: "gapil"
%%% End:
-% LocalWords: quest'ultime neigh dev weight cong mod somaxconn Di
-% LocalWords: Documentation
+% 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