From bea2fb49cde45c3841bffac4769d095c82a1c40e Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Sun, 5 Aug 2018 10:03:47 +0000 Subject: [PATCH] Aggiornata lista famiglie degli indirizzi e relativa tabella dei tipi di socket. --- sockctrl.tex | 6 ++--- socket.tex | 67 ++++++++++++++++++++++++++++++++-------------------- 2 files changed, 45 insertions(+), 28 deletions(-) diff --git a/sockctrl.tex b/sockctrl.tex index d8667d2..fcfa257 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -2318,7 +2318,7 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni: \func{setsockopt} ed utilizza per \param{optval} un puntatore ad una struttura \struct{sock\_fprog} (definita in \headfile{linux/filter.h}). Questa opzione viene usata principalmente con i - socket di tipo \const{PF\_PACKET} (torneremo su questo in + socket di tipo \const{AF\_PACKET} (torneremo su questo in sez.~\ref{sec:packet_socket}) dalla libreria \texttt{libpcap} per implementare programmi di cattura dei pacchetti, e per questo tipo di applicazione è opportuno usare sempre quest'ultima.\footnote{la trattazione @@ -2347,8 +2347,8 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni: \const{SOCK\_STREAM}. \item[\constd{SO\_BSDCOMPAT}] questa opzione abilita la compatibilità con il - comportamento di BSD (in particolare ne riproduce alcuni bug). Attualmente è una - opzione usata solo per il protocollo UDP e ne è prevista la rimozione. + comportamento di BSD (in particolare ne riproduce alcuni bug). Attualmente + è una opzione usata solo per il protocollo UDP e ne è prevista la rimozione. L'opzione utilizza per \param{optval} un intero usato come valore logico. Quando viene abilitata gli errori riportati da messaggi ICMP per un socket diff --git a/socket.tex b/socket.tex index dc9f501..6cd3468 100644 --- a/socket.tex +++ b/socket.tex @@ -191,7 +191,7 @@ 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 -- 2.30.2