Altre informazioni sulle {{{ioctl}}} di {{{netdevice}}}.
authorSimone Piccardi <piccardi@gnulinux.it>
Tue, 5 Sep 2006 16:02:11 +0000 (16:02 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Tue, 5 Sep 2006 16:02:11 +0000 (16:02 +0000)
sockctrl.tex
socket.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.}
   \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
 \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}] .
 \item[\const{SIOCGIFMETRIC}] .
 \item[\const{SIOCSIFMETRIC}] .
 \item[\const{SIOCGIFMTU}] .
index 64674af6c4326fba02e91bf99159d9e5e1085a72..820ae96df423ad23e5780d2c08480ca87efef8aa 100644 (file)
@@ -593,7 +593,7 @@ Il campo \var{sat\_family} deve essere sempre \const{AF\_APPLETALK}, mentre il
 campo \var{sat\_port} specifica la porta che identifica i vari servizi. Valori
 inferiori a 129 sono usati per le \textsl{porte riservate}, e possono essere
 usati solo da processi con i privilegi di amministratore o con la
 campo \var{sat\_port} specifica la porta che identifica i vari servizi. Valori
 inferiori a 129 sono usati per le \textsl{porte riservate}, e possono essere
 usati solo da processi con i privilegi di amministratore o con la
-\itindex{capabilities}\textit{capability} \const{CAP\_NET\_BIND\_SERVICE}.
+\itindex{capabilities} \textit{capability} \const{CAP\_NET\_BIND\_SERVICE}.
 L'indirizzo remoto è specificato nella struttura \var{sat\_addr}, e deve
 essere in \textit{network order} (vedi sez.~\ref{sec:sock_endianess}); esso è
 composto da un parte di rete data dal campo \var{s\_net}, che può assumere il
 L'indirizzo remoto è specificato nella struttura \var{sat\_addr}, e deve
 essere in \textit{network order} (vedi sez.~\ref{sec:sock_endianess}); esso è
 composto da un parte di rete data dal campo \var{s\_net}, che può assumere il
@@ -612,8 +612,11 @@ un'interfaccia specifica di Linux per inviare e ricevere pacchetti
 direttamente su un'interfaccia di rete, senza passare per le funzioni di
 gestione dei protocolli di livello superiore. In questo modo è possibile
 implementare dei protocolli in user space, agendo direttamente sul livello
 direttamente su un'interfaccia di rete, senza passare per le funzioni di
 gestione dei protocolli di livello superiore. In questo modo è possibile
 implementare dei protocolli in user space, agendo direttamente sul livello
-fisico. In genere comunque si preferisce usare la libreria \file{pcap}, che
-assicura la portabilità su altre piattaforme, anche se con funzionalità
+fisico. In genere comunque si preferisce usare la libreria
+\file{pcap},\footnote{la libreria è mantenuta insieme al comando
+  \cmd{tcpdump}, informazioni e documentazione si possono trovare sul sito del
+  progetto \href{http://www.tcpdump.org/}{\texttt{http://www.tcpdump.org/}}.}
+che assicura la portabilità su altre piattaforme, anche se con funzionalità
 ridotte.
 
 Questi socket possono essere di tipo \const{SOCK\_RAW} o \const{SOCK\_DGRAM}.
 ridotte.
 
 Questi socket possono essere di tipo \const{SOCK\_RAW} o \const{SOCK\_DGRAM}.
@@ -701,9 +704,9 @@ macchina ricevente, \const{PACKET\_BROADCAST} per un pacchetto di
 \itindex{broadcast} \textit{broadcast}, \const{PACKET\_MULTICAST} per un
 pacchetto inviato ad un indirizzo fisico di \itindex{multicast}
 \textit{multicast}, \const{PACKET\_OTHERHOST} per un pacchetto inviato ad
 \itindex{broadcast} \textit{broadcast}, \const{PACKET\_MULTICAST} per un
 pacchetto inviato ad un indirizzo fisico di \itindex{multicast}
 \textit{multicast}, \const{PACKET\_OTHERHOST} per un pacchetto inviato ad
-un'altra stazione (e ricevuto su un'interfaccia in modo promiscuo),
-\const{PACKET\_OUTGOING} per un pacchetto originato dalla propria macchina che
-torna indietro sul socket.
+un'altra stazione (e ricevuto su un'interfaccia in \index{modo~promiscuo} modo
+promiscuo), \const{PACKET\_OUTGOING} per un pacchetto originato dalla propria
+macchina che torna indietro sul socket.
 
 
 Si tenga presente infine che in fase di ricezione, anche se si richiede il
 
 
 Si tenga presente infine che in fase di ricezione, anche se si richiede il