X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=sockctrl.tex;h=a307c197b5f32b11ac4b459e7427d4e1938e9a76;hb=dd741fcfa876c0a4c26a72da0035b7cfea8202e2;hp=25ba9cf8dbf6de86ee437f8018696a3069737608;hpb=8ced433bddd1ff509441df4b012c806633acabbf;p=gapil.git diff --git a/sockctrl.tex b/sockctrl.tex index 25ba9cf..a307c19 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 + \itindex{Round~Trip~Time} \textit{Round Trip Time} cui abbiamo già + accennato in sez.~\ref{sec:net_tcp}.} 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,80 @@ 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} + +Oltre alle caratteristiche che si possono impostare per i socket generici, ci +sono operazioni specifiche valide per i socket IP, e per gli altri +protocolli. + + +\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}, le tratteremo attraverso i file presenti in 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 +3123,27 @@ 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}, dove sono presenti dei file che non +corrispondono a nessun nodi di \func{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: +\subsection{I valori di controllo per i socket generici} +\label{sec:sock_gen_sysctl} + +Nella directory \texttt{/proc/sys/net/core} sono presenti i file +corrispondenti ai parametri generici validi per tutti i socket. Quelli +descritti anche nella pagina di manuale, accessibile con \texttt{man 7 socket} +sono i seguenti: \begin{basedescript}{\desclabelwidth{3.2cm}\desclabelstyle{\nextlinelabel}} \item[\texttt{rmem\_default}] imposta la dimensione di default del buffer di @@ -3105,17 +3161,45 @@ 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} -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: +Oltre a questi si trovano alcuni ulteriori file, la cui documentazione si +trova nel file ... + +\begin{basedescript}{\desclabelwidth{3.2cm}\desclabelstyle{\nextlinelabel}} +\item[\texttt{dev\_weight}] + +\item[\texttt{lo\_cong}] + +\item[\texttt{mod\_cong}] + +\item[\texttt{no\_cong}] + +\item[\texttt{no\_cong\_thresh}] + +\item[\texttt{somaxconn}] + +\end{basedescript} + + +\subsection{I valori di controllo per il protocollo IPv4} +\label{sec:sock_gen_sysctl} + +Nella directory \texttt{/proc/sys/net/ipv4} sono presenti i file che +corrispondono ai parametri dei socket che usano il protocollo IPv4, relativi +quindi sia alle caratteristiche di IP, che a quelle degli altri protocolli che +vengono usati all'interno di quest'ultimo (come ICMP, TCP e UDP). Nella +stessa directory sono presenti altri file che consentono anche di gestire le +altre funzionalità generiche dei vari protocolli. + +I file che consentono di controllare le caratteristiche specifiche del +protocollo IP in quanto tale, descritti anche nella pagina di manuale +accessibile con \texttt{man 7 ip}, sono i seguenti: \begin{basedescript}{\desclabelwidth{3.2cm}\desclabelstyle{\nextlinelabel}} \item[\texttt{ip\_default\_ttl}] imposta il valore di default per il campo TTL @@ -3166,12 +3250,16 @@ 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} + +I parametri specifici + + % LocalWords: socket sez dotted decimal resolver Domain Name Service cap DNS % LocalWords: client fig LDAP Lightweight Access Protocol NIS Information Sun % LocalWords: like netgroup Switch Solaris glibc libc uclib NSS tab shadow uid @@ -3225,9 +3313,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 dev weight cong mod somaxconn