From 83e1332031e23f0760030f317652976d487f613c Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Tue, 28 Mar 2006 21:59:21 +0000 Subject: [PATCH] Riorganizzazione della parte finale del capitolo sulla gestione dei socket; create due nuove sezioni, accorpando le funzioni di controllo (ora suddivise per tipo di socket) e i valori di sistema (sempre suddivisi per tipo di socket) --- fileunix.tex | 16 +++-- sockctrl.tex | 177 ++++++++++++++++++++++++++++++++++----------------- 2 files changed, 127 insertions(+), 66 deletions(-) diff --git a/fileunix.tex b/fileunix.tex index 2d297ec..8af781c 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -1197,7 +1197,8 @@ relative. In particolare le tematiche relative all'I/O asincrono e ai vari meccanismi di notifica saranno trattate in maniera esaustiva in sez.~\ref{sec:file_asyncronous_access} mentre quelle relative al \textit{file locking}\index{file!locking} saranno esaminate in -sez.~\ref{sec:file_locking}). +sez.~\ref{sec:file_locking}). L'uso di questa funzione con i socket verrà +trattato in sez.~\ref{sec:sock_ctrl_func}. Si tenga presente infine che quando si usa la funzione per determinare le modalità di accesso con cui è stato aperto il file (attraverso l'uso del @@ -1283,11 +1284,12 @@ imprevedibili o indesiderati. Data la assoluta specificità della funzione, il cui comportamento varia da dispositivo a dispositivo, non è possibile fare altro che dare una descrizione -sommaria delle sue caratteristiche; torneremo ad esaminare in seguito quelle -relative ad alcuni casi specifici (ad esempio la gestione dei terminali è -effettuata attraverso \func{ioctl} in quasi tutte le implementazioni di Unix), -qui riportiamo solo i valori di alcuni comandi che sono definiti per ogni -file: +sommaria delle sue caratteristiche; torneremo ad esaminare in +seguito\footnote{per l'uso con i socket si veda + sez.~\ref{sec:sock_ctrl_func}.} quelle relative ad alcuni casi specifici +(ad esempio la gestione dei terminali è effettuata attraverso \func{ioctl} in +quasi tutte le implementazioni di Unix), qui riportiamo solo i valori di +alcuni comandi che sono definiti per ogni file: \begin{basedescript}{\desclabelwidth{2.0cm}} \item[\const{FIOCLEX}] Imposta il flag di \textit{close-on-exec}\itindex{close-on-exec}. @@ -1298,6 +1300,8 @@ file: \end{basedescript} relativi ad operazioni comunque eseguibili anche attraverso \func{fcntl}. + + % TODO estendere la lista delle ioctl diff --git a/sockctrl.tex b/sockctrl.tex index 25ba9cf..c751d0a 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -2988,36 +2988,46 @@ sez.~\ref{sec:net_sendmsg}). -\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 @@ -3029,48 +3039,79 @@ relativa richiesta: 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 @@ -3081,13 +3122,24 @@ questa directory |-- 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 @@ -3105,17 +3157,21 @@ I principali sono: (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 @@ -3166,7 +3222,7 @@ sono: di compilazione del kernel con l'opzione \texttt{CONFIG\_IP\_ALWAYS\_DEFRAG}.} -\item[\texttt{}] +\item[\texttt{neigh/*}] La directory contiene i valori \end{basedescript} @@ -3225,9 +3281,10 @@ sono: % 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 -- 2.30.2