X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=sockctrl.tex;h=06ba55f78e96f75ffc7b0a9869a933b43f6a816a;hp=429fdecc17d973cd142c9ff6bace81e5ce9b94c8;hb=99fa5a06cd27160cf673e3483ad552d32efa2c05;hpb=9b7af600ff0f73bc946c9d160c320667c7a91347 diff --git a/sockctrl.tex b/sockctrl.tex index 429fdec..06ba55f 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -275,7 +275,7 @@ che si esegue una delle altre. Le impostazioni e lo stato del \textit{resolver} vengono mantenuti in una serie di variabili raggruppate nei campi di una apposita struttura \var{\_res} -usata da tutte queste funzioni. Essa viene definita in \headfile{resolv.h} ed +usata da tutte queste funzioni. Essa viene definita in \headfiled{resolv.h} ed è utilizzata internamente alle funzioni essendo definita come variabile globale; questo consente anche di accedervi direttamente all'interno di un qualunque programma, una volta che la sia opportunamente dichiarata come: @@ -453,8 +453,8 @@ tab.~\ref{tab:DNS_address_class}.\footnote{esisteva in realtà anche una classe Come accennato le tipologie di dati che sono mantenibili su un server DNS sono diverse, ed a ciascuna di essa corrisponde un diverso tipo di \textit{resource - record}. L'elenco delle costanti\footnote{ripreso dai file di dichiarazione - \headfile{arpa/nameser.h} e \headfile{arpa/nameser\_compat.h}.} che + record}. L'elenco delle costanti, ripreso dai file di dichiarazione + \headfiled{arpa/nameser.h} e \headfiled{arpa/nameser\_compat.h}, che definiscono i valori che si possono usare per l'argomento \param{type} per specificare il tipo di \textit{resource record} da richiedere è riportato in tab.~\ref{tab:DNS_record_type}; le costanti (tolto il \texttt{T\_} iniziale) @@ -650,7 +650,7 @@ definizione è riportata in fig.~\ref{fig:sock_hostent_struct}. \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{\textwidth} + \begin{minipage}[c]{0.80\textwidth} \includestruct{listati/hostent.h} \end{minipage} \caption{La struttura \structd{hostent} per la risoluzione dei nomi a @@ -1107,7 +1107,7 @@ memoria statica e che quindi la funzione non è rientrante. \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{\textwidth} + \begin{minipage}[c]{0.80\textwidth} \includestruct{listati/servent.h} \end{minipage} \caption{La struttura \structd{servent} per la risoluzione dei nomi dei @@ -1272,7 +1272,7 @@ strutture di tipo \struct{addrinfo} contenenti tutte le informazioni ottenute. \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{\textwidth} + \begin{minipage}[c]{0.80\textwidth} \includestruct{listati/addrinfo.h} \end{minipage} \caption{La struttura \structd{addrinfo} usata nella nuova interfaccia POSIX @@ -1280,15 +1280,16 @@ strutture di tipo \struct{addrinfo} contenenti tutte le informazioni ottenute. \label{fig:sock_addrinfo_struct} \end{figure} -Come illustrato la struttura \struct{addrinfo}, la cui definizione\footnote{la - definizione è ripresa direttamente dal file \headfile{netdb.h} in questa - struttura viene dichiarata, la pagina di manuale riporta \type{size\_t} come - tipo di dato per il campo \var{ai\_addrlen}, qui viene usata quanto previsto - dallo standard POSIX, in cui viene utilizzato \type{socklen\_t}; i due tipi - di dati sono comunque equivalenti.} è riportata in -fig.~\ref{fig:sock_addrinfo_struct}, viene usata sia in ingresso, per passare -dei valori di controllo alla funzione, che in uscita, per ricevere i -risultati. Il primo campo, \var{ai\_flags}, è una maschera binaria di bit che +Come illustrato la struttura \struct{addrinfo}, la cui definizione è riportata +in fig.~\ref{fig:sock_addrinfo_struct}, viene usata sia in ingresso, per +passare dei valori di controllo alla funzione, che in uscita, per ricevere i +risultati. La definizione è ripresa direttamente dal file \headfiled{netdb.h} +in questa struttura viene dichiarata, la pagina di manuale riporta +\type{size\_t} come tipo di dato per il campo \var{ai\_addrlen}, qui viene +usata quanto previsto dallo standard POSIX, in cui viene utilizzato +\type{socklen\_t}; i due tipi di dati sono comunque equivalenti. + +Il primo campo, \var{ai\_flags}, è una maschera binaria di bit che permettono di controllare le varie modalità di risoluzione degli indirizzi, che viene usato soltanto in ingresso. I tre campi successivi \var{ai\_family}, \var{ai\_socktype}, e \var{ai\_protocol} contengono rispettivamente la @@ -2054,8 +2055,7 @@ tab.~\ref{tab:sock_opt_socklevel}. \const{SO\_DONTROUTE}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& Non invia attraverso un gateway.\\ \const{SO\_BROADCAST}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& - Attiva o disattiva il \itindex{broadcast} - \textit{broadcast}.\\ + Attiva o disattiva il \textit{broadcast}.\\ \const{SO\_SNDBUF} &$\bullet$&$\bullet$& &\texttt{int}& Imposta dimensione del buffer di trasmissione.\\ \const{SO\_RCVBUF} &$\bullet$&$\bullet$& &\texttt{int}& @@ -2093,7 +2093,7 @@ gestione dei socket, e pertanto il loro utilizzo sarà approfondito separatamente in sez.~\ref{sec:sock_options_main}. Quello che segue è quindi soltanto un elenco più dettagliato della breve descrizione di tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni: -\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}} +\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}} \item[\const{SO\_KEEPALIVE}] questa opzione abilita un meccanismo di verifica della persistenza di una connessione associata al socket (ed è pertanto @@ -2247,12 +2247,12 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni: di routing del kernel. Prende per \param{optval} un intero usato come valore logico. -\item[\const{SO\_BROADCAST}] questa opzione abilita il \itindex{broadcast} - \textit{broadcast}; quanto abilitata i socket di tipo \const{SOCK\_DGRAM} - riceveranno i pacchetti inviati all'indirizzo di \textit{broadcast}, e - potranno scrivere pacchetti su tale indirizzo. Prende per \param{optval} un - intero usato come valore logico. L'opzione non ha effetti su un socket di - tipo \const{SOCK\_STREAM}. +\item[\const{SO\_BROADCAST}] questa opzione abilita il \textit{broadcast}; + quanto abilitata i socket di tipo \const{SOCK\_DGRAM} riceveranno i + pacchetti inviati all'indirizzo di \textit{broadcast}, e potranno scrivere + pacchetti su tale indirizzo. Prende per \param{optval} un intero usato come + valore logico. L'opzione non ha effetti su un socket di tipo + \const{SOCK\_STREAM}. \item[\const{SO\_SNDBUF}] questa opzione imposta la dimensione del buffer di trasmissione del socket. Prende per \param{optval} un intero indicante il @@ -2358,7 +2358,7 @@ programmazione dei socket. Per questo motivo faremo in questa sezione un approfondimento sul significato delle opzioni generiche più importanti. -\index{costante!{SO\_KEEPALIVE}@{{\tt {SO\_KEEPALIVE}}}|(} +\constbeg{SO\_KEEPALIVE} \subsubsection{L'opzione \const{SO\_KEEPALIVE}} La prima opzione da approfondire è \const{SO\_KEEPALIVE} che permette di @@ -2460,11 +2460,11 @@ tutte le volte che un processo figlio viene eseguito in risposta ad una connessione verrà pertanto eseguita o meno la sezione (\texttt{\small 14--17}) che esegue l'impostazione di \const{SO\_KEEPALIVE} sul socket connesso, attivando il relativo comportamento. -\index{costante!{SO\_KEEPALIVE}@{{\tt {SO\_KEEPALIVE}}}|)} +\constend{SO\_KEEPALIVE} -\index{costante!{SO\_REUSEADDR}@{{\tt {SO\_REUSEADDR}}}|(} +\constbeg{SO\_REUSEADDR} \subsubsection{L'opzione \const{SO\_REUSEADDR}} La seconda opzione da approfondire è \const{SO\_REUSEADDR}, che consente di @@ -2599,10 +2599,8 @@ Infine il quarto caso è quello in cui si vuole effettivamente ottenere un \func{bind} su un indirizzo ed una porta che sono già \textsl{legati} ad un altro socket. Questo ovviamente non ha senso per il normale traffico di rete, in cui i pacchetti vengono scambiati direttamente fra due applicazioni; ma -quando un sistema supporta il traffico in \itindex{multicast} -\textit{multicast}, in cui una applicazione invia i pacchetti a molte altre -(vedi sez.~\ref{sec:xxx_multicast}), allora ha senso che su una macchina i -pacchetti provenienti dal traffico in \itindex{multicast} \textit{multicast} +quando un sistema supporta il traffico in \textit{multicast}, allora ha senso +che su una macchina i pacchetti provenienti dal traffico in \textit{multicast} possano essere ricevuti da più applicazioni\footnote{l'esempio classico di traffico in \textit{multicast} è quello di uno streaming di dati (audio, video, ecc.), l'uso del \textit{multicast} consente in tal caso di @@ -2611,7 +2609,6 @@ possano essere ricevuti da più applicazioni\footnote{l'esempio classico di questo caso è perfettamente logico aspettarsi che sulla stessa macchina più utenti possano lanciare un programma che permetta loro di ricevere gli stessi dati.} o da diverse istanze della stessa applicazione. -\itindex{multicast} In questo caso utilizzando \const{SO\_REUSEADDR} si consente ad una applicazione eseguire \func{bind} sulla stessa porta ed indirizzo usata da @@ -2619,10 +2616,10 @@ un'altra, così che anche essa possa ricevere gli stessi pacchetti (chiaramente la cosa non ha alcun senso per i socket TCP, ed infatti in questo tipo di applicazione è normale l'uso del protocollo UDP). La regola è che quando si hanno più applicazioni che hanno eseguito \func{bind} sulla stessa porta, di -tutti pacchetti destinati ad un indirizzo di \itindex{broadcast} -\textit{broadcast} o di \itindex{multicast} \textit{multicast} viene inviata -una copia a ciascuna applicazione. Non è definito invece cosa accade qualora -il pacchetto sia destinato ad un indirizzo normale (unicast). +tutti pacchetti destinati ad un indirizzo di \textit{broadcast} o di +\textit{multicast} viene inviata una copia a ciascuna applicazione. Non è +definito invece cosa accade qualora il pacchetto sia destinato ad un indirizzo +normale (unicast). Essendo questo un caso particolare in alcuni sistemi (come BSD) è stata introdotta una opzione ulteriore, \const{SO\_REUSEPORT} che richiede che detta @@ -2640,12 +2637,11 @@ stesso indirizzo e porta solo se il programma che ha eseguito per primo primo programma a consentirlo, avendo usato fin dall'inizio \const{SO\_REUSEADDR}.} -% TODO documentare SO_REUSEPORT, vedi https://lwn.net/Articles/542260/ - +\constend{SO\_REUSEADDR} -\index{costante!{SO\_REUSEADDR}@{{\tt {SO\_REUSEADDR}}}|)} +% TODO documentare SO_REUSEPORT, vedi https://lwn.net/Articles/542260/ -\index{costante!{SO\_LINGER}@{{\tt {SO\_LINGER}}}|(} +\constbeg{SO\_LINGER} \subsubsection{L'opzione \const{SO\_LINGER}} La terza opzione da approfondire è \const{SO\_LINGER}; essa, come il nome @@ -2658,7 +2654,7 @@ dal kernel. \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{\textwidth} + \begin{minipage}[c]{0.80\textwidth} \includestruct{listati/linger.h} \end{minipage} \caption{La struttura \structd{linger} richiesta come valore dell'argomento @@ -2689,7 +2685,7 @@ che termina immediatamente la connessione. Un esempio di questo comportamento si può abilitare nel nostro client del servizio \textit{echo} utilizzando l'opzione \texttt{-r}; riportiamo in fig.~\ref{fig:TCP_echo_sixth} la sezione di codice che permette di introdurre -questa funzionalità,; al solito il codice completo è disponibile nei sorgenti +questa funzionalità; al solito il codice completo è disponibile nei sorgenti allegati. \begin{figure}[!htbp] @@ -2731,7 +2727,7 @@ secondi\footnote{questa è l'unità di misura indicata da POSIX ed adottata da completamento della trasmissione dei dati sul buffer.} pari al valore specificato in \var{l\_linger}. -\index{costante!{SO\_LINGER}@{{\tt {SO\_LINGER}}}|)} +\constend{SO\_LINGER} @@ -2746,13 +2742,13 @@ socket che usano il protocollo IPv4.\footnote{come per le precedenti opzioni livello da utilizzare è \const{SOL\_IP} (o l'equivalente \const{IPPROTO\_IP}); si è riportato un elenco di queste opzioni in tab.~\ref{tab:sock_opt_iplevel}. Le costanti indicanti le opzioni e tutte le altre costanti ad esse collegate -sono definite in \headfile{netinet/ip.h}, ed accessibili includendo detto +sono definite in \headfiled{netinet/ip.h}, ed accessibili includendo detto file. \begin{table}[!htb] \centering \footnotesize - \begin{tabular}[c]{|l|c|c|c|l|l|} + \begin{tabular}[c]{|l|c|c|c|l|p{6cm}|} \hline \textbf{Opzione}&\texttt{get}&\texttt{set}&\textbf{flag}&\textbf{Tipo}& \textbf{Descrizione}\\ @@ -2787,17 +2783,15 @@ file. \const{IP\_ROUTER\_ALERT} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& Imposta l'opzione \textit{IP router alert} sui pacchetti.\\ \const{IP\_MULTICAST\_TTL} &$\bullet$&$\bullet$& &\texttt{int}& - Imposta il TTL per i pacchetti \itindex{multicast} \textit{multicast}.\\ + Imposta il TTL per i pacchetti \textit{multicast}.\\ \const{IP\_MULTICAST\_LOOP} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& - Controlla il reinvio a se stessi dei dati di \itindex{multicast} - \textit{multicast}.\\ + Controlla il reinvio a se stessi dei dati di \textit{multicast}.\\ \const{IP\_ADD\_MEMBERSHIP} & &$\bullet$& &\struct{ip\_mreqn}& - Si unisce a un gruppo di \itindex{multicast} \textit{multicast}.\\ + Si unisce a un gruppo di \textit{multicast}.\\ \const{IP\_DROP\_MEMBERSHIP}& &$\bullet$& &\struct{ip\_mreqn}& Si sgancia da un gruppo di \textit{multicast}.\\ \const{IP\_MULTICAST\_IF} & &$\bullet$& &\struct{ip\_mreqn}& - Imposta l'interfaccia locale di un socket \itindex{multicast} - \textit{multicast}.\\ + Imposta l'interfaccia locale di un socket \textit{multicast}.\\ \hline \end{tabular} \caption{Le opzioni disponibili al livello \const{SOL\_IP}.} @@ -2807,7 +2801,7 @@ file. Le descrizioni riportate in tab.~\ref{tab:sock_opt_iplevel} sono estremamente succinte, una maggiore quantità di dettagli sulle varie opzioni è fornita nel seguente elenco: -\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}} +\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}} \item[\const{IP\_OPTIONS}] l'opzione permette di impostare o leggere le @@ -2835,7 +2829,7 @@ seguente elenco: \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{\textwidth} + \begin{minipage}[c]{0.80\textwidth} \includestruct{listati/pktinfo.h} \end{minipage} \caption{La struttura \structd{pktinfo} usata dall'opzione @@ -3028,7 +3022,6 @@ sez.~\ref{sec:net_sendmsg}). sez.~\ref{sec:IP_options}) che devono essere inoltrati al socket corrente. Può essere usata soltanto per socket di tipo raw. -\itindbeg{multicast} \item[\const{IP\_MULTICAST\_TTL}] L'opzione permette di impostare o leggere il valore del campo TTL per i pacchetti \textit{multicast} in uscita associati al socket. È importante che questo valore sia il più basso possibile, ed il @@ -3065,7 +3058,7 @@ sez.~\ref{sec:net_sendmsg}). \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{\textwidth} + \begin{minipage}[c]{0.80\textwidth} \includestruct{listati/ip_mreqn.h} \end{minipage} \caption{La struttura \structd{ip\_mreqn} utilizzata dalle opzioni dei @@ -3085,7 +3078,6 @@ sez.~\ref{sec:net_sendmsg}). % TODO chiarire quale è la struttura \struct{ip\_mreq} -\itindend{multicast} \end{basedescript} @@ -3115,7 +3107,7 @@ riportate le varie opzioni disponibili in tab.~\ref{tab:sock_opt_tcplevel}, dove sono elencate le rispettive costanti da utilizzare come valore per l'argomento \param{optname}. Dette costanti e tutte le altre costanti e strutture collegate all'uso delle opzioni TCP sono definite in -\headfile{netinet/tcp.h}, ed accessibili includendo detto file.\footnote{in +\headfiled{netinet/tcp.h}, ed accessibili includendo detto file.\footnote{in realtà questo è il file usato dalle librerie; la definizione delle opzioni effettivamente supportate da Linux si trova nel file \texttt{include/linux/tcp.h} dei sorgenti del kernel, dal quale si sono @@ -3168,8 +3160,7 @@ Le descrizioni delle varie opzioni riportate in tab.~\ref{tab:sock_opt_tcplevel} sono estremamente sintetiche ed indicative, la spiegazione del funzionamento delle singole opzioni con una maggiore quantità di dettagli è fornita nel seguente elenco: -\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}} - +\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}} \item[\const{TCP\_NODELAY}] il protocollo TCP utilizza un meccanismo di bufferizzazione dei dati uscenti, per evitare la trasmissione di tanti @@ -3353,7 +3344,7 @@ quantità di dettagli è fornita nel seguente elenco: \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{\textwidth} + \begin{minipage}[c]{0.80\textwidth} \includestruct{listati/tcp_info.h} \end{minipage} \caption{La struttura \structd{tcp\_info} contenente le informazioni sul @@ -3459,7 +3450,7 @@ quantità di dettagli è fornita nel seguente elenco: \begin{table}[!htb] \centering \footnotesize - \begin{tabular}[c]{|l|l|p{10cm}|} + \begin{tabular}[c]{|l|l|l|} \hline \textbf{Nome}&\textbf{Configurazione}&\textbf{Riferimento} \\ \hline @@ -3497,7 +3488,7 @@ ridotto di opzioni, riportate in tab.~\ref{tab:sock_opt_udplevel}; anche in questo caso per poterle utilizzare occorrerà impostare l'opportuno valore per l'argomento \param{level}, che è \const{SOL\_UDP} (o l'equivalente \const{IPPROTO\_UDP}). Le costanti che identificano dette opzioni sono -definite in \headfile{netinet/udp.h}, ed accessibili includendo detto +definite in \headfiled{netinet/udp.h}, ed accessibili includendo detto file.\footnote{come per TCP, la definizione delle opzioni effettivamente supportate dal kernel si trova in realtà nel file \texttt{include/linux/udp.h}, dal quale si sono estratte le costanti di @@ -3528,7 +3519,7 @@ file.\footnote{come per TCP, la definizione delle opzioni effettivamente Ancora una volta le descrizioni contenute tab.~\ref{tab:sock_opt_udplevel} sono un semplice riferimento, una maggiore quantità di dettagli sulle caratteristiche delle opzioni citate è quello dell'elenco seguente: -\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}} +\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}} \item[\const{UDP\_CORK}] questa opzione ha l'identico effetto dell'analoga \const{TCP\_CORK} vista in precedenza per il protocollo TCP, e quando @@ -3579,7 +3570,7 @@ come \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}} +\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}} \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 @@ -3635,7 +3626,7 @@ permette di impostare e rilevare le funzionalità delle interfacce di rete. \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{\textwidth} + \begin{minipage}[c]{0.80\textwidth} \includestruct{listati/ifreq.h} \end{minipage} \caption{La struttura \structd{ifreq} utilizzata dalle \func{ioctl} per le @@ -3650,7 +3641,7 @@ il primo campo della struttura, \var{ifr\_name} per specificare il nome dell'interfaccia su cui si vuole operare (ad esempio \texttt{eth0}, \texttt{ppp0}, ecc.), e si inseriscono (o ricevono) i valori relativi alle diversa caratteristiche e funzionalità nel secondo campo, che come si può -notare è definito come una \direct{union} proprio in quanto il suo significato +notare è definito come una \dirct{union} proprio in quanto il suo significato varia a secondo dell'operazione scelta. Si tenga inoltre presente che alcune di queste operazioni (in particolare @@ -3658,7 +3649,7 @@ quelle che modificano le caratteristiche dell'interfaccia) sono privilegiate e richiedono i privilegi di amministratore o la \textit{capability} \const{CAP\_NET\_ADMIN}, altrimenti si otterrà un errore di \errval{EPERM}. Le costanti che identificano le operazioni disponibili sono le seguenti: -\begin{basedescript}{\desclabelwidth{2.7cm}\desclabelstyle{\nextlinelabel}} +\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}} \item[\const{SIOCGIFNAME}] questa è l'unica operazione che usa il campo \var{ifr\_name} per restituire un risultato, tutte le altre lo utilizzano per indicare l'interfaccia sulla quale operare. L'operazione richiede che si @@ -3694,7 +3685,7 @@ Le costanti che identificano le operazioni disponibili sono le seguenti: \hline \const{IFF\_UP} & L'interfaccia è attiva.\\ \const{IFF\_BROADCAST} & L'interfaccia ha impostato un indirizzo di - \itindex{broadcast} \textit{broadcast} valido.\\ + \textit{broadcast} valido.\\ \const{IFF\_DEBUG} & È attivo il flag interno di debug.\\ \const{IFF\_LOOPBACK} & L'interfaccia è una interfaccia di \textit{loopback}.\\ @@ -3709,14 +3700,13 @@ Le costanti che identificano le operazioni disponibili sono le seguenti: pacchetti che vede passare, compresi quelli non direttamente indirizzati a lei).\\ \const{IFF\_NOTRAILERS}& Evita l'uso di \textit{trailer} nei pacchetti.\\ - \const{IFF\_ALLMULTI} & Riceve tutti i pacchetti di \itindex{multicast} - \textit{multicast}.\\ + \const{IFF\_ALLMULTI} & Riceve tutti i pacchetti di \textit{multicast}.\\ \const{IFF\_MASTER} & L'interfaccia è il master di un bundle per il bilanciamento di carico.\\ \const{IFF\_SLAVE} & L'interfaccia è uno slave di un bundle per il bilanciamento di carico.\\ \const{IFF\_MULTICAST} & L'interfaccia ha il supporto per il - \textit{multicast} \itindex{multicast} attivo.\\ + \textit{multicast} attivo.\\ \const{IFF\_PORTSEL} & L'interfaccia può impostare i suoi parametri hardware (con l'uso di \struct{ifmap}).\\ \const{IFF\_AUTOMEDIA} & L'interfaccia è in grado di selezionare @@ -3772,8 +3762,8 @@ Le costanti che identificano le operazioni disponibili sono le seguenti: privilegiata. \item[\const{SIOCSIFHWBROADCAST}] imposta l'indirizzo \textit{broadcast} - \itindex{broadcast} hardware dell'interfaccia al valore specificato dal - campo \var{ifr\_hwaddr}. L'operazione è privilegiata. + hardware dell'interfaccia al valore specificato dal campo + \var{ifr\_hwaddr}. L'operazione è privilegiata. \item[\const{SIOCGIFMAP}] legge alcuni parametri hardware (memoria, interrupt, canali di DMA) del driver dell'interfaccia specificata, restituendo i @@ -3783,7 +3773,7 @@ Le costanti che identificano le operazioni disponibili sono le seguenti: \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{\textwidth} + \begin{minipage}[c]{0.80\textwidth} \includestruct{listati/ifmap.h} \end{minipage} \caption{La struttura \structd{ifmap} utilizzata per leggere ed impostare i @@ -3797,19 +3787,19 @@ Le costanti che identificano le operazioni disponibili sono le seguenti: struttura \struct{ifmap}, secondo la definizione di fig.~\ref{fig:netdevice_ifmap_struct}. -\item[\const{SIOCADDMULTI}] aggiunge un indirizzo di \itindex{multicast} - \textit{multicast} ai filtri del livello di collegamento associati - dell'interfaccia. Si deve usare un indirizzo hardware da specificare - attraverso il campo \var{ifr\_hwaddr}, che conterrà l'opportuna struttura - \struct{sockaddr}; l'operazione è privilegiata. Per una modalità alternativa - per eseguire la stessa operazione si possono usare i \textit{packet socket}, - vedi sez.~\ref{sec:packet_socket}. +\item[\const{SIOCADDMULTI}] aggiunge un indirizzo di \textit{multicast} ai + filtri del livello di collegamento associati dell'interfaccia. Si deve usare + un indirizzo hardware da specificare attraverso il campo \var{ifr\_hwaddr}, + che conterrà l'opportuna struttura \struct{sockaddr}; l'operazione è + privilegiata. Per una modalità alternativa per eseguire la stessa operazione + si possono usare i \textit{packet socket}, vedi + sez.~\ref{sec:packet_socket}. -\item[\const{SIOCDELMULTI}] rimuove un indirizzo di \itindex{multicast} - \textit{multicast} ai filtri del livello di collegamento dell'interfaccia, - vuole un indirizzo hardware specificato come per \const{SIOCADDMULTI}. Anche - questa operazione è privilegiata e può essere eseguita in forma alternativa - con i \textit{packet socket}. +\item[\const{SIOCDELMULTI}] rimuove un indirizzo di \textit{multicast} ai + filtri del livello di collegamento dell'interfaccia, vuole un indirizzo + hardware specificato come per \const{SIOCADDMULTI}. Anche questa operazione + è privilegiata e può essere eseguita in forma alternativa con i + \textit{packet socket}. \item[\const{SIOCGIFTXQLEN}] permette di leggere la lunghezza della coda di trasmissione del dispositivo associato all'interfaccia specificata nel campo @@ -3839,7 +3829,7 @@ fig.~\ref{fig:netdevice_ifconf_struct}. \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{\textwidth} + \begin{minipage}[c]{0.80\textwidth} \includestruct{listati/ifconf.h} \end{minipage} \caption{La struttura \structd{ifconf}.} @@ -3853,7 +3843,7 @@ questo buffer deve essere specificata nel campo \var{ifc\_len} di \var{ifc\_req}. Qualora il buffer sia stato allocato come una stringa, il suo indirizzo potrà essere fornito usando il campo \var{ifc\_buf}.\footnote{si noti che l'indirizzo del buffer è definito in \struct{ifconf} con una - \direct{union}, questo consente di utilizzare una delle due forme a piacere.} + \dirct{union}, questo consente di utilizzare una delle due forme a piacere.} La funzione restituisce nel buffer indicato una serie di strutture \struct{ifreq} contenenti nel campo \var{ifr\_name} il nome dell'interfaccia e @@ -3939,7 +3929,7 @@ come possibile valore per il secondo argomento della funzione le costanti illustrate nell'elenco seguente; il terzo argomento della funzione, gestito come \textit{value result argument}, deve essere sempre il puntatore ad una variabile di tipo \ctyp{int}: -\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}} +\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}} \item[\const{SIOCINQ}] restituisce la quantità di dati non ancora letti presenti nel buffer di ricezione; il socket non deve essere in stato \texttt{LISTEN}, altrimenti si avrà un errore di \errval{EINVAL}. @@ -3972,7 +3962,7 @@ dalla relativa pagina di manuale accessibile con \texttt{man 7 udp}, sono quelle indicate dalle costanti del seguente elenco; come per i socket TCP il terzo argomento viene gestito come \textit{value result argument} e deve essere un puntatore ad una variabile di tipo \ctyp{int}: -\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}} +\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}} \item[\const{FIONREAD}] restituisce la dimensione in byte del primo pacchetto in attesa di ricezione, o 0 qualora non ci sia nessun pacchetto. \item[\const{TIOCOUTQ}] restituisce il numero di byte presenti nella coda di