-\section{Altre funzioni di controllo}
+\section{La gestione attraverso le funzioni di controllo}
\label{sec:sock_ctrl_func}
-Benché la maggior parte delle caratteristiche dei socket sia gestita
-attraverso le due funzioni \func{setsockopt} e \func{getsockopt}, alcune
-funzionalità possono essere impostate attraverso quelle che sono le funzioni
-classiche per il controllo delle proprietà dei file, cioè \func{fcntl} e
-\func{ioctl}.
+Benché la maggior parte delle caratteristiche dei socket sia gestibile con le
+funzioni \func{setsockopt} e \func{getsockopt}, alcune proprietà possono
+essere impostate attraverso le funzioni \func{fcntl} e \func{ioctl} già
+trattate in sez.~\ref{sec:file_fcntl} e sez.~\ref{sec:file_ioctl}; in
+quell'occasione abbiamo parlato di queste funzioni esclusivamente nell'ambito
+della loro applicazione a file descriptor associati a dei file normali; qui
+tratteremo invece i dettagli del loro utilizzo con file descriptor associati a
+dei socket.
-\subsection{L'uso di \func{ioctl} per i socket}
+\subsection{L'uso di \func{ioctl} e \func{fcntl} per i socket generici}
\label{sec:sock_ioctl}
-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:
+Tratteremo in questa sezione le caratteristiche specifiche delle funzioni
+\func{ioctl} e \func{fcntl} quando esse vengono utilizzate con dei socket
+generici. Quanto già detto in precedenza in sez.~\ref{sec:file_fcntl} e
+sez.~\ref{sec:file_ioctl} continua a valere; quello che tratteremo qui sono le
+operazioni ed i comandi che sono validi, o che hanno significati peculiari,
+quando queste funzioni vengono applicate a dei socket generici.
+
+Nell'elenco seguente si riportano i valori specifici che può assumere il
+secondo argomento della funzione \func{ioctl} (\param{request}, che indica il
+tipo di operazione da effettuare) quando essa viene applicata ad un socket
+generico. Nell'elenco si illustrerà anche, per ciascuna operazione, il tipo di
+dato usato come terzo argomento della funzione ed il significato che esso
+viene ad assumere. Dato che in caso di lettura questi dati vengono restituiti
+come \itindex{value~result~argument} \textit{value result argument}, con
+queste operazioni il terzo argomento deve sempre essere passato come puntatore
+ad una variabile (o struttura) precedentemente allocata. Le costanti che
+identificano le operazioni sono le seguenti:
\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{SIOCGSTAMP}] restituisce il contenuto di 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
capability \const{CAP\_KILL} si può impostare solo se stessi o il proprio
\textit{process group}.
+\item[\const{SIOCGPGRP}] legge le impostazioni presenti sul socket
+ relativamente all'eventuale processo o \itindex{process~group}
+ \textit{process group} cui devono essere inviati i segnali \const{SIGIO} e
+ \const{SIGURG}. Come per \const{SIOCSPGRP} l'argomento passato deve un
+ puntatore ad una variabile di tipo \type{pid\_t}, con lo stesso significato.
+ Qualora non sia presente nessuna impostazione verrà restituito un valore
+ nullo.
+
\item[\const{FIOASYNC}] Abilita o disabilita la modalità di I/O asincrono sul
- socket. Questa significa (vedi sez.~\ref{sec:file_asyncronous_operation})
+ socket. Questo significa (vedi sez.~\ref{sec:file_asyncronous_operation})
che verrà inviato il segnale di \const{SIGIO} (o quanto impostato con
\const{F\_SETSIG}, vedi sez.~\ref{sec:file_fcntl}) in caso di eventi di I/O
sul socket.
+\end{basedescript}
-
-\item[\const{SIOCGPGRP}] .
+Nel caso dei socket generici anche \func{fcntl} prevede un paio di comandi
+specifici; in questo caso il secondo argomento (\param{cmd}, che indica il
+comando) può assumere i due valori \const{FIOGETOWN} e \const{FIOSETOWN},
+mentre il terzo argomento dovrà essere un puntatore ad una variabile di tipo
+\type{pid\_t}. Questi due comandi sono una modalità alternativa di eseguire le
+stesse operazioni (lettura o impostazione del processo o del gruppo di
+processo che riceve i segnali) che si effettuano chiamando \func{ioctl} con
+\const{SIOCGPGRP} e \const{SIOCSPGRP}.
-\end{basedescript}
-\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.
+\subsection{L'uso di \func{ioctl} per i socket IP}
+\label{sec:sock_ioctl_IP}
+
+
+
+\subsection{L'uso di \func{ioctl} per i socket TCP e UDP}
+\label{sec:sock_ioctl_TCP_UDP}
-\subsection{L'uso di \func{sysctl} per le proprietà della rete}
-\label{sec:sock_sysctl}
-Come ultimo argomento di questa sezione tratteremo l'uso della funzione
+
+
+\section{La gestione con \func{sysctl} ed il filesystem \texttt{/proc}}
+\label{sec:sock_sysctl_proc}
+
+
+Come ultimo argomento di questo capitolo tratteremo l'uso della funzione
\func{sysctl} (che è stata introdotta nelle sue funzionalità generiche in
sez.~\ref{sec:sys_sysctl}) per quanto riguarda le sue capacità di effettuare
-impostazioni relative alle proprietà dei socket. La differenza nell'uso di
-\func{sysctl} rispetto alle funzioni viste finora è che esse consentono di
-controllare le proprietà di un singolo socket, mentre con \func{sysctl} si
+impostazioni relative alle proprietà dei socket. Dato che le stesse
+funzionalità sono controllabili direttamente attraverso il filesystem
+\texttt{/proc}, tratteremo anche di quest'ultimo.
+
+
+
+\subsection{L'uso di \func{sysctl} e \texttt{/proc} per le proprietà della
+ rete}
+\label{sec:sock_sysctl}
+
+La differenza nell'uso di \func{sysctl} e del filesystem \texttt{/proc}
+rispetto a quello delle funzioni \func{ioctl} e \func{fcntl} visto in
+sez.~\ref{sec:sock_ctrl_func} o all'uso di \func{getsockopt} e
+\func{setsockopt} è che queste funzioni consentono di controllare le proprietà
+di un singolo socket, mentre con \func{sysctl} e con \texttt{/proc} si
impostano proprietà (o valori di default) validi a livello dell'intero
-sistema.
-
-Le opzioni disponibili per le proprietà della rete sono riportate nella
-gerarchia dei valori impostabili con \func{sysctl}, sotto il nodo
-\texttt{net}, o, se acceduti tramite l'interfaccia del filesystem
-\texttt{/proc}, sotto \texttt{/proc/sys/net}. In genere sotto questa directory
-compaiono le sottodirectory (corrispondenti ad altrettanti sottonodi per
-\func{sysctl}) relative ai vari protocolli e tipi di interfacce su cui è
-possibile intervenire per effettuare impostazioni; un contenuto tipico di
-questa directory è il seguente:
+sistema, e cioè per tutti i socket.
+
+
+Le opzioni disponibili per le proprietà della rete, nella gerarchia dei valori
+impostabili con \func{sysctl}, sono riportate sotto il nodo \texttt{net}, o,
+se acceduti tramite l'interfaccia del filesystem \texttt{/proc}, sotto
+\texttt{/proc/sys/net}. In genere sotto questa directory compaiono le
+sottodirectory (corrispondenti ad altrettanti sottonodi per \func{sysctl})
+relative ai vari protocolli e tipi di interfacce su cui è possibile
+intervenire per effettuare impostazioni; un contenuto tipico di questa
+directory è il seguente:
\begin{verbatim}
/proc/sys/net/
|-- core
|-- token-ring
`-- unix
\end{verbatim}
-e sono presenti varie centinaia di diversi parametri; nel nostro caso ci
-limiteremo a vedere quelli più significativi.
+e sono presenti varie centinaia di parametri, molti dei quali non sono neanche
+documentati; nel nostro caso ci limiteremo ad illustrare quelli più
+significativi.
+
+Si tenga presente infine che se è sempre possibile utilizzare il filesystem
+\texttt{/proc} come sostituto di \func{sysctl}, dato che i valori di nodi e
+sottonodi di quest'ultima sono mappati come file e directory sotto
+\texttt{/proc/sys/}, non è vero il contrario, ed in particolare Linux consente
+di impostare alcuni parametri o leggere lo stato della rete a livello di
+sistema sotto \texttt{/proc/net}.
+
+
+\subsection{I valori di controllo per i socket generici}
+\label{sec:sock_gen_sysctl}
Nella directory \texttt{/proc/sys/net/core} sono disponibili i parametri
generici validi per tutti i socket, quelli descritti anche nella rispettiva
-pagina di manuale.\footnote{quella accessibile con \texttt{man 7 socket}.}
-I principali sono:
+pagina di manuale, accessibile con \texttt{man 7 socket}. Essi sono:
\begin{basedescript}{\desclabelwidth{3.2cm}\desclabelstyle{\nextlinelabel}}
\item[\texttt{rmem\_default}] imposta la dimensione di default del buffer di
(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
+% TODO: spiegare il bucket 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:net_ancillary_data}).
\end{basedescript}
+
+
+\subsection{I valori di controllo per i socket IP}
+\label{sec:sock_gen_sysctl}
+
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:
+socket IPv4, descritti anche nella rispettiva pagina di manuale, accessibile
+con \texttt{man 7 ip}. Essi sono:
\begin{basedescript}{\desclabelwidth{3.2cm}\desclabelstyle{\nextlinelabel}}
\item[\texttt{ip\_default\_ttl}] imposta il valore di default per il campo TTL
di compilazione del kernel con l'opzione
\texttt{CONFIG\_IP\_ALWAYS\_DEFRAG}.}
-\item[\texttt{}]
+\item[\texttt{neigh/*}] La directory contiene i valori
\end{basedescript}
% LocalWords: process SIGIO SIGURG KILL FIOASYNC SIOCGPGRP filesystem proc ttl
% LocalWords: rmem wmem message cost burst bucket filter netdev backlog optmem
% LocalWords: forward dynaddr dial autoconfig local masquerading ipfrag high
-% LocalWords: thresh low always defrag CONFIG
+% LocalWords: thresh low always defrag CONFIG SETSIG cmd FIOGETOWN FIOSETOWN
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "gapil"
%%% End:
+% LocalWords: quest'ultime neigh