Merge branch 'master' of ssh://gapil.gnulinux.it/srv/git/gapil
[gapil.git] / socket.tex
index 355845020ed8ad8a748062c80be0fcb0a9a09b8b..b01ff3aa67a6f224db9e52899f7397e46daa406e 100644 (file)
@@ -1,6 +1,6 @@
 %% socket.tex
 %%
-%% Copyright (C) 2000-2017 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2019 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
@@ -186,12 +186,12 @@ A ciascun tipo di dominio corrisponde un analogo nome simbolico, anch'esso
 associato ad una costante, che inizia invece per \texttt{AF\_} (da
 \textit{address family}) che identifica il formato degli indirizzi usati in
 quel dominio. Le pagine di manuale di Linux si riferiscono a questi indirizzi
-anche come \textit{name space}, (nome che invece il manuale delle \acr{glibc}
+anche come \textit{name space}, (nome che invece il manuale della \acr{glibc}
 riserva a quello che noi abbiamo chiamato domini) dato che identificano il
 formato degli indirizzi usati in quel dominio per identificare i capi della
 comunicazione.
 
-\begin{table}[htb]
+\begin{table}[!htb]
   \footnotesize
   \centering
   \begin{tabular}[c]{|l|l|l|l|}
@@ -222,13 +222,29 @@ comunicazione.
        \constd{AF\_ASH}      &18& Ash                           &    \\
        \constd{AF\_ECONET}   &19& Acorn Econet                  &    \\
        \constd{AF\_ATMSVC}   &20& ATM SVCs                      &    \\
+       \constd{AF\_RDS}      &21& RDS Sockets                   &    \\
        \constd{AF\_SNA}      &22& Linux SNA Project             &    \\
-       \constd{AF\_IRDA}     &23& IRDA socket (infrarossi)      &    \\
+       \constd{AF\_IRDA}     &23& IRDA socket (infrarossi)      & irda(7)    \\
        \constd{AF\_PPPOX}    &24& PPPoX socket                  &    \\
        \constd{AF\_WANPIPE}  &25& Wanpipe API socket            &    \\
        \constd{AF\_LLC}      &26& Linux LLC                     &    \\
+       \constd{AF\_IB}       &27&  Native InfiniBand address    &    \\
+       \constd{AF\_MPLS}     &28& MPSL                          &    \\
        \constd{AF\_CAN}      &29& Controller Are Network        &    \\
+       \constd{AF\_TIPC}     &30& TIPC sockets                  &    \\
        \constd{AF\_BLUETOOTH}&31& Bluetooth socket              &    \\
+       \constd{AF\_IUCV}     &32& IUCV sockets                  &    \\
+       \constd{AF\_RXRPC}    &33& RxRPC sockets                 &    \\
+       \constd{AF\_ISDN}     &34& mISDN sockets                 &    \\
+       \constd{AF\_PHONET}   &35& Phonet sockets                &    \\
+       \constd{AF\_IEEE802154}&36& IEEE802154 sockets           &    \\
+       \constd{AF\_CAIF}     &37& CAIF sockets                  &    \\
+       \constd{AF\_ALG}      &38& Algorithm sockets             &    \\
+       \constd{AF\_NFC}      &39& NFC sockets                   &    \\
+       \constd{AF\_VSOCK}    &40& vSockets                      &    \\
+       \constd{AF\_KCM}      &41& Kernel Connection Multiplexor &    \\
+       \constd{AF\_QIPCRTR}  &42& Qualcomm IPC Router           &    \\
+       \constd{AF\_SMC}      &43& smc sockets                   &    \\
        \hline
   \end{tabular}
   \caption{Famiglie di protocolli definiti in Linux.} 
@@ -250,12 +266,12 @@ seguendo la convenzione usata nelle pagine di manuale.
 
 I domini (e i relativi nomi simbolici), così come i nomi delle famiglie di
 indirizzi, sono definiti dall'\textit{header file} \headfiled{socket.h}. Un
-elenco delle famiglie di protocolli disponibili in Linux è riportato in
-tab.~\ref{tab:net_pf_names}. L'elenco indica tutti i protocolli definiti; fra
-questi però saranno utilizzabili solo quelli per i quali si è compilato il
-supporto nel kernel (o si sono caricati gli opportuni moduli), viene definita
-anche una costante \constd{AF\_MAX} che indica il valore massimo associabile
-ad un dominio.
+elenco, aggiornato alla versione 4.15, delle famiglie di protocolli
+disponibili in Linux è riportato in tab.~\ref{tab:net_pf_names}.  L'elenco
+indica tutti i protocolli definiti; fra questi però saranno utilizzabili solo
+quelli per i quali si è compilato il supporto nel kernel (o si sono caricati
+gli opportuni moduli), viene definita anche una costante \constd{AF\_MAX} che
+indica il valore massimo associabile ad un dominio.
 
 Si tenga presente che non tutte le famiglie di protocolli sono utilizzabili
 dall'utente generico, ad esempio in generale tutti i socket di tipo
@@ -278,7 +294,7 @@ seguenti costanti:\footnote{le pagine di manuale POSIX riportano solo i primi
   tre tipi, Linux supporta anche gli altri, come si può verificare nel file
   \texttt{include/linux/net.h} dei sorgenti del kernel.}
 
-\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{2.0cm}\desclabelstyle{\nextlinelabel}}
 \item[\constd{SOCK\_STREAM}] Provvede un canale di trasmissione dati
   bidirezionale, sequenziale e affidabile. Opera su una connessione con un
   altro socket. I dati vengono ricevuti e trasmessi come un flusso continuo di
@@ -309,7 +325,7 @@ impostare dei flag relativi alle caratteristiche generali del \textit{socket}
 non strettamente attinenti all'indicazione del tipo secondo i valori appena
 illustrati. Essi infatti possono essere combinati con un OR aritmetico delle
 ulteriori costanti:
-\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
 \item[\constd{SOCK\_CLOEXEC}] imposta il flag di \textit{close-on-exec} sul
   file descriptor del socket, ottenendo lo stesso effetto del flag
   \const{O\_CLOEXEC} di \func{open} (vedi tab.~\ref{tab:open_operation_flag}),
@@ -322,7 +338,6 @@ ulteriori costanti:
   tab.~\ref{tab:open_operation_flag}).
 \end{basedescript}
 
-
 Si tenga presente inoltre che non tutte le combinazioni fra una famiglia di
 protocolli e un tipo di socket sono valide, in quanto non è detto che in una
 famiglia esista un protocollo per ciascuno dei diversi stili di comunicazione
@@ -348,20 +363,32 @@ appena elencati.
      \hline
     \const{AF\_INET6}     & TCP & UDP & IPv6 & --  & -- \\
      \hline
-    \const{AF\_IPX}       & --  & --  &  --  & --  & -- \\
+    \const{AF\_IPX}       & --  & si  &  --  & --  & -- \\
      \hline
     \const{AF\_NETLINK}   & --  & si  &  si  & --  & -- \\
      \hline
     \const{AF\_X25}       & --  & --  &  --  & --  & si \\
      \hline
-    \const{AF\_AX25}      & --  & --  &  --  & --  & -- \\
-     \hline
-    \const{AF\_ATMPVC}    & --  & --  &  --  & --  & -- \\
+    \const{AF\_AX25}      & --  & si  &  si  & --  & si \\
      \hline
+%    \const{AF\_ATMPVC}    & --  & --  &  --  & --  & -- \\
+%     \hline
     \const{AF\_APPLETALK} & --  & si  &  si  & --  & -- \\
      \hline
     \const{AF\_PACKET}    & --  & si  &  si  & --  & -- \\
      \hline
+    \const{AF\_KEY}       & --  & --  &  si  & --  & -- \\
+     \hline
+    \const{AF\_IRDA}      & si  & si  &  si  & --  & si \\
+     \hline
+    \const{AF\_NETROM}    & --  & --  &  --  & --  & si \\
+     \hline
+    \const{AF\_ROSE}      & --  & --  &  --  & --  & si \\
+     \hline
+    \const{AF\_RDS}       & --  & --  &  --  & --  & si \\
+     \hline
+    \const{AF\_ECONET}    & --  & si  &  --  & --  & -- \\
+     \hline
   \end{tabular}
   \caption{Combinazioni valide di dominio e tipo di protocollo per la 
     funzione \func{socket}.}
@@ -467,16 +494,6 @@ aggiuntivo \code{uint8\_t sin\_len} (come riportato da R. Stevens in
 non è richiesto dallo standard POSIX.1g, in Linux pertanto non esiste. Il
 campo \type{sa\_family\_t} era storicamente un \ctyp{unsigned short}.
 
-\begin{figure}[!htb]
-  \footnotesize \centering
-  \begin{minipage}[c]{0.80\textwidth}
-    \includestruct{listati/sockaddr.h}
-  \end{minipage} 
-  \caption{La struttura generica degli indirizzi dei socket
-    \structd{sockaddr}.} 
-  \label{fig:sock_sa_gen_struct}
-\end{figure}
-
 Dal punto di vista del programmatore l'unico uso di questa struttura è quello
 di fare da riferimento per il casting, per il kernel le cose sono un po'
 diverse, in quanto esso usa il puntatore per recuperare il campo
@@ -495,7 +512,7 @@ sufficiente.
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{0.90\textwidth}
+  \begin{minipage}[c]{0.95\textwidth}
     \includestruct{listati/sockaddr_storage.h}
   \end{minipage} 
   \caption{La struttura generica degli indirizzi dei socket
@@ -718,8 +735,8 @@ I \textit{packet socket}, identificati dal dominio \const{AF\_PACKET}, sono
 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
-fisico. In genere comunque si preferisce usare la libreria
+implementare dei protocolli in \textit{user space}, agendo direttamente sul
+livello 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 \url{http://www.tcpdump.org/}.}  che assicura la portabilità su