X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=sockctrl.tex;h=c751d0abdc5fe19c51745f87bac2bde0d7b9d124;hb=83b2cb23f7f2026b0d487f9d9461c25d39d7031c;hp=5dc63a4689eede3f90e2dd4c81134c6b167eb2a3;hpb=ff05163a86ad2a9810c030dcd0434190d9fe16eb;p=gapil.git diff --git a/sockctrl.tex b/sockctrl.tex index 5dc63a4..c751d0a 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -2988,36 +2988,47 @@ 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 \const{SIGURG} quando viene completata una operazione di I/O asincrono o @@ -3028,44 +3039,79 @@ relativa richiesta: capability \const{CAP\_KILL} si può impostare solo se stessi o il proprio \textit{process group}. -\item[\const{FIOASYNC}] . +\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. 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} +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}. -\item[\const{SIOCGPGRP}] . -\end{basedescript} -\subsection{L'uso di \func{fcntl} per i socket} -\label{sec:sock_fcntl} - +\subsection{L'uso di \func{ioctl} per i socket IP} +\label{sec:sock_ioctl_IP} -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{sysctl} per le proprietà della rete} -\label{sec:sock_sysctl} +\subsection{L'uso di \func{ioctl} per i socket TCP e UDP} +\label{sec:sock_ioctl_TCP_UDP} + + + + + +\section{La gestione con \func{sysctl} ed il filesystem \texttt{/proc}} +\label{sec:sock_sysctl_proc} -Come ultimo argomento di questa sezione tratteremo l'uso della funzione + +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 @@ -3076,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 @@ -3100,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 @@ -3161,18 +3222,12 @@ 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} - -%%% Local Variables: -%%% mode: latex -%%% TeX-master: "gapil" -%%% End: - % 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 @@ -3226,4 +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