%% build.tex
%%
-%% Copyright (C) 1999-2017 Simone Piccardi. Permission is granted to copy,
+%% Copyright (C) 1999-2018 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",
%% errors.tex
%%
-%% Copyright (C) 2000-2017 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2018 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",
%% fileadv.tex
%%
-%% Copyright (C) 2000-2017 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2018 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",
%% filedir.tex
%%
-%% Copyright (C) 2000-2017 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2018 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",
%% fileio.tex (merge fileunix.tex - filestd.tex)
%%
-%% Copyright (C) 2000-2017 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2018 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",
%% gapil.tex
%%
-%% Copyright (C) 2000-2017 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2018 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.3 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
\begin{quote}
- Copyright \copyright\ 2000-2017 Simone Piccardi. Permission is granted to
+ Copyright \copyright\ 2000-2018 Simone Piccardi. Permission is granted to
copy, distribute and/or modify this document under the terms of the GNU Free
Documentation License, Version 1.3 or any later version published by the
Free Software Foundation; with the Invariant Sections being ``Un preambolo''
%% intro.tex
%%
-%% Copyright (C) 2000-2017 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2018 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",
%% ipc.tex
%%
-%% Copyright (C) 2000-2017 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2018 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",
--- /dev/null
+struct ip_mreq_source {
+ struct in_addr imr_multiaddr; /* IP multicast group address */
+ struct in_addr imr_interface; /* IP address of local interface */
+ struct in_addr imr_sourceaddr; /* IP address of multicast source */
+};
--- /dev/null
+struct ip_msfilter {
+ struct in_addr imsf_multiaddr; /* IP multicast group address */
+ struct in_addr imsf_interface; /* IP address of local interface */
+ uint32_t imsf_fmode; /* Filter-mode */
+ uint32_t imsf_numsrc; /* Number of sources in the following array */
+ struct in_addr imsf_slist[1]; /* Array of source addresses */
+};
%% macro.tex
%%
-%% Copyright (C) 2000-2017 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2018 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",
%% netlayer.tex
%%
-%% Copyright (C) 2000-2017 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2018 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",
%% network.tex
%%
-%% Copyright (C) 2000-2017 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2018 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",
%% othersock.tex
%%
-%% Copyright (C) 2004-2017 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2004-2018 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",
%% preambolo.tex
%%
-%% Copyright (C) 2000-2017 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2018 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",
%% pref.tex
%%
-%% Copyright (C) 2000-2017 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2018 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",
%% process.tex
%%
-%% Copyright (C) 2000-2017 by Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2018 by 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",
%% prochand.tex
%%
-%% Copyright (C) 2000-2017 by Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2018 by 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",
%% ringraziamenti.tex
%%
-%% Copyright (C) 2000-2017 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2018 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",
%% session.tex
%%
-%% Copyright (C) 2000-2017 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2018 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",
%% signal.tex
%%
-%% Copyright (C) 2000-2017 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2018 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",
%% sockadv.tex
%%
-%% Copyright (C) 2004-2017 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2004-2018 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",
%% sockctrl.tex
%%
-%% Copyright (C) 2004-2017 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2004-2018 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 "Prefazione",
Ricomincia a ricevere dati di \textit{multicast} per una sorgente.\\
\hline
\end{tabular}
- \caption{Le opzioni disponibili al livello \const{SOL\_IP}.}
+ \caption{Le opzioni disponibili al livello \const{IPPROTO\_IP}.}
\label{tab:sock_opt_iplevel}
\end{table}
\begin{minipage}[c]{0.70\textwidth}
\includestruct{listati/ip_mreqn.h}
\end{minipage}
- \caption{La struttura \structd{ip\_mreqn} utilizzata dalle opzioni dei
- socket per le operazioni concernenti l'appartenenza ai gruppi di
+ \caption{La struttura \structd{ip\_mreqn} utilizzata per unirsi a un gruppo di
\textit{multicast}.}
\label{fig:ip_mreqn_struct}
\end{figure}
- Per compatibilità è possibile utilizzare anche un argomento di tipo
- \struct{ip\_mreq}, una precedente versione di \struct{ip\_mreqn}, che
- differisce da essa soltanto per l'assenza del campo \var{imr\_ifindex}.
+Questa struttura è presente a partire dal kernel 2.2, per compatibilità è
+possibile utilizzare anche un argomento di tipo \struct{ip\_mreq}, presente
+fino dal kernel 1.2, che differisce da essa soltanto per l'assenza del campo
+\var{imr\_ifindex}; il kernel riconosce il tipo di struttura in base alla
+differente dimensione passata in \param{optlen}.
+\item[\constd{IP\_ADD\_SOURCE\_MEMBERSHIP}] L'opzione consente di unirsi ad
+ gruppo di \textit{multicast}, ricevendo i dati solo da una sorgente
+ specifica; come \const{IP\_ADD\_MEMBERSHIP} può essere usata solo con
+ \func{setsockopt}.
-\item[\constd{IP\_BLOCK\_SOURCE}] TODO
+\begin{figure}[!htb]
+ \footnotesize \centering
+ \begin{minipage}[c]{0.70\textwidth}
+ \includestruct{listati/ip_mreq_source.h}
+ \end{minipage}
+ \caption{La struttura \structd{ip\_mreqn} utilizzata per unirsi a un gruppo di
+ \textit{multicast} per una specifica sorgente.}
+ \label{fig:ip_mreq_source_struct}
+\end{figure}
+
+L'argomento \param{optval} in questo caso è una struttura
+\struct{ip\_mreq\_source} illustrata in fig.~\ref{fig:ip_mreq_source_struct},
+dove il campo \var{imr\_multiaddr} è l'indirizzo del gruppo di
+\textit{multicast}, il campo \var{imr\_interface} l'indirizzo dell'interfaccia
+locale che deve essere usata per aggiungersi al gruppo di \textit{multicast} e
+il campo \var{imr\_sourceaddr} l'indirizzo della sorgente da cui
+l'applicazione vuole ricevere i dati. L'opzione può essere ripetuta più volte
+per collegarsi a diverse sorgenti.
+
+\item[\constd{IP\_BLOCK\_SOURCE}] Questa opzione, disponibile dal kernel
+ 2.4.22, consente di smettere di ricevere dati di \textit{multicast} dalla
+ sorgente (e relativo gruppo) specificati dalla struttura
+ \struct{ip\_mreq\_source} (vedi fig.~\ref{fig:ip_mreq_source_struct})
+ passata come argomento \param{optval}. L'opzione è utilizzabile solo se si è
+ già registrati nel gruppo di \textit{multicast} indicato con un precedente
+ utilizzo di \const{IP\_ADD\_MEMBERSHIP} o
+ \const{IP\_ADD\_SOURCE\_MEMBERSHIP}.
\item[\constd{IP\_DROP\_MEMBERSHIP}] Lascia un gruppo di \textit{multicast},
prende per \param{optval} la stessa struttura \struct{ip\_mreqn} (o
- \struct{ip\_mreq}) usata anche per \const{IP\_ADD\_MEMBERSHIP}.
+ \struct{ip\_mreq}) usata per \const{IP\_ADD\_MEMBERSHIP} (vedi
+ fig.~\ref{fig:ip_mreqn_struct}).
+
+\item[\constd{IP\_DROP\_SOURCE\_MEMBERSHIP}] Lascia un gruppo di
+ \textit{multicast} per una specifica sorgente, prende per \param{optval} la
+ stessa struttura \struct{ip\_mreq\_source} usata per
+ \const{IP\_ADD\_SOURCE\_MEMBERSHIP} (vedi
+ fig.~\ref{fig:ip_mreq_source_struct}). Se ci si è registrati per più
+ sorgenti nello stesso gruppo, si continuerà a ricevere dati sulle altre. Per
+ smettere di ricevere dati da tutte le sorgenti occorre usare l'opzione
+ \const{IP\_LEAVE\_GROUP}.
+
+\item[\constd{IP\_FREEBIND}] Se abilitata questa opzione, disponibile dal
+ kernel 2.4, consente di usare \func{bind} anche su un indirizzo IP non
+ locale o che ancora non è stato assegnato. Questo permette ad una
+ applicazione di mettersi in ascolto su un socket prima che l'interfaccia
+ sottostante o l'indirizzo che questa deve usare sia stato configurato. È
+ l'equivalente a livello di singolo socket dell'uso della \textit{sysctl}
+ \texttt{ip\_nonlocal\_bind} che vedremo in
+ sez.~\ref{sec:sock_ipv4_sysctl}. Prende per
+ \param{optval} un intero usato come valore logico.
+
+\item[\constd{IP\_HDRINCL}] Se viene abilitata questa opzione, presente dal
+ kernel 2.0, l'utente deve fornire lui stesso l'intestazione del protocollo
+ IP in testa ai propri dati. L'opzione è valida soltanto per socket di tipo
+ \const{SOCK\_RAW}, e quando utilizzata eventuali valori impostati con
+ \const{IP\_OPTIONS}, \const{IP\_TOS} o \const{IP\_TTL} sono ignorati. In
+ ogni caso prima della spedizione alcuni campi dell'intestazione vengono
+ comunque modificati dal kernel, torneremo sull'argomento in
+ sez.~\ref{sec:socket_raw}. Prende per \param{optval} un intero usato come
+ valore logico.
+
+\item[\constd{IP\_MSFILTER}] L'opzione, introdotta con il kernel 2.4.22,
+ fornisce accesso completo all'interfaccia per il filtraggio delle sorgenti
+ di \textit{multicast} (il cosiddetto \textit{multicast source filtering},
+ definito dall'\href{http://www.ietf.org/rfc/rfc3376.txt}{RFC~3376}).
+
+\begin{figure}[!htb]
+ \footnotesize \centering
+ \begin{minipage}[c]{0.70\textwidth}
+ \includestruct{listati/ip_msfilter.h}
+ \end{minipage}
+ \caption{La struttura \structd{ip\_msfilter} utilizzata per il
+ \textit{multicast source filtering}.}
+ \label{fig:ip_msfilter_struct}
+\end{figure}
-\item[\constd{IP\_HDRINCL}] Se abilitata l'utente deve fornire lui stesso
- l'intestazione IP in cima ai propri dati. L'opzione è valida soltanto per
- socket di tipo \const{SOCK\_RAW}, e quando utilizzata eventuali valori
- impostati con \const{IP\_OPTIONS}, \const{IP\_TOS} o \const{IP\_TTL} sono
- ignorati. In ogni caso prima della spedizione alcuni campi
- dell'intestazione vengono comunque modificati dal kernel, torneremo
- sull'argomento in sez.~\ref{sec:socket_raw}
+L'argomento \param{optval} è una struttura \struct{ip\_msfilter} illustrata in
+fig.~\ref{fig:ip_msfilter_struct}, il campo \var{imsf\_multiaddr} è
+l'indirizzo del gruppo di \textit{multicast}, il campo \var{imsf\_interface}
+l'indirizzo dell'interfaccia locale, il campo \var{imsf\_mode} indica la
+modalità di filtraggio e con i campi \var{imsf\_numsrc} e \var{imsf\_slist}
+rispettivamente la lunghezza della lista, e la lista stessa, degli indirizzi
+sorgente.
+
+Come ausilio all'uso di questa opzione sono disponibili le macro
+\macro{MCAST\_INCLUDE} e \macro{MCAST\_EXCLUDE} che si possono usare per
+\var{imsf\_mode}. Inoltre si può usare la macro
+\macro{IP\_MSFILTER\_SIZE}\texttt{(\textsf{n})} per determinare il valore
+di \param{optlen} con una struttura \struct{ip\_msfilter} contenente
+\texttt{\textsf{n}} sorgenti in \var{imsf\_slist}.
\item[\constd{IP\_MINTTL}] L'opzione, introdotta con il kernel 2.6.34, imposta
un valore minimo per il campo \textit{Time to Live} dei pacchetti associati
\constd{IP\_PMTUDISC\_DO} &2& Esegue la procedura di determinazione
della \textit{Path MTU} come richiesto
dall'\href{http://www.ietf.org/rfc/rfc1191.txt}{RFC~1191}.\\
+ \constd{IP\_PMTUDISC\_PROBE}&?& .\\
\hline
\end{tabular}
\caption{Valori possibili per l'argomento \param{optval} di
\item[\sysctlrelfiled{net/ipv4}{ip\_nonlocal\_bind}] se abilitato rende
possibile ad una applicazione eseguire \func{bind} anche su un indirizzo che
non è presente su nessuna interfaccia locale. Prende un valore logico e di
- default è disabilitato.
+ default è disabilitato. La funzionalità può essere abilitata a livello di
+ singolo socket con l'opzione \const{IP\_FREEBIND} illustrata in
+ sez.~\ref{sec:sock_ipv4_options}.
Questo può risultare utile per applicazioni particolari (come gli
\textit{sniffer}) che hanno la necessità di ricevere pacchetti anche non
%% socket.tex
%%
-%% Copyright (C) 2000-2017 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2018 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",
%% system.tex
%%
-%% Copyright (C) 2000-2017 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2018 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",
%% tcpsock.tex
%%
-%% Copyright (C) 2000-2017 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2018 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",
%% thread.tex
%%
-%% Copyright (C) 2007-2017 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2007-2018 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",
%% tcpprot.tex
%%
-%% Copyright (C) 2002-2017 Simone Piccardi. Permission is granted to copy,
+%% Copyright (C) 2002-2018 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",