X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=sockctrl.tex;h=38722cdb269fe98e8cf069d5f9d5dba962cc546b;hp=8abb56af36ffc510f5e164a8ae03dcf06364a08c;hb=178bf99c6bcb8b3ce3b95082212cb380988bb193;hpb=b0596da50d9b010d7251ae72cc908c3d2642d899 diff --git a/sockctrl.tex b/sockctrl.tex index 8abb56a..38722cd 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -2817,9 +2817,10 @@ ottenibile rispettivamente dai campi \var{ipi\_addr} e \var{ipi\_ifindex} di \item[\const{IP\_TTL}] L'opzione consente di leggere o impostare il campo - \textit{Time to Live} dell'intestazione IP (vedi sez.~\ref{sec:IP_header}). - Il campo TTL è di 8 bit e l'opzione richiede che \param{optval} sia un - intero, che ne conterrà il valore. + \textit{Time to Live} dell'intestazione IP (vedi sez.~\ref{sec:IP_header}) + per tutti i pacchetti associati al socket. Il campo TTL è di 8 bit e + l'opzione richiede che \param{optval} sia un intero, che ne conterrà il + valore. \item[\const{IP\_HDRINCL}] Se abilitata l'utente deve fornire lui stesso @@ -2936,20 +2937,50 @@ classiche per il controllo delle propriet \func{ioctl}. -\subsection{L'uso di \func{fcntl} per i socket} -\label{sec:sock_fcntl} +\subsection{L'uso di \func{ioctl} per i socket} +\label{sec:sock_ioctl} -Abbiamo già trattato l'uso di \func{fcntl} in sez.~\ref{sec:file_fcntl}, dove +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: +\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{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 + arrivano dei dati urgenti. Il terzo argomento deve essere un puntatore ad una + variabile di tipo \type{pid\_t}; un valore positivo indica direttamente il + \acr{pid} del processo, mentre un valore negativo indica (col valore + assoluto) il \textit{process group}. Senxa privilegi di amministratore o la + capability \const{CAP\_KILL} si può impostare solo se stessi o il proprio + \textit{process group}. + +\item[\const{FIOASYNC}] . + + +\item[\const{SIOCGPGRP}] . + +\end{basedescript} -\subsection{L'uso di \func{ioctl} per i socket} -\label{sec:sock_ioctl} -Come per \func{fcntl} abbiamo trattato l'uso di \func{ioctl} in -sez.~\ref{sec:file_ioctl}, dove ne abbiamo descritto le funzionalità +\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. @@ -2992,7 +3023,7 @@ 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: -\begin{basedescript}{\desclabelwidth{3cm}\desclabelstyle{\nextlinelabel}} +\begin{basedescript}{\desclabelwidth{3.2cm}\desclabelstyle{\nextlinelabel}} \item[\texttt{rmem\_default}] imposta la dimensione di default del buffer di lettura (cioè per i dati in ingresso) dei socket. \item[\texttt{rmem\_max}] imposta la dimensione massima che si può assegnare al @@ -3003,20 +3034,75 @@ I principali sono: \item[\texttt{wmem\_max}] imposta la dimensione massima che si può assegnare al buffer di uscita dei socket attraverso l'uso dell'opzione \const{SO\_SNDBUF}. -\item[\texttt{message\_cost}] -\item[\texttt{message\_burst}] -\item[\texttt{netdev\_max\_backlog}] -\item[\texttt{optmem\_max}] +\item[\texttt{message\_cost}, \texttt{message\_burst}] impostano i valori + delle impostazioni del \itindex{bucket~filter} \textit{bucket filter} + (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 +\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:TCP_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: -\begin{basedescript}{\desclabelwidth{3cm}\desclabelstyle{\nextlinelabel}} +\begin{basedescript}{\desclabelwidth{3.2cm}\desclabelstyle{\nextlinelabel}} + +\item[\texttt{ip\_default\_ttl}] imposta il valore di default per il campo TTL + (vedi sez.~\ref{sec:IP_header}) di tutti i pacchetti uscenti. Il valore può + essere modificato per il singolo socket con l'opzione + \const{IP\_TTL}. Prende un valore intero. + +\item[\texttt{ip\_forward}] abilita l'inoltro dei pacchetti da una interfaccia + ad un altra, e può essere impostato anche per la singola + interfaccia. Prende un valore logico (0 disabilita, diverso da zero abilita). + +\item[\texttt{ip\_dynaddr}] Abilita la riscrittura automatica degli indirizzi + associati ad un socket quando una interfaccia cambia indirizzo. Viene usato + per le interfacce usate nei collegamenti in dial-up, il cui indirizzo IP + viene assegnato dinamicamente dal provider, e può essere modificato. Un + valore nullo disabilita la funzionalità, con 1 la si abilita, con 2 la si + abilità in modalità \textsl{prolissa}. + +\item[\texttt{ip\_autoconfig}] non documentato + +\item[\texttt{ip\_local\_port\_range}] imposta l'intervallo dei valori usati + per l'assegnazione delle porte effimere, permette cioè di modificare i + valori illustrati in fig.~\ref{fig:TCP_port_alloc}; prende due valori + numerici, che indicano gli estremi dell'intervallo. Si abbia cura di non + definire un intervallo che si sovrappone a quello delle porte usate per il + \itindex{masquerading} \textit{masquerading}, il kernel può gestire la + sovrapposizione, ma si avrà una perdita di prestazioni. Si imposti sempre un + valore iniziale maggiore di 1024 (o meglio ancora di 4096) per evitare + conflitti con le porte usate dai servizi noti. + \item[\texttt{ip\_no\_pmtu\_disc}] imposta la discliplina di ricerca della \textit{Path MTU} (vedi sez.~\ref{sec:net_lim_dim} e sez.~\ref{sec:sock_ipv4_options}). + +\item[\texttt{ipfrag\_high\_thresh}] limite massimo (espresso in numero di + byte) sui pacchetti IP frammentati presenti in coda; quando questo valore + viene raggiunta la coda viene ripulita fino al valore + \texttt{ipfrag\_low\_thresh}. + +\item[\texttt{ipfrag\_low\_thresh}] soglia bassa (specificata in byte) cui + viene riportata la coda dei pacchetti IP frammentati quando si raggiunge il + valore \texttt{ipfrag\_high\_thresh}. + +\item[\texttt{ip\_always\_defrag}] se abilitato (prende un intero come valore + logico) tutti i pacchetti IP frammentati saranno riassemblati, anche in caso + in successivo immediato inoltro.\footnote{introdotto con il kernel 2.2.13, + nelle versioni precedenti questo comportamento poteva essere solo in fase + di compilazione del kernel con l'opzione + \texttt{CONFIG\_IP\_ALWAYS\_DEFRAG}.} + +\item[\texttt{}] + + \end{basedescript}