Merge branch 'master' of ssh://gapil.gnulinux.it/srv/git/gapil
[gapil.git] / socket.tex
index dc9f501a51abfda4d49dcda5cb0afc9ebbc8a403..b01ff3aa67a6f224db9e52899f7397e46daa406e 100644 (file)
@@ -1,6 +1,6 @@
 %% socket.tex
 %%
 %% socket.tex
 %%
-%% Copyright (C) 2000-2018 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",
 %% 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
 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.
 
 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|}
   \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\_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\_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\_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\_CAN}      &29& Controller Are Network        &    \\
+       \constd{AF\_TIPC}     &30& TIPC sockets                  &    \\
        \constd{AF\_BLUETOOTH}&31& Bluetooth socket              &    \\
        \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.} 
        \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
 
 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
 
 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.}
 
   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
 \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:
 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}),
 \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}
 
   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
 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
      \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
      \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
      \hline
+%    \const{AF\_ATMPVC}    & --  & --  &  --  & --  & -- \\
+%     \hline
     \const{AF\_APPLETALK} & --  & si  &  si  & --  & -- \\
      \hline
     \const{AF\_PACKET}    & --  & si  &  si  & --  & -- \\
      \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}.}
   \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}.
 
 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
 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{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
     \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
 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
 \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