From 178bf99c6bcb8b3ce3b95082212cb380988bb193 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Sun, 26 Feb 2006 20:02:20 +0000 Subject: [PATCH] Un po' di materiale sulle sysctl dei socket, e qualche correzione sulle indicizzazioni. --- ipc.tex | 2 +- prochand.tex | 2 +- sockctrl.tex | 118 ++++++++++++++++++++++++++++++++++++++++++++------- 3 files changed, 104 insertions(+), 18 deletions(-) diff --git a/ipc.tex b/ipc.tex index 135bed7..58b8077 100644 --- a/ipc.tex +++ b/ipc.tex @@ -1693,7 +1693,7 @@ indirizzato a lui. I semafori non sono meccanismi di intercomunicazione diretta come quelli (pipe, fifo e code di messaggi) visti finora, e non consentono di scambiare dati fra processi, ma servono piuttosto come meccanismi di sincronizzazione o -di protezione per le \textsl{sezioni critiche}\index{sezioni~critiche} del +di protezione per le \textsl{sezioni critiche} \index{sezione~critica} del codice (si ricordi quanto detto in sez.~\ref{sec:proc_race_cond}). Un semaforo è uno speciale contatore, mantenuto nel kernel, che permette, a diff --git a/prochand.tex b/prochand.tex index c92f737..77fde66 100644 --- a/prochand.tex +++ b/prochand.tex @@ -3231,7 +3231,7 @@ file, o nell'accesso a meccanismi di intercomunicazione come la memoria condivisa. In questi casi, se non si dispone della possibilità di eseguire atomicamente le operazioni necessarie, occorre che quelle parti di codice in cui si compiono le operazioni sulle risorse condivise (le cosiddette -\textsl{sezioni critiche}\index{sezioni~critiche}) del programma, siano +\textsl{sezioni critiche}\index{sezione~critica}) del programma, siano opportunamente protette da meccanismi di sincronizzazione (torneremo su queste problematiche di questo tipo in cap.~\ref{cha:IPC}). 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} -- 2.30.2