\item[\const{IP\_TTL}] L'opzione consente di leggere o impostare il campo
- \textit{Time to Live} dell'intestazione IP (vedi sez.~\ref{sec:IP_header}).
- Il campo TTL è di 8 bit e l'opzione richiede che \param{optval} sia un
- intero, che ne conterrà il valore.
+ \textit{Time to Live} dell'intestazione IP (vedi sez.~\ref{sec:IP_header})
+ per tutti i pacchetti associati al socket. Il campo TTL è di 8 bit e
+ l'opzione richiede che \param{optval} sia un intero, che ne conterrà il
+ valore.
\item[\const{IP\_HDRINCL}] Se abilitata l'utente deve fornire lui stesso
\func{ioctl}.
-\subsection{L'uso di \func{fcntl} per i socket}
-\label{sec:sock_fcntl}
+\subsection{L'uso di \func{ioctl} per i socket}
+\label{sec:sock_ioctl}
-Abbiamo già trattato l'uso di \func{fcntl} in sez.~\ref{sec:file_fcntl}, dove
+Abbiamo già trattato l'uso di \func{ioctl} in sez.~\ref{sec:file_ioctl}, dove
però ne abbiamo descritto le funzionalità nell'ambito della sua applicazione a
file descriptor associati a file normali; tratteremo qui invece il suo uso
specifico quando la si impiega su file descriptor associati a dei socket.
+Quanto utilizzata con socket generici i valori utilizzabili per il secondo
+argomento della funzione (\param{request}, che indica il tipo di operazione
+richiesta) sono quelli riportati nel seguente elenco, il terzo argomento della
+funzione (quello usato per inviare o ricevere i dati) dipende dalla richiesta
+effettuata, ed è anch'esso illustrato nell'elenco in corrispondenza alla
+relativa richiesta:
+\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
+\item[\const{SIOCGSTAMP}] restituisce una struttura \struct{timeval} con la
+ marca temporale dell'ultimo pacchetto ricevuto sul socket, questa operazione
+ può essere utilizzata per effettuare delle misurazioni precise del tempo di
+ andata e ritorno\footnote{il cosiddetto \itindex{round~trip~time}
+ \textit{round trip time}.} dei pacchetti sulla rete.
+\item[\const{SIOCSPGRP}] imposta il processo o il \itindex{process~group}
+ \textit{process group} a cui inviare i segnali \const{SIGIO} e
+ \const{SIGURG} quando viene completata una operazione di I/O asincrono o
+ arrivano dei dati urgenti. Il terzo argomento deve essere un puntatore ad una
+ variabile di tipo \type{pid\_t}; un valore positivo indica direttamente il
+ \acr{pid} del processo, mentre un valore negativo indica (col valore
+ assoluto) il \textit{process group}. Senxa privilegi di amministratore o la
+ capability \const{CAP\_KILL} si può impostare solo se stessi o il proprio
+ \textit{process group}.
+
+\item[\const{FIOASYNC}] .
+
+
+\item[\const{SIOCGPGRP}] .
+
+\end{basedescript}
-\subsection{L'uso di \func{ioctl} per i socket}
-\label{sec:sock_ioctl}
-Come per \func{fcntl} abbiamo trattato l'uso di \func{ioctl} in
-sez.~\ref{sec:file_ioctl}, dove ne abbiamo descritto le funzionalità
+\subsection{L'uso di \func{fcntl} per i socket}
+\label{sec:sock_fcntl}
+
+
+Come per \func{ioctl} abbiamo trattato l'uso di \func{fcntl} in
+sez.~\ref{sec:file_fcntl}, dove ne abbiamo descritto le funzionalità
nell'ambito dell'applicazione su file normali; tratteremo qui il suo uso
specifico quando la si impiega su file descriptor associati a dei socket.
pagina di manuale.\footnote{quella accessibile con \texttt{man 7 socket}.}
I principali sono:
-\begin{basedescript}{\desclabelwidth{3cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{3.2cm}\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}]
-\item[\texttt{message\_burst}]
-\item[\texttt{netdev\_max\_backlog}]
-\item[\texttt{optmem\_max}]
+\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 ucket filter e questa opzione
+\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:TCP_ancillary_data}).
\end{basedescript}
Nella directory \texttt{/proc/sys/net/ipv4} sono disponibili i parametri per i
socket IPv4, descritti anche nella rispettiva pagina di
manuale.\footnote{quella accessibile con \texttt{man 7 ip}.} I principali
sono:
-\begin{basedescript}{\desclabelwidth{3cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{3.2cm}\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.
+
+\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).
+
+\item[\texttt{ip\_dynaddr}] Abilita la riscrittura 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 la si
+ abilità in modalità \textsl{prolissa}.
+
+\item[\texttt{ip\_autoconfig}] non documentato
+
+\item[\texttt{ip\_local\_port\_range}] imposta l'intervallo dei valori usati
+ per l'assegnazione delle porte effimere, permette cioè di modificare i
+ valori illustrati in fig.~\ref{fig:TCP_port_alloc}; prende due valori
+ numerici, che indicano gli estremi dell'intervallo. Si abbia cura di non
+ definire un intervallo che si sovrappone a quello delle porte usate per il
+ \itindex{masquerading} \textit{masquerading}, il kernel può gestire la
+ sovrapposizione, ma si avrà una perdita di prestazioni. Si imposti sempre un
+ valore iniziale maggiore di 1024 (o meglio ancora di 4096) per evitare
+ conflitti con le porte usate dai servizi noti.
+
\item[\texttt{ip\_no\_pmtu\_disc}] imposta la discliplina di ricerca della
\textit{Path MTU} (vedi sez.~\ref{sec:net_lim_dim} e
sez.~\ref{sec:sock_ipv4_options}).
+
+\item[\texttt{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[\texttt{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[\texttt{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[\texttt{}]
+
+
\end{basedescript}