particolare è possibile conoscere l'interfaccia su cui è stato ricevuto un
pacchetto (nel campo \var{ipi\_ifindex}),\footnote{in questo campo viene
restituito il valore numerico dell'indice dell'interfaccia,
- sec.~\ref{sec:sock_ioctl_netdevice}.} l'indirizzo locale da esso
+ sez.~\ref{sec:sock_ioctl_netdevice}.} l'indirizzo locale da esso
utilizzato (nel campo \var{ipi\_spec\_dst}) e l'indirizzo remoto dello
stesso (nel campo \var{ipi\_addr}).
\end{figure}
Per eseguire questa operazione occorrerà allocare preventivamente un buffer di
-contentente un vettore di strutture \struct{ifreq}. La dimensione (in byte) di
+contenente un vettore di strutture \struct{ifreq}. La dimensione (in byte) di
questo buffer deve essere specificata nel campo \var{ifc\_len} di
\struct{ifconf}, mentre il suo indirizzo andrà specificato nel campo
\var{ifc\_req}. Qualora il buffer sia stato allocato come una stringa, il suo
il codice completo è fornito nei sorgenti allegati alla guida.
Il programma inizia (\texttt{\small 7--11}) con la creazione del socket
-necessario ad eseguire l'operazone, dopo di che si inizializzano
+necessario ad eseguire l'operazione, dopo di che si inizializzano
opportunamente (\texttt{\small 13--14}) i valori della struttura
\struct{ifconf} indicando la dimensione del buffer ed il suo
indirizzo;\footnote{si noti come in questo caso si sia specificato l'indirizzo
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
+ 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.
\begin{basedescript}{\desclabelwidth{3.5cm}\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.
+ (vedi sez.~\ref{sec:IP_header}) di tutti i pacchetti uscenti, stabilendo
+ così il numero massimo di router che i pacchetti possono attraversare. Il
+ valore può essere modificato anche per il singolo socket con l'opzione
+ \const{IP\_TTL}. Prende un valore intero, ma dato che il campo citato è di
+ 8 bit hanno senso solo valori fra 0 e 255. Il valore di default è 64, e non
+ ci normalmente non c'è nessuna necessità di modificarlo,\footnote{l'unico
+ motivo sarebbe per raggiungere macchine estremamente ``lontane'' in
+ termini di \textit{hop}, ma è praticamente } aumentare il valore è una
+ pratica poco gentile, in quanto in caso di problemi di routing si allunga
+ inutilmente il numero di ritrasmissioni.
+
\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
caratteristiche specifiche del protocollo TCP, elencati anche nella rispettiva
pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
\begin{basedescript}{\desclabelwidth{3.9cm}\desclabelstyle{\nextlinelabel}}
-\item[\texttt{tcp\_abort\_on\_overflow}]
-\item[\texttt{tcp\_adv\_win\_scale}]
+
+\item[\texttt{tcp\_abort\_on\_overflow}] è un valore logico (disabilitato di
+ default) che indica di azzerare le connessioni quando il programma che le
+ riceve è troppo lento ed incapace di accettarle. Questo consente di
+ recuperare le connessioni se si è avuto un eccesso dovuto ad un qualche
+ picco di traffico, ma ovviamente va a discapito dei client che interrogano
+ il server. Pertanto è da abilitare soltanto quando si è sicuri che non è
+ possibile ottimizzare il server in modo che sia in grado di accettare
+ connessioni più rapidamente.
+
+\item[\texttt{tcp\_adv\_win\_scale}] questo valore indica al kernel quanto
+ spazio all'interno del buffer associato a un socket (quello impostato con
+ \texttt{tcp\_rmem}) deve essere utilizzato per la
+
\item[\texttt{tcp\_app\_win}]
+
+\item[\texttt{tcp\_bic}]
\item[\texttt{tcp\_bic\_low\_window}]
\item[\texttt{tcp\_bic\_fast\_convergence}]
-\item[\texttt{tcp\_dsack}]
-\item[\texttt{tcp\_ecn}]
+
+\item[\texttt{tcp\_dsack}] Abilita il supporto definito
+ nell'\href{http://www.ietf.org/rfc/rfc2884.txt}{RFC~2884} per il
+ \textit{Duplicate SACK}.\footnote{si indica con SACK (\textit{Selective
+ Acknowledgement}) un'opzione TCP, definita
+ nell'\href{http://www.ietf.org/rfc/rfc2018.txt}{RFC~2018}, usata per dare
+ un \textit{acknowledgement} unico su blocchi di pacchetti non contigui.}
+
+\item[\texttt{tcp\_ecn}] Abilita il meccanismo della \textit{Explicit
+ Congestion Notification} (o ECN) definito
+ nell'\href{http://www.ietf.org/rfc/rfc2884.txt}{RFC~2884}. Si tenga presente
+ che se si abilita questa opzione si possono avere dei malfunzionamenti
+ apparentemente casuali dipendenti dalla destizione, dovuti al fatto che
+ alcuni vecchi router non supportano il meccanismo ed alla sua attivazione
+ scartano i relativi pacchetti.\\
+
\item[\texttt{tcp\_fack}]
\item[\texttt{tcp\_fin\_timeout}] specifica il numero di secondi (il default è
\item[\texttt{tcp\_orphan\_retries}]
\item[\texttt{tcp\_reordering}]
\item[\texttt{tcp\_retrans\_collapse}]
-\item[\texttt{tcp\_retries1}]
+
+\item[\texttt{tcp\_retries1}] imposta il massimo numero di volte che
+ protocollo tenterà la ritrasmissione si un pacchetto su una connessione
+ stabilita prima di fare ricorso ad ulteriori sforzi che coinvolgano anche il
+ livello di rete. Passato questo numero di ritrasmissioni verrà fatto
+ eseguire al livello di rete un tentativo di aggiornamento della rotta verso
+ la destinazione prima di eseguire ogni successiva ritrasmissione.
\item[\texttt{tcp\_retries2}] imposta il numero di tentativi di ritrasmissione
- (il default è 15) di un pacchetto inviato su una connessione già stabilita
- per il quale non si sia ricevuto una risposta di ACK (si veda anche quanto
- illustrato in sez.~\ref{sec:TCP_server_crash}).
+ di un pacchetto inviato su una connessione già stabilita per il quale non si
+ sia ricevuto una risposta di ACK (si veda anche quanto illustrato in
+ sez.~\ref{sec:TCP_server_crash}). Il valore default è 15, che significa un
+ tempo variabile fra 13 e 30 minuti; questo non corrisponde a quanto
+ richiesto nell'\href{http://www.ietf.org/rfc/rfc1122.txt}{RFC~1122} dove è
+ indicato un massimo di 100 secondi, che però è un valore considerato troppo
+ basso.
\item[\texttt{tcp\_rfc1337}]
-\item[\texttt{tcp\_rmem}]
+
+\item[\texttt{tcp\_rmem}]
+
+
\item[\texttt{tcp\_sack}]
\item[\texttt{tcp\_stdurg}]
\item[\texttt{tcp\_synack\_retries}]
\item[\texttt{tcp\_tw\_recycle}]
\item[\texttt{tcp\_tw\_reuse}]
\item[\texttt{tcp\_window\_scaling}]
+
+
\item[\texttt{tcp\_vegas\_cong\_avoid}]
\item[\texttt{tcp\_westwood}]
\item[\texttt{tcp\_wmem}]
% LocalWords: metric EOPNOTSUPP mtu hwaddr ARPHRD interrupt DMA map qlen silly
% LocalWords: rename ifconf syndrome dell'ACK FTP ACCEPTFILTER advanced reno
% LocalWords: congestion control Networking cubic CUBIC highspeed HSTCP htcp
-% LocalWords: HTCP hybla HYBLA scalable SCALABLE
+% LocalWords: HTCP hybla HYBLA scalable SCALABLE ifc req iflist access ntoa
%%% Local Variables:
%%% mode: latex