-
-\item[\const{IP\_MINTTL}] L'opzione, introdotta con il kernel 2.6.34, imposta
- un valore minimo per il campo \textit{Time to Live} dei pacchetti associati
- al socket su cui è attivata, che se non rispettato ne causa lo scarto
- automatico. L'opzione è nata per implementare
- l'\href{http://www.ietf.org/rfc/rfc5082.txt}{RFC~5082} che la prevede come
- forma di protezione per i router che usano il protocollo BGP poiché questi,
- essendo in genere adiacenti, possono, impostando un valore di 255, scartare
- automaticamente tutti gli eventuali pacchetti falsi creati da un attacco a
- questo protocollo, senza doversi curare di verificarne la
- validità.\footnote{l'attacco viene in genere portato per causare un
- \textit{Denial of Service} aumentando il consumo di CPU del router nella
- verifica dell'autenticità di un gran numero di pacchetti di pacchetti
- falsi; questi, arrivando da sorgenti diverse da un router adiacente, non
- potrebbero più avere un TTL di 255 anche qualora questo fosse stato il
- valore di partenza, e l'impostazione dell'opzione consente di scartarli
- senza carico aggiuntivo sulla CPU (che altrimenti dovrebbe calcolare una
- checksum).}
-
-\item[\const{IP\_HDRINCL}] Se abilitata l'utente deve fornire lui stesso
- l'intestazione IP in cima ai propri dati. L'opzione è valida soltanto per
- socket di tipo \const{SOCK\_RAW}, e quando utilizzata eventuali valori
- impostati con \const{IP\_OPTIONS}, \const{IP\_TOS} o \const{IP\_TTL} sono
- ignorati. In ogni caso prima della spedizione alcuni campi
- dell'intestazione vengono comunque modificati dal kernel, torneremo
- sull'argomento in sez.~\ref{sec:socket_raw}
-
-\item[\const{IP\_RECVERR}] Questa è una opzione introdotta con i kernel della
- serie 2.2.x, ed è specifica di Linux. Essa permette di usufruire di un
- meccanismo affidabile per ottenere un maggior numero di informazioni in caso
- di errori. Se l'opzione è abilitata tutti gli errori generati su un socket
- vengono memorizzati su una coda, dalla quale poi possono essere letti con
- \func{recvmsg} (vedi sez.~\ref{sec:net_sendmsg}) come messaggi ancillari
- (torneremo su questo in sez.~\ref{sec:net_ancillary_data}) di tipo
- \const{IP\_RECVERR}. L'opzione richiede per \param{optval} un intero usato
- come valore logico e non è applicabile a socket di tipo
- \const{SOCK\_STREAM}.
-
-\itindbeg{Maximum~Transfer~Unit~(MTU)}
-\item[\const{IP\_MTU\_DISCOVER}] Questa è una opzione introdotta con i kernel
- della serie 2.2.x, ed è specifica di Linux. L'opzione permette di scrivere
- o leggere le impostazioni della modalità usata per la determinazione della
- \textit{Path Maximum Transfer Unit} (vedi sez.~\ref{sec:net_lim_dim}) del
- socket. L'opzione prende per \param{optval} un valore intero che indica la
- modalità usata, da specificare con una delle costanti riportate in
- tab.~\ref{tab:sock_ip_mtu_discover}.
-
- \begin{table}[!htb]
- \centering
- \footnotesize
- \begin{tabular}[c]{|l|r|p{7cm}|}
- \hline
- \multicolumn{2}{|c|}{\textbf{Valore}}&\textbf{Significato} \\
- \hline
- \hline
- \const{IP\_PMTUDISC\_DONT}&0& Non effettua la ricerca dalla \textit{Path
- MTU}.\\
- \const{IP\_PMTUDISC\_WANT}&1& Utilizza il valore impostato per la rotta
- utilizzata dai pacchetti (dal comando
- \texttt{route}).\\
- \const{IP\_PMTUDISC\_DO} &2& Esegue la procedura di determinazione
- della \textit{Path MTU} come richiesto
- dall'\href{http://www.ietf.org/rfc/rfc1191.txt}{RFC~1191}.\\
- \hline
- \end{tabular}
- \caption{Valori possibili per l'argomento \param{optval} di
- \const{IP\_MTU\_DISCOVER}.}
- \label{tab:sock_ip_mtu_discover}
- \end{table}
-
- Il valore di default applicato ai socket di tipo \const{SOCK\_STREAM} è
- determinato dal parametro \texttt{ip\_no\_pmtu\_disc} (vedi
- sez.~\ref{sec:sock_sysctl}), mentre per tutti gli altri socket di default la
- 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.}
-
-\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
- conterrà il valore della \textit{Path MTU} in byte. Questa è una opzione
- introdotta con i kernel della serie 2.2.x, ed è specifica di Linux.
-
- È tramite questa opzione che un programma può leggere, quando si è avuto un
- errore di \errval{EMSGSIZE}, il valore della MTU corrente del socket. Si
- tenga presente che per poter usare questa opzione, oltre ad avere abilitato
- la scoperta della \textit{Path MTU}, occorre che il socket sia stato
- esplicitamente connesso con \func{connect}.
-
- Ad esempio con i socket UDP si potrà ottenere una stima iniziale della
- \textit{Path MTU} eseguendo prima una \func{connect} verso la destinazione,
- e poi usando \func{getsockopt} con questa opzione. Si può anche avviare
- esplicitamente il procedimento di scoperta inviando un pacchetto di grosse
- dimensioni (che verrà scartato) e ripetendo l'invio coi dati aggiornati. Si
- tenga infine conto che durante il procedimento i pacchetti iniziali possono
- essere perduti, ed è compito dell'applicazione gestirne una eventuale
- ritrasmissione.
-
-\itindend{Maximum~Transfer~Unit~(MTU)}
-
-\item[\const{IP\_ROUTER\_ALERT}] Questa è una opzione introdotta con i
- kernel della serie 2.2.x, ed è specifica di Linux. Prende per
- \param{optval} un intero usato come valore logico. Se abilitata
- passa tutti i pacchetti con l'opzione \textit{IP Router Alert} (vedi
- sez.~\ref{sec:IP_options}) che devono essere inoltrati al socket
- corrente. Può essere usata soltanto per socket di tipo raw.
-
-\itindbeg{multicast}
-\item[\const{IP\_MULTICAST\_TTL}] L'opzione permette di impostare o leggere il
- valore del campo TTL per i pacchetti \textit{multicast} in uscita associati
- al socket. È importante che questo valore sia il più basso possibile, ed il
- default è 1, che significa che i pacchetti non potranno uscire dalla rete
- locale. Questa opzione consente ai programmi che lo richiedono di superare
- questo limite. L'opzione richiede per
- \param{optval} un intero che conterrà il valore del TTL.
-
-\item[\const{IP\_MULTICAST\_LOOP}] L'opzione consente di decidere se i dati
- che si inviano su un socket usato con il \textit{multicast} vengano ricevuti
- anche sulla stessa macchina da cui li si stanno inviando. Prende per
- \param{optval} un intero usato come valore logico.
-
- In generale se si vuole che eventuali client possano ricevere i dati che si
- inviano occorre che questa funzionalità sia abilitata (come avviene di
- default). Qualora però non si voglia generare traffico per dati che già sono
- disponibili in locale l'uso di questa opzione permette di disabilitare
- questo tipo di traffico.
-
-\item[\const{IP\_ADD\_MEMBERSHIP}] L'opzione consente di unirsi ad gruppo di
- \textit{multicast}, e può essere usata solo con \func{setsockopt}.
- L'argomento \param{optval} in questo caso deve essere una struttura di tipo
- \struct{ip\_mreqn}, illustrata in fig.~\ref{fig:ip_mreqn_struct}, che
- permette di indicare, con il campo \var{imr\_multiaddr} l'indirizzo del
- gruppo di \textit{multicast} a cui ci si vuole unire, con il campo
- \var{imr\_address} l'indirizzo dell'interfaccia locale con cui unirsi al
- gruppo di \textit{multicast} e con \var{imr\_ifindex} l'indice
- dell'interfaccia da utilizzare (un valore nullo indica una interfaccia
- qualunque).
-
- Per compatibilità è possibile utilizzare anche un argomento di tipo
- \struct{ip\_mreq}, una precedente versione di \struct{ip\_mreqn}, che
- differisce da essa soltanto per l'assenza del campo \var{imr\_ifindex}.
-
-\begin{figure}[!htb]
- \footnotesize \centering
- \begin{minipage}[c]{\textwidth}
- \includestruct{listati/ip_mreqn.h}
- \end{minipage}
- \caption{La struttura \structd{ip\_mreqn} utilizzata dalle opzioni dei
- socket per le operazioni concernenti l'appartenenza ai gruppi di
- \textit{multicast}.}
- \label{fig:ip_mreqn_struct}
-\end{figure}
-
-\item[\const{IP\_DROP\_MEMBERSHIP}] Lascia un gruppo di \textit{multicast},
- prende per \param{optval} la stessa struttura \struct{ip\_mreqn} (o
- \struct{ip\_mreq}) usata anche per \const{IP\_ADD\_MEMBERSHIP}.
-
-\item[\const{IP\_MULTICAST\_IF}] Imposta l'interfaccia locale per l'utilizzo
- del \textit{multicast}, ed utilizza come \param{optval} le stesse strutture
- \struct{ip\_mreqn} o \struct{ip\_mreq} delle due precedenti opzioni.
-
-% TODO chiarire quale è la struttura \struct{ip\_mreq}
-
-
-\itindend{multicast}