From cebc759ef695405a69328538834883d9d470b06e Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Mon, 11 Sep 2006 15:42:48 +0000 Subject: [PATCH] Materiale sulle {{{ioctl}}} delle interfacce di rete. --- listati/ifconf.h | 7 ++ listati/ifmap.h | 9 ++ othersock.tex | 23 ++-- sockctrl.tex | 291 ++++++++++++++++++++++++++++++++--------------- 4 files changed, 231 insertions(+), 99 deletions(-) create mode 100644 listati/ifconf.h create mode 100644 listati/ifmap.h diff --git a/listati/ifconf.h b/listati/ifconf.h new file mode 100644 index 0000000..6913f5e --- /dev/null +++ b/listati/ifconf.h @@ -0,0 +1,7 @@ +struct ifconf { + int ifc_len; /* size of buffer */ + union { + char * ifc_buf; /* buffer address */ + struct ifreq * ifc_req; /* array of structures */ + }; +}; diff --git a/listati/ifmap.h b/listati/ifmap.h new file mode 100644 index 0000000..19f5103 --- /dev/null +++ b/listati/ifmap.h @@ -0,0 +1,9 @@ +struct ifmap +{ + unsigned long mem_start; + unsigned long mem_end; + unsigned short base_addr; + unsigned char irq; + unsigned char dma; + unsigned char port; +}; diff --git a/othersock.tex b/othersock.tex index 054a308..439ccef 100644 --- a/othersock.tex +++ b/othersock.tex @@ -759,21 +759,30 @@ dei socket. \index{socket!locali|)} -\section{I socket \textit{raw}} + +\section{Altri socket} +\label{sec:socket_other} + +Tratteremo in questa sezione gli altri tipi particolari di socket supportati +da Linux, come quelli relativi a particolare protocolli di trasmissione, i +socket \textit{netlink} che definiscono una interfaccia di comunicazione con +il kernel, ed i \textit{packet socket} che consentono di inviare pacchetti +direttamente a livello delle interfacce di rete. + +\subsection{I socket \textit{raw}} \label{sec:socket_raw} Tratteremo in questa sezione i cosiddetti \textit{raw socket}, con i quali si possono \textsl{forgiare} direttamente i pacchetti a tutti i livelli dello stack dei protocolli. +\subsection{I socket \textit{netlink}} +\label{sec:socket_netlink} -\section{Altri socket} -\label{sec:socket_other} -Tratteremo in questa sezione gli altri tipi particolari di socket supportati -da Linux, come quelli relativi a particolare protocolli di trasmissione ed i -socket \textit{netlink} che definiscono una interfaccia di comunicazione con -il kernel. +\subsection{I \textit{packet socket}} +\label{sec:packet_socket} + diff --git a/sockctrl.tex b/sockctrl.tex index 4eb1639..886d6d0 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -3025,14 +3025,13 @@ trasportati su IP,\footnote{qui si sottintende IPv4, ma le opzioni per TCP e di sez.~\ref{sec:sock_generic_options} saranno comunque disponibili anche le precedenti opzioni di sez.~\ref{sec:sock_ipv4_options}.\footnote{in realtà in sez.~\ref{sec:sock_ipv4_options} si sono riportate le opzioni per IPv4, al - solito qualora si stesse utilizzando IPv6 si potrebbero utilizzare le + solito, qualora si stesse utilizzando IPv6, si potrebbero utilizzare le opzioni di quest'ultimo.} - Il protocollo che supporta il maggior numero di opzioni è TCP; per poterle utilizzare occorre specificare \const{SOL\_TCP} (o l'equivalente \const{IPPROTO\_TCP}) come valore per l'argomento \param{level}. Si sono -riportate le varie opzioni disponibili in tab.~\ref{tab:sock_opt_tcp} dove +riportate le varie opzioni disponibili in tab.~\ref{tab:sock_opt_tcp}, 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 \file{netinet/tcp.h}, ed @@ -3044,7 +3043,7 @@ accessibili includendo detto file.\footnote{in realt \begin{table}[!htb] \centering \footnotesize - \begin{tabular}[c]{|l|c|c|c|l|p{7cm}|} + \begin{tabular}[c]{|l|c|c|c|l|l|} \hline \textbf{Opzione}&\texttt{get}&\texttt{set}&\textbf{flag}&\textbf{Tipo}& \textbf{Descrizione}\\ @@ -3064,15 +3063,15 @@ accessibili includendo detto file.\footnote{in realt \const{TCP\_KEEPCNT} &$\bullet$&$\bullet$& &\texttt{int}& numero massimo di \textit{keepalive} inviati.\\ \const{TCP\_SYNCNT} &$\bullet$&$\bullet$& &\texttt{int}& - numero massimo di ritrasmissioni del pacchetto SYN.\\ + numero massimo di ritrasmissioni di un SYN.\\ \const{TCP\_LINGER2} &$\bullet$&$\bullet$& &\texttt{int}& tempo di vita in stato \texttt{FIN\_WAIT2}.\\ \const{TCP\_DEFER\_ACCEPT}&$\bullet$&$\bullet$& &\texttt{int}& ritorna da \func{accept} solo in presenza di dati.\\ \const{TCP\_WINDOW\_CLAMP}&$\bullet$&$\bullet$& &\texttt{int}& - valore della \textit{advertised window}.\\ + valore della \itindex{advertised~window} \textit{advertised window}.\\ \const{TCP\_INFO} &$\bullet$& & &\struct{tcp\_info}& - raccoglie informazioni sul socket.\\ + restituisce informazioni sul socket.\\ \const{TCP\_QUICKACK} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& abilita la modalità \textit{quickack}.\\ \const{TCP\_CONGESTION} &$\bullet$&$\bullet$&? &\texttt{?}& %??? @@ -3085,50 +3084,52 @@ accessibili includendo detto file.\footnote{in realt \end{table} Le descrizioni delle varie opzioni riportate in -tab.~\ref{tab:sock_opt_tcplevel} sono estremamente sintetiche, una maggiore -quantità di dettagli e la spiegazione delle singole opzioni è fornita nel -seguente elenco: +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{3.3cm}\desclabelstyle{\nextlinelabel}} -\item[\const{TCP\_NODELAY}] il protocollo TCP prevede, per evitare la - trasmissione di tanti pacchetti piccoli, che comporta un utilizzo non - ottimale della banda disponibile, un meccanismo di bufferizzazione dei - pacchetti uscenti controllato da un apposito algoritmo (detto - \textsl{algoritmo di Nagle}, vedi sez.\ref{sez:tcp_protocol_xxx}). Il - comportamento normale prevede invece che i pacchetti siano accumulati - fintanto che non si raggiunge una quantità di dati considerata adeguata per - eseguire la trasmissione. +\item[\const{TCP\_NODELAY}] il protocollo TCP un meccanismo di bufferizzazione + dei pacchetti uscenti, per evitare la trasmissione di tanti pacchetti + piccoli con un utilizzo non ottimale della banda disponibile. Questo + meccanismo è controllato da un apposito algoritmo (detto \textsl{algoritmo + di Nagle}, vedi sez.\ref{sez:tcp_protocol_xxx}). Il comportamento normale + del protocollo prevede che i pacchetti siano accumulati fintanto che non si + raggiunge una quantità di dati considerata adeguata per eseguire la + trasmissione. Impostando questa opzione si disabilita questo meccanismo ed i pacchetti vengono inviati immediatamente qualunque sia la loro dimensione; l'opzione - viene sovrascritta dall'eventuale impostazione \const{TCP\_CORK} (che blocca - l'invio immediato), tuttavia quando la si abilita viene sempre forzato lo - scaricamento della coda di invio (con conseguente trasmissione di tutti i - pacchetti pendenti), anche qualora si fosse già abilitata - \const{TCP\_CORK}.\footnote{si tenga presente però che \const{TCP\_CORK} può - essere specificata insieme a \const{TCP\_NODELAY} soltanto a partire dal - kernel 2.5.71.} + viene sovrascritta dall'eventuale impostazione dell'opzione + \const{TCP\_CORK}, che blocca l'invio immediato. Tuttavia quando la si + abilita viene sempre forzato lo scaricamento della coda di invio (con + conseguente trasmissione di tutti i pacchetti pendenti), anche qualora si + fosse già abilitata \const{TCP\_CORK}.\footnote{si tenga presente però che + \const{TCP\_CORK} può essere specificata insieme a \const{TCP\_NODELAY} + soltanto a partire dal kernel 2.5.71.} \item[\const{TCP\_MAXSEG}] permette di leggere e modificare il valore della - \itindex{Maximum~Segment~Size} MSS dei pacchetti uscenti, e se l'opzione è + \itindex{Maximum~Segment~Size} MSS (vedi sez.~\ref{sec:net_lim_dim} e + sez.\ref{sez:tcp_protocol_xxx}) dei pacchetti uscenti, e se l'opzione è impostata prima di stabilire la connessione, cambia anche il valore della - MSS annunciata all'altro capo della connessione. Se si specificano valori - maggiori della MTU questi verranno ignorati, inoltre TCP imporrà anche i - suoi limiti massimo e minimo per questo valore. + \itindex{Maximum~Segment~Size} MSS annunciata all'altro capo della + connessione. Se si specificano valori maggiori della MTU questi verranno + ignorati, inoltre TCP imporrà anche i suoi limiti massimo e minimo per + questo valore. \item[\const{TCP\_CORK}] quando questa opzione viene abilitata non vengono inviati pacchetti di dati fintanto che essa non venga disabilitata; a quel punto tutti i dati rimasti in coda saranno inviati in un solo pacchetto. - Questa opzione viene usata per gestire direttamente il flusso dei dati - mettendo un ``\textsl{tappo}'' al flusso di uscita, in modo ottimizzare a - mano il throughput. È molto utile anche quando si effettua il trasferimento - di dati da un file con \func{sendfile} (vedi sez.~\ref{sec:file_sendfile}), - se si vuole inserire una intestazione prima della chiamata a questa - funzione. + Questa opzione viene usata per gestire manualmente il flusso dei dati + mettendo una sorta di ``\textsl{tappo}'' (da cui il nome in inglese) al + flusso di uscita, in modo ottimizzare a mano l'uso della banda. È molto + utile anche quando si effettua il trasferimento di dati da un file con + \func{sendfile} (vedi sez.~\ref{sec:file_sendfile}), se si vuole inserire + una intestazione prima della chiamata a questa funzione. Si tenga presente che l'implementazione corrente di \const{TCP\_CORK} non consente di bloccare l'invio dei pacchetti per più di 200 millisecondi, - passati i quali i dati accumulati in cosa sanno inviati comunque. Questa + passati i quali i dati accumulati in coda sanno inviati comunque. Questa opzione non è disponibile su tutti i kernel unix-like e deve essere evitata se si vuole scrivere codice portabile. @@ -3148,26 +3149,27 @@ seguente elenco: \item[\const{TCP\_KEEPCNT}] imposta il numero totale di messaggi di \textit{keep-alive} da inviare prima di concludere che la connessione è - caduta (di nuovo vedi sez.~\ref{sec:sock_options_main}). Come la precedente - non è disponibile su tutti i kernel unix-like e deve essere evitata se si - vuole scrivere codice portabile. + caduta per assenza di risposte ad un messaggio di \textit{keep-alive} (di + nuovo vedi sez.~\ref{sec:sock_options_main}). Come la precedente non è + disponibile su tutti i kernel unix-like e deve essere evitata se si vuole + scrivere codice portabile. \item[\const{TCP\_SYNCNT}] imposta il numero di tentativi di ritrasmissione - dei segmenti SYN usati nel \itindex{three~way~handshake}\textit{three way + dei segmenti SYN usati nel \itindex{three~way~handshake} \textit{three way handshake} prima che il tentativo di connessione venga abortito (si - ricordi quanto accennato in sez.\ref{sec:TCP_func_connect}). Sovrascrive il - valore globale impostato con la \textit{sysctl} \texttt{tcp\_syn\_retries} - (vedi sez.~\ref{sec:sock_ipv4_sysctl}). Non vengono accettati valori - maggiori di 255; anche questa opzione non è standard e deve essere evitata - se si vuole scrivere codice portabile. + ricordi quanto accennato in sez.\ref{sec:TCP_func_connect}). Sovrascrive per + il singolo socket il valore globale impostato con la \textit{sysctl} + \texttt{tcp\_syn\_retries} (vedi sez.~\ref{sec:sock_ipv4_sysctl}). Non + vengono accettati valori maggiori di 255; anche questa opzione non è + standard e deve essere evitata se si vuole scrivere codice portabile. \item[\const{TCP\_LINGER2}] imposta, in numero di secondi, il tempo di sussistenza dei socket terminati nello stato \texttt{FIN\_WAIT2} (si ricordi quanto visto in sez.~\ref{sec:TCP_conn_term}).\footnote{si tenga ben presente che questa opzione non ha nulla a che fare con l'opzione \const{SO\_LINGER} che abbiamo visto in sez.~\ref{sec:sock_options_main}.} - Questa opzione consente di sovrascrivere il valore globale impostato con la - \textit{sysctl} \texttt{tcp\_fin\_timeout} (vedi + Questa opzione consente di sovrascrivere per il singolo socket il valore + globale impostato con la \textit{sysctl} \texttt{tcp\_fin\_timeout} (vedi sez.~\ref{sec:sock_ipv4_sysctl}). Anche questa opzione è da evitare se si ha a cuore la portabilità del codice. @@ -3189,6 +3191,8 @@ seguente elenco: in user space. L'opzione restituisce in una speciale struttura \struct{tcp\_info}, la cui definizione è riportata in fig.~\ref{fig:tcp_info_struct}, tutta una serie di dati relativi al socket. + Anche questa opzione deve essere evitata se si vuole scrivere codice + portabile. \begin{figure}[!htb] \footnotesize \centering @@ -3201,11 +3205,11 @@ seguente elenco: \end{figure} Con questa opzione diventa possibile ricevere una serie di informazioni -relative al socket così da poter effettuare dei controlli, senza passare -attraverso delle operazioni di lettura. Ad esempio si può verificare se un -socket è stato chiuso con una funzione analoga a quella illustrata in -fig.~\ref{fig:is_closing}, in cui si usa il campo \var{tcpi\_state} di -\struct{tcp\_info} per controllare lo stato del socket. +relative ad un socket TCP così da poter effettuare dei controlli senza dover +passare attraverso delle operazioni di lettura. Ad esempio si può verificare +se un socket è stato chiuso usando una funzione analoga a quella illustrata in +fig.~\ref{fig:is_closing}, in cui si utilizza il valore del campo +\var{tcpi\_state} di \struct{tcp\_info} per controllare lo stato del socket. \begin{figure}[!htb] \footnotesize \centering @@ -3227,8 +3231,11 @@ fig.~\ref{fig:is_closing}, in cui si usa il campo \var{tcpi\_state} di protocollo o dalle condizioni della connessione (ad esempio in presenza di timeout ritardati per i pacchetti ACK). -\item[\const{TCP\_CONGESTION}] Introdotta con il kernel 2.6.13, non è - documentata. +% TODO trattare con gli esempi di apache + +\item[\const{TCP\_CONGESTION}] questa opzione permette di controllare gli + algoritmi usati dal protocollo TCP per la gestione della connessione. É + stata introdotta con il kernel 2.6.13, e non è documentata. \end{basedescript} @@ -3268,9 +3275,17 @@ sono un semplice riferimento, una maggiore quantit caratteristiche delle opzioni citate è quello dell'elenco seguente: \begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}} -\item[\const{UDP\_CORK}] Introdotta con il kernel 2.5.44 +\item[\const{UDP\_CORK}] questa opzione ha l'identico effetto dell'analoga + \const{TCP\_CORK} vista in precedenza per il protocollo TCP, e quando + abilitata consente di accumulare i dati in uscita su un solo pacchetto che + verrà inviato una volta che la si disabiliti. L'opzione è stata introdotta + con il kernel 2.5.44, e non deve essere utilizzata in codice che vuole + essere portabile. -\item[\const{UDP\_ENCAP}] Introdotta con il kernel 2.5.67. +\item[\const{UDP\_ENCAP}] Questa opzione permette di gestire l'incapsulazione + dei dati nel protocollo UDP. L'opzione è stata introdotta con il kernel + 2.5.67, e non è documentata. Come la precedente è specifica di Linux e non + deve essere utilizzata in codice portabile. \end{basedescript} @@ -3360,9 +3375,9 @@ processo che riceve i segnali) che si effettuano chiamando \func{ioctl} con Benché non strettamente attinenti alla gestione dei socket, vale la pena di trattare qui l'interfaccia di accesso a basso livello ai dispositivi di rete che viene appunto fornita attraverso la funzione \texttt{ioctl}. Questa non è -attinente a caratteristiche specifiche di un qualche protocollo, ma si applica a -tutti i socket, indipendentemente dal tipo o famiglia dello stesso, e permette -di impostare e rilevare le funzionalità delle interfacce di rete. +attinente a caratteristiche specifiche di un qualche protocollo, ma si applica +a tutti i socket, indipendentemente da tipo e famiglia degli stessi, e +permette di impostare e rilevare le funzionalità delle interfacce di rete. \begin{figure}[!htb] \footnotesize \centering @@ -3398,21 +3413,22 @@ sono le seguenti: dell'interfaccia, e restituisce il relativo nome in \var{ifr\_name}. Il kernel infatti assegna ad ogni interfaccia un numero progressivo, detto - appunto \textit{interface index}, che è quello che effettivamente la - identifica nelle operazioni a basso livello, il nome dell'interfaccia è - soltanto una etichetta associata a detto \textsl{indice}, che permette di - rendere più comprensibile l'indicazione dell'interfaccia all'interno dei - comandi; si può ottenere un elenco delle interfacce che contiene anche il - valore del relativo indice usando il comando \cmd{ip link}. + appunto \index{interface index} \textit{interface index}, che è quello che + effettivamente la identifica nelle operazioni a basso livello, il nome + dell'interfaccia è soltanto una etichetta associata a detto \textsl{indice}, + che permette di rendere più comprensibile l'indicazione dell'interfaccia + all'interno dei comandi; si può ottenere un elenco delle interfacce che + contiene anche il valore del relativo indice usando il comando \cmd{ip + link}. \item[\const{SIOCGIFINDEX}] restituisce nel campo \var{ifr\_ifindex} il valore numerico dell'indice dell'interfaccia specificata con \var{ifr\_name}, è in sostanza l'operazione inversa di \const{SIOCGIFNAME}. \item[\const{SIOCGIFFLAGS}] permette di ottenere nel campo \var{ifr\_flags} il - valore corrente dei flag dell'interfaccia specificata. Il valore restituito - è una maschera binaria i cui bit sono identificabili attraverso le varie - costanti di tab.~\ref{tab:netdevice_iface_flag}. + valore corrente dei flag dell'interfaccia specificata (con \var{ifr\_name}). + Il valore restituito è una maschera binaria i cui bit sono identificabili + attraverso le varie costanti di tab.~\ref{tab:netdevice_iface_flag}. \begin{table}[htb] \centering @@ -3463,28 +3479,115 @@ sono le seguenti: \item[\const{SIOCSIFFLAGS}] permette di impostare il valore dei flag - dell'interfaccia attraverso il valore della maschera binaria da passare nel + dell'interfaccia specificata (sempre con \var{ifr\_name}, non staremo a + ripeterlo oltre) attraverso il valore della maschera binaria da passare nel campo \var{ifr\_flags}, che può essere ottenuta con l'OR aritmetico delle costanti di tab.~\ref{tab:netdevice_iface_flag}; questa operazione è privilegiata. -\item[\const{SIOCGIFMETRIC}] . -\item[\const{SIOCSIFMETRIC}] . -\item[\const{SIOCGIFMTU}] . -\item[\const{SIOCSIFMTU}] . -\item[\const{SIOCGIFHWADDR}] . -\item[\const{SIOCSIFHWADDR}] . -\item[\const{SIOCSIFHWBROADCAST}] . -\item[\const{SIOCGIFMAP}] . -\item[\const{SIOCSIFMAP}] . -\item[\const{SIOCADDMULTI}] . -\item[\const{SIOCDELMULTI}] . -\item[\const{SIOCGIFTXQLEN}] . -\item[\const{SIOCSIFTXQLEN}] . -\item[\const{SIOCSIFNAME}] . -\item[\const{SIOCGIFCONF}] . +\item[\const{SIOCGIFMETRIC}] permette di leggere il valore della metrica del + dispositivo associato all'interfaccia specificata nel campo + \var{ifr\_metric}, attualmente non ancora implementato, restituisce sempre 0 + come valore. + +\item[\const{SIOCSIFMETRIC}] permette di impostare il valore della metrica del + dispositivo al valore specificato nel campo \var{ifr\_metric}, attualmente + non ancora implementato, restituisce un errore di \errval{EOPNOTSUPP}. + +\item[\const{SIOCGIFMTU}] permette di leggere il valore della + \itindex{Maximum~Transfer~Unit} \textit{Maximum Transfer Unit} del + dispositivo nel campo \var{ifr\_mtu}. + +\item[\const{SIOCSIFMTU}] permette di impostare il valore della + \itindex{Maximum~Transfer~Unit} \textit{Maximum Transfer Unit} del + dispositivo al valore specificato campo \var{ifr\_mtu}. L'operazione è + privilegiata, e si tenga presente che impostare un valore troppo basso può + causare un blocco del kernel. + +\item[\const{SIOCGIFHWADDR}] permette di leggere il valore dell'indirizzo + hardware del dispositivo associato all'interfaccia nel campo + \var{ifr\_hwaddr}; questo viene restituito come struttura \struct{sockaddr} + in cui il campo \var{sa\_family} contiene un valore \texttt{ARPHRD\_*} + indicante il tipo di indirizzo ed il campo \var{sa\_data} il valore binario + dell'indirizzo hardware a partire dal byte 0. + +\item[\const{SIOCSIFHWADDR}] permette di impostare il valore dell'indirizzo + hardware del dispositivo associato all'interfaccia attraverso il valore + della struttura \struct{sockaddr} (con lo stesso formato illustrato per + \const{SIOCGIFHWADDR}) passata nel campo \var{ifr\_hwaddr}. L'operazione è + 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. + +\item[\const{SIOCGIFMAP}] legge alcuni parametri hardware (memoria, interrupt, + canali di DMA) del driver dell'interfaccia specificata, restituendo i + relativi valori nel campo \var{ifr\_map}; quest'ultimo contiene una + struttura di tipo \struct{ifmap}, la cui definizione è illustrata in + fig.~\ref{fig:netdevice_ifmap_struct}. + +\begin{figure}[!htb] + \footnotesize \centering + \begin{minipage}[c]{15cm} + \includestruct{listati/ifmap.h} + \end{minipage} + \caption{La struttura \structd{ifmap} utilizzata per leggere ed impostare i + valori dei parametri hardware di un driver di una interfaccia.} + \label{fig:netdevice_ifmap_struct} +\end{figure} + +\item[\const{SIOCSIFMAP}] imposta i parametri hardware del driver + dell'interfaccia specificata, restituendo i relativi valori nel campo + \var{ifr\_map}. Come per \const{SIOCGIFMAP} questo deve essere passato come + 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{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{SIOCGIFTXQLEN}] permette di leggere la lunghezza della coda di + trasmissione del dispositivo associato all'interfaccia specificata nel campo + \var{ifr\_qlen}. + +\item[\const{SIOCSIFTXQLEN}] permette di impostare il valore della lunghezza + della coda di trasmissione del dispositivo associato all'interfaccia, questo + deve essere specificato nel campo \var{ifr\_qlen}. L'operazione è + privilegiata. + +\item[\const{SIOCSIFNAME}] consente di cambiare il nome dell'interfaccia + indicata da \var{ifr\_name} utilizzando il nuovo nome specificato nel campo + \var{ifr\_rename}. + \end{basedescript} +Una ulteriore operazione che consente di ricavare le caratteristiche delle +interfacce di rete, che però è disponibile soltanto per socket della famiglia +\const{AF\_INET} (vale ad dire per socket IPv4), è \const{SIOCGIFCONF}. In +questo caso l'utente dovrà passare come argomento una struttura +\struct{ifconf}, definita in fig.~\ref{fig:netdevice_ifconf_struct}. + +\begin{figure}[!htb] + \footnotesize \centering + \begin{minipage}[c]{15cm} + \includestruct{listati/ifconf.h} + \end{minipage} + \caption{La struttura \structd{ifconf}.} + \label{fig:netdevice_ifconf_struct} +\end{figure} + + \subsection{L'uso di \func{ioctl} per i socket TCP e UDP} @@ -3855,8 +3958,6 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: \item[\texttt{tcp\_wmem}] \end{basedescript} - - % 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 @@ -3911,11 +4012,6 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: % 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 SETSIG cmd FIOGETOWN FIOSETOWN - -%%% Local Variables: -%%% mode: latex -%%% TeX-master: "gapil" -%%% End: % LocalWords: quest'ultime neigh dev weight cong mod somaxconn Di SIOCINQ DoS % LocalWords: Documentation SIOCATMARK SIOCOUTQ FIONREAD TIOCOUTQ Denial work % LocalWords: netfilter scheduler mark ARP DHCP BOOTP RARP nonlocal sniffer is @@ -3932,4 +4028,15 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: % LocalWords: abort overflow adv win app bic convergence dsack ecn fack frto % LocalWords: intvl probes latency orphans l'ACK SYNQ HSIZE tw buckets mem rfc % LocalWords: orphan reordering collapse sack stdurg synack syncookies recycle -% LocalWords: timestamps scaling vegas avoid westwood +% LocalWords: timestamps scaling vegas avoid westwood tcpi l'incapsulazione + + + + + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: "gapil" +%%% End: +% LocalWords: metric EOPNOTSUPP mtu hwaddr ARPHRD interrupt DMA map qlen +% LocalWords: rename ifconf -- 2.30.2