Altre informazioni sulle {{{ioctl}}} di {{{netdevice}}}.
[gapil.git] / sockctrl.tex
index 5730bda7bba3ac62a862171d9dcecdbc30b2b00a..2946d86525124743424d14ad5b825d8deb6c01ee 100644 (file)
@@ -3227,21 +3227,103 @@ di impostare e rilevare le funzionalit
   \end{minipage}
   \caption{La struttura \structd{ifreq} utilizzata dalle \func{ioctl} per le
     operazioni di controllo sui dispositivi di rete.}
-  \label{fig:iface_ifreq_struct}
+  \label{fig:netdevice_ifreq_struct}
 \end{figure}
 
 Tutte le operazioni di questo tipo utilizzano come terzo argomento di
 \func{ioctl} il puntatore ad una struttura \struct{ifreq}, la cui definizione
-è illustrata in fig.~\ref{fig:iface_ifreq_struct}. La struttura utililzza il
-primo campo, \var{ifr\_name} per mantenere il nome dell'interfaccia su cui si
-vuole operare (ad esempio \texttt{eth0}, \texttt{ppp0}, ecc.), restituisce i
-valori nel secondo campo, che è definito appunto come una \ctyp{union}.  Le
-costanti che identificano le operazioni disponibili sono le seguenti:
-\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
-\item[\const{SIOCGIFNAME}]  .
-\item[\const{SIOCGIFINDEX}] .
-\item[\const{SIOCGIFFLAGS}] .
-\item[\const{SIOCSIFFLAGS}] .
+è illustrata in fig.~\ref{fig:netdevice_ifreq_struct}. Normalmente si utilizza
+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 carateristiche e funzionalità nel secondo campo, che come si può
+notare è definito come una \ctyp{union} proprio in quanto il suo significato
+varia a secondo dell'operazione scelta.
+
+Si tenga inoltre presente che alcune di queste operazioni (in particolare
+quelle che modificano le caratteristiche dell'interfaccia) sono privilegiate e
+richiedono i privilegi di amministatore o la \itindex{capabilities}
+\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}}
+\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
+  indichi nel campo \var{ifr\_ifindex} il valore numerico dell'\textsl{indice}
+  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}.}
+
+\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}. 
+
+\begin{table}[htb]
+  \centering
+  \footnotesize
+  \begin{tabular}[c]{|l|p{8cm}|}
+    \hline
+    \textbf{Flag} & \textbf{Significato} \\
+    \hline
+    \hline
+    \const{IFF\_UP}        & l'interfaccia è attiva.\\
+    \const{IFF\_BROADCAST} & l'interfaccia ha impostato un indirizzo di
+                             \itindex{broadcast} \textit{broadcast} valido.\\
+    \const{IFF\_DEBUG}     & è attivo il flag interno di debug.\\
+    \const{IFF\_LOOPBACK}  & l'interfaccia è una interfaccia di
+                             \textit{loopback}.\\ 
+    \const{IFF\_POINTOPOINT}& l'interfaccia è associata ad un collegamento
+                             \textsl{punto-punto}.\\ 
+    \const{IFF\_RUNNING}   & l'interfaccia ha delle risorse allocate (non può
+                             quindi essere disattivata).\\
+    \const{IFF\_NOARP}     & l'interfaccia ha il protocollo ARP disabilitato o
+                             l'indirizzo del livello di rete non è impostato.\\
+    \const{IFF\_PROMISC}   & l'interfaccia è in \index{modo~promiscuo}
+                             \textsl{modo promiscuo} (riceve cioè tutti i
+                             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\_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.\\
+    \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
+                             automaticamente il tipo di collegamento.\\
+    \const{IFF\_DYNAMIC}   & gli indirizzi assegnati all'interfaccia vengono
+                             persi quando questa viene disattivata.\\
+%    \const{IFF\_}      & .\\
+    \hline
+  \end{tabular}
+  \caption{Le costanti che identificano i vari bit della maschera binaria
+    \var{ifr\_flags} che esprime i flag di una interfaccia di rete.}
+  \label{tab:netdevice_iface_flag}
+\end{table}
+
+
+\item[\const{SIOCSIFFLAGS}] permette di impostare il valore dei flag
+  dell'interfaccia 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}] .