\hypertarget{classIoIpComm}{
\section{IoIpComm Class Reference}
\label{classIoIpComm}\index{IoIpComm@{IoIpComm}}
}


A class that handles raw IP I/O communication for a specific protocol.  




{\ttfamily \#include $<$io\_\-ip\_\-manager.hh$>$}

Inheritance diagram for IoIpComm:\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[height=2.000000cm]{classIoIpComm}
\end{center}
\end{figure}
\subsection*{Classes}
\begin{DoxyCompactItemize}
\item 
class \hyperlink{classIoIpComm_1_1InputFilter}{InputFilter}
\begin{DoxyCompactList}\small\item\em Filter class. \item\end{DoxyCompactList}\item 
class \hyperlink{classIoIpComm_1_1JoinedMulticastGroup}{JoinedMulticastGroup}
\begin{DoxyCompactList}\small\item\em Joined multicast group class. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\hyperlink{classIoIpComm_a67fe54450db0ccfc0eff766a25fd90bd}{IoIpComm} (\hyperlink{classIoIpManager}{IoIpManager} \&io\_\-ip\_\-manager, const \hyperlink{classIfTree}{IfTree} \&iftree, int family, uint8\_\-t ip\_\-protocol)
\begin{DoxyCompactList}\small\item\em Constructor for \hyperlink{classIoIpComm}{IoIpComm}. \item\end{DoxyCompactList}\item 
\hypertarget{classIoIpComm_a0009c207c3cecff61d523f7d03c9d2f0}{
virtual \hyperlink{classIoIpComm_a0009c207c3cecff61d523f7d03c9d2f0}{$\sim$IoIpComm} ()}
\label{classIoIpComm_a0009c207c3cecff61d523f7d03c9d2f0}

\begin{DoxyCompactList}\small\item\em Virtual destructor. \item\end{DoxyCompactList}\item 
\hypertarget{classIoIpComm_ab86d9de3a74338084d85d610953c4783}{
void \hyperlink{classIoIpComm_ab86d9de3a74338084d85d610953c4783}{allocate\_\-io\_\-ip\_\-plugins} ()}
\label{classIoIpComm_ab86d9de3a74338084d85d610953c4783}

\begin{DoxyCompactList}\small\item\em Allocate \hyperlink{protocolthe-p}{the} I/O IP plugins (one per data plane manager). \item\end{DoxyCompactList}\item 
\hypertarget{classIoIpComm_a54be617b6b87c2bc886f72574f9e7cdd}{
void \hyperlink{classIoIpComm_a54be617b6b87c2bc886f72574f9e7cdd}{deallocate\_\-io\_\-ip\_\-plugins} ()}
\label{classIoIpComm_a54be617b6b87c2bc886f72574f9e7cdd}

\begin{DoxyCompactList}\small\item\em Deallocate \hyperlink{protocolthe-p}{the} I/O IP plugins (one per data plane manager). \item\end{DoxyCompactList}\item 
void \hyperlink{classIoIpComm_aebe6a0ba88815a91924fc990de8e1704}{allocate\_\-io\_\-ip\_\-plugin} (\hyperlink{classFeaDataPlaneManager}{FeaDataPlaneManager} $\ast$fea\_\-data\_\-plane\_\-manager)
\begin{DoxyCompactList}\small\item\em Allocate an I/O IP plugin for a given data plane manager. \item\end{DoxyCompactList}\item 
void \hyperlink{classIoIpComm_ab3b467e29f3d4f8779210a3746765ee5}{deallocate\_\-io\_\-ip\_\-plugin} (\hyperlink{classFeaDataPlaneManager}{FeaDataPlaneManager} $\ast$fea\_\-data\_\-plane\_\-manager)
\begin{DoxyCompactList}\small\item\em Deallocate \hyperlink{protocolthe-p}{the} I/O IP plugin for a given data plane manager. \item\end{DoxyCompactList}\item 
\hypertarget{classIoIpComm_afe71c4286e7e90c970983b3837d320a6}{
void \hyperlink{classIoIpComm_afe71c4286e7e90c970983b3837d320a6}{start\_\-io\_\-ip\_\-plugins} ()}
\label{classIoIpComm_afe71c4286e7e90c970983b3837d320a6}

\begin{DoxyCompactList}\small\item\em Start all I/O IP plugins. \item\end{DoxyCompactList}\item 
\hypertarget{classIoIpComm_a6710a680e9665aa801585d9313a97b7b}{
void \hyperlink{classIoIpComm_a6710a680e9665aa801585d9313a97b7b}{stop\_\-io\_\-ip\_\-plugins} ()}
\label{classIoIpComm_a6710a680e9665aa801585d9313a97b7b}

\begin{DoxyCompactList}\small\item\em Stop all I/O IP plugins. \item\end{DoxyCompactList}\item 
int \hyperlink{classIoIpComm_a0a59f8faa774258138ca63c314fa5463}{add\_\-filter} (\hyperlink{classIoIpComm_1_1InputFilter}{InputFilter} $\ast$filter)
\begin{DoxyCompactList}\small\item\em Add a filter to list of input filters. \item\end{DoxyCompactList}\item 
int \hyperlink{classIoIpComm_a43dae51a61a95bae731e9b8153e9f634}{remove\_\-filter} (\hyperlink{classIoIpComm_1_1InputFilter}{InputFilter} $\ast$filter)
\begin{DoxyCompactList}\small\item\em Remove filter from list of input filters. \item\end{DoxyCompactList}\item 
bool \hyperlink{classIoIpComm_a04d0b84d5cf81da7f7de1bb49953c87a}{no\_\-input\_\-filters} () const 
\item 
int \hyperlink{classIoIpComm_a3f44be9aea19e087b6b18e873ff8589d}{send\_\-packet} (const string \&if\_\-name, const string \&vif\_\-name, const \hyperlink{classIPvX}{IPvX} \&src\_\-address, const \hyperlink{classIPvX}{IPvX} \&dst\_\-address, int32\_\-t ip\_\-ttl, int32\_\-t ip\_\-tos, bool ip\_\-router\_\-alert, bool ip\_\-internet\_\-control, const vector$<$ uint8\_\-t $>$ \&ext\_\-headers\_\-type, const vector$<$ vector$<$ uint8\_\-t $>$ $>$ \&ext\_\-headers\_\-payload, const vector$<$ uint8\_\-t $>$ \&payload, string \&error\_\-msg)
\begin{DoxyCompactList}\small\item\em \hyperlink{structSend}{Send} a raw IP packet. \item\end{DoxyCompactList}\item 
virtual void \hyperlink{classIoIpComm_a03b25bfd38d9f4bb131d79f909107ae8}{recv\_\-packet} (const string \&if\_\-name, const string \&vif\_\-name, const \hyperlink{classIPvX}{IPvX} \&src\_\-address, const \hyperlink{classIPvX}{IPvX} \&dst\_\-address, int32\_\-t ip\_\-ttl, int32\_\-t ip\_\-tos, bool ip\_\-router\_\-alert, bool ip\_\-internet\_\-control, const vector$<$ uint8\_\-t $>$ \&ext\_\-headers\_\-type, const vector$<$ vector$<$ uint8\_\-t $>$ $>$ \&ext\_\-headers\_\-payload, const vector$<$ uint8\_\-t $>$ \&payload)
\begin{DoxyCompactList}\small\item\em Received a raw IP packet. \item\end{DoxyCompactList}\item 
virtual void \hyperlink{classIoIpComm_a7d1720a0e7c6c6a00ea52ec8db9d74ae}{recv\_\-system\_\-multicast\_\-upcall} (const vector$<$ uint8\_\-t $>$ \&payload)
\begin{DoxyCompactList}\small\item\em Received a multicast forwarding related upcall from \hyperlink{protocolthe-p}{the} system. \item\end{DoxyCompactList}\item 
int \hyperlink{classIoIpComm_a69180f770849747d387e6e489ff06827}{join\_\-multicast\_\-group} (const string \&if\_\-name, const string \&vif\_\-name, const \hyperlink{classIPvX}{IPvX} \&group\_\-address, const string \&receiver\_\-name, string \&error\_\-msg)
\begin{DoxyCompactList}\small\item\em Join an IP multicast group. \item\end{DoxyCompactList}\item 
int \hyperlink{classIoIpComm_a26dee3a626c9d091410a9005ea420d04}{leave\_\-multicast\_\-group} (const string \&if\_\-name, const string \&vif\_\-name, const \hyperlink{classIPvX}{IPvX} \&group\_\-address, const string \&receiver\_\-name, string \&error\_\-msg)
\begin{DoxyCompactList}\small\item\em Leave an IP multicast group. \item\end{DoxyCompactList}\item 
int \hyperlink{classIoIpComm_af11e04bb969f0763ebbc1fb6634e3917}{leave\_\-all\_\-multicast\_\-groups} (const string \&if\_\-name, const string \&vif\_\-name, string \&error\_\-msg)
\begin{DoxyCompactList}\small\item\em Leave all IP multicast groups on this interface. \item\end{DoxyCompactList}\item 
uint8\_\-t \hyperlink{classIoIpComm_ab593cbc2945a251cb1eaf72389ca8a84}{ip\_\-protocol} () const 
\begin{DoxyCompactList}\small\item\em Get \hyperlink{protocolthe-p}{the} IP protocol. \item\end{DoxyCompactList}\item 
\hyperlink{classXorpFd}{XorpFd} \hyperlink{classIoIpComm_a07b950283e604df2c4829b66737e7498}{first\_\-valid\_\-mcast\_\-protocol\_\-fd\_\-in} ()
\begin{DoxyCompactList}\small\item\em Get \hyperlink{protocolthe-p}{the} first valid file descriptor for receiving protocol messages. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Private Types}
\begin{DoxyCompactItemize}
\item 
\hypertarget{classIoIpComm_a04f304681ec8c67b27c24a5dbcea0296}{
typedef list$<$ pair$<$ \hyperlink{classFeaDataPlaneManager}{FeaDataPlaneManager} $\ast$, \hyperlink{classIoIp}{IoIp} $\ast$ $>$ $>$ {\bfseries IoIpPlugins}}
\label{classIoIpComm_a04f304681ec8c67b27c24a5dbcea0296}

\item 
\hypertarget{classIoIpComm_a33078b9712f5fca88e8f40c7f669081b}{
typedef map$<$ \hyperlink{classIoIpComm_1_1JoinedMulticastGroup}{JoinedMulticastGroup}, \hyperlink{classIoIpComm_1_1JoinedMulticastGroup}{JoinedMulticastGroup} $>$ {\bfseries JoinedGroupsTable}}
\label{classIoIpComm_a33078b9712f5fca88e8f40c7f669081b}

\end{DoxyCompactItemize}
\subsection*{Private Member Functions}
\begin{DoxyCompactItemize}
\item 
\hypertarget{classIoIpComm_ae4db5c6891b89b962c4cf7bcd361cfc6}{
{\bfseries IoIpComm} (const \hyperlink{classIoIpComm}{IoIpComm} \&)}
\label{classIoIpComm_ae4db5c6891b89b962c4cf7bcd361cfc6}

\item 
\hypertarget{classIoIpComm_a79ae3b7f3c83df43adcfb0f2f291c7d2}{
\hyperlink{classIoIpComm}{IoIpComm} \& {\bfseries operator=} (const \hyperlink{classIoIpComm}{IoIpComm} \&)}
\label{classIoIpComm_a79ae3b7f3c83df43adcfb0f2f291c7d2}

\end{DoxyCompactItemize}
\subsection*{Private Attributes}
\begin{DoxyCompactItemize}
\item 
\hypertarget{classIoIpComm_abdb6b711b0d13f49950a65e86714aad1}{
\hyperlink{classIoIpManager}{IoIpManager} \& {\bfseries \_\-io\_\-ip\_\-manager}}
\label{classIoIpComm_abdb6b711b0d13f49950a65e86714aad1}

\item 
\hypertarget{classIoIpComm_aab9295b230dbb8c9a1a58803a6b70adc}{
const \hyperlink{classIfTree}{IfTree} \& {\bfseries \_\-iftree}}
\label{classIoIpComm_aab9295b230dbb8c9a1a58803a6b70adc}

\item 
\hypertarget{classIoIpComm_a2fa1e3615521520683f9f41b238119b3}{
const int {\bfseries \_\-family}}
\label{classIoIpComm_a2fa1e3615521520683f9f41b238119b3}

\item 
\hypertarget{classIoIpComm_ab31a98a8aa953d7e5b3ca7b716a328d0}{
const uint8\_\-t {\bfseries \_\-ip\_\-protocol}}
\label{classIoIpComm_ab31a98a8aa953d7e5b3ca7b716a328d0}

\item 
\hypertarget{classIoIpComm_a81d827039630f24794158652e53f554e}{
IoIpPlugins {\bfseries \_\-io\_\-ip\_\-plugins}}
\label{classIoIpComm_a81d827039630f24794158652e53f554e}

\item 
\hypertarget{classIoIpComm_a9db43bd2406941f304bea22add33c5c1}{
list$<$ \hyperlink{classIoIpComm_1_1InputFilter}{InputFilter} $\ast$ $>$ {\bfseries \_\-input\_\-filters}}
\label{classIoIpComm_a9db43bd2406941f304bea22add33c5c1}

\item 
\hypertarget{classIoIpComm_a83cb9650ade49bc1a3490df1e918321c}{
JoinedGroupsTable {\bfseries \_\-joined\_\-groups\_\-table}}
\label{classIoIpComm_a83cb9650ade49bc1a3490df1e918321c}

\end{DoxyCompactItemize}


\subsection{Detailed Description}
A class that handles raw IP I/O communication for a specific protocol. It also allows arbitrary filters to receive \hyperlink{protocolthe-p}{the} raw IP data for that protocol. 

\subsection{Constructor \& Destructor Documentation}
\hypertarget{classIoIpComm_a67fe54450db0ccfc0eff766a25fd90bd}{
\index{IoIpComm@{IoIpComm}!IoIpComm@{IoIpComm}}
\index{IoIpComm@{IoIpComm}!IoIpComm@{IoIpComm}}
\subsubsection[{IoIpComm}]{\setlength{\rightskip}{0pt plus 5cm}IoIpComm::IoIpComm (
\begin{DoxyParamCaption}
\item[{{\bf IoIpManager} \&}]{io\_\-ip\_\-manager, }
\item[{const {\bf IfTree} \&}]{iftree, }
\item[{int}]{family, }
\item[{uint8\_\-t}]{ip\_\-protocol}
\end{DoxyParamCaption}
)}}
\label{classIoIpComm_a67fe54450db0ccfc0eff766a25fd90bd}


Constructor for \hyperlink{classIoIpComm}{IoIpComm}. 


\begin{DoxyParams}{Parameters}
{\em io\_\-ip\_\-manager} & \hyperlink{protocolthe-p}{the} corresponding I/O IP manager (\hyperlink{classIoIpManager}{IoIpManager}). \\
\hline
{\em iftree} & \hyperlink{protocolthe-p}{the} interface tree to use. \\
\hline
{\em family} & \hyperlink{protocolthe-p}{the} address family (AF\_\-INET or AF\_\-INET6 for \hyperlink{classIPv4}{IPv4} and \hyperlink{classIPv6}{IPv6} respectively). \\
\hline
{\em ip\_\-protocol} & \hyperlink{protocolthe-p}{the} IP protocol number (IPPROTO\_\-$\ast$). \\
\hline
\end{DoxyParams}


\subsection{Member Function Documentation}
\hypertarget{classIoIpComm_a0a59f8faa774258138ca63c314fa5463}{
\index{IoIpComm@{IoIpComm}!add\_\-filter@{add\_\-filter}}
\index{add\_\-filter@{add\_\-filter}!IoIpComm@{IoIpComm}}
\subsubsection[{add\_\-filter}]{\setlength{\rightskip}{0pt plus 5cm}int IoIpComm::add\_\-filter (
\begin{DoxyParamCaption}
\item[{{\bf InputFilter} $\ast$}]{filter}
\end{DoxyParamCaption}
)}}
\label{classIoIpComm_a0a59f8faa774258138ca63c314fa5463}


Add a filter to list of input filters. 

The \hyperlink{classIoIpComm}{IoIpComm} class assumes that \hyperlink{protocolthe-p}{the} callee will be responsible for managing \hyperlink{protocolthe-p}{the} memory associated with \hyperlink{protocolthe-p}{the} filter and will call \hyperlink{classIoIpComm_a43dae51a61a95bae731e9b8153e9f634}{remove\_\-filter()} if \hyperlink{protocolthe-p}{the} filter is deleted or goes out of scope.


\begin{DoxyParams}{Parameters}
{\em filter} & \hyperlink{protocolthe-p}{the} filter to add. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR. 
\end{DoxyReturn}
\hypertarget{classIoIpComm_aebe6a0ba88815a91924fc990de8e1704}{
\index{IoIpComm@{IoIpComm}!allocate\_\-io\_\-ip\_\-plugin@{allocate\_\-io\_\-ip\_\-plugin}}
\index{allocate\_\-io\_\-ip\_\-plugin@{allocate\_\-io\_\-ip\_\-plugin}!IoIpComm@{IoIpComm}}
\subsubsection[{allocate\_\-io\_\-ip\_\-plugin}]{\setlength{\rightskip}{0pt plus 5cm}void IoIpComm::allocate\_\-io\_\-ip\_\-plugin (
\begin{DoxyParamCaption}
\item[{{\bf FeaDataPlaneManager} $\ast$}]{fea\_\-data\_\-plane\_\-manager}
\end{DoxyParamCaption}
)}}
\label{classIoIpComm_aebe6a0ba88815a91924fc990de8e1704}


Allocate an I/O IP plugin for a given data plane manager. 


\begin{DoxyParams}{Parameters}
{\em fea\_\-data\_\-plane\_\-manager} & \hyperlink{protocolthe-p}{the} data plane manager. \\
\hline
\end{DoxyParams}
\hypertarget{classIoIpComm_ab3b467e29f3d4f8779210a3746765ee5}{
\index{IoIpComm@{IoIpComm}!deallocate\_\-io\_\-ip\_\-plugin@{deallocate\_\-io\_\-ip\_\-plugin}}
\index{deallocate\_\-io\_\-ip\_\-plugin@{deallocate\_\-io\_\-ip\_\-plugin}!IoIpComm@{IoIpComm}}
\subsubsection[{deallocate\_\-io\_\-ip\_\-plugin}]{\setlength{\rightskip}{0pt plus 5cm}void IoIpComm::deallocate\_\-io\_\-ip\_\-plugin (
\begin{DoxyParamCaption}
\item[{{\bf FeaDataPlaneManager} $\ast$}]{fea\_\-data\_\-plane\_\-manager}
\end{DoxyParamCaption}
)}}
\label{classIoIpComm_ab3b467e29f3d4f8779210a3746765ee5}


Deallocate \hyperlink{protocolthe-p}{the} I/O IP plugin for a given data plane manager. 


\begin{DoxyParams}{Parameters}
{\em fea\_\-data\_\-plane\_\-manager} & \hyperlink{protocolthe-p}{the} data plane manager. \\
\hline
\end{DoxyParams}
\hypertarget{classIoIpComm_a07b950283e604df2c4829b66737e7498}{
\index{IoIpComm@{IoIpComm}!first\_\-valid\_\-mcast\_\-protocol\_\-fd\_\-in@{first\_\-valid\_\-mcast\_\-protocol\_\-fd\_\-in}}
\index{first\_\-valid\_\-mcast\_\-protocol\_\-fd\_\-in@{first\_\-valid\_\-mcast\_\-protocol\_\-fd\_\-in}!IoIpComm@{IoIpComm}}
\subsubsection[{first\_\-valid\_\-mcast\_\-protocol\_\-fd\_\-in}]{\setlength{\rightskip}{0pt plus 5cm}{\bf XorpFd} IoIpComm::first\_\-valid\_\-mcast\_\-protocol\_\-fd\_\-in (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)}}
\label{classIoIpComm_a07b950283e604df2c4829b66737e7498}


Get \hyperlink{protocolthe-p}{the} first valid file descriptor for receiving protocol messages. 

\begin{DoxyReturn}{Returns}
\hyperlink{protocolthe-p}{the} first valid file descriptor for receiving protocol messages. 
\end{DoxyReturn}
\hypertarget{classIoIpComm_ab593cbc2945a251cb1eaf72389ca8a84}{
\index{IoIpComm@{IoIpComm}!ip\_\-protocol@{ip\_\-protocol}}
\index{ip\_\-protocol@{ip\_\-protocol}!IoIpComm@{IoIpComm}}
\subsubsection[{ip\_\-protocol}]{\setlength{\rightskip}{0pt plus 5cm}uint8\_\-t IoIpComm::ip\_\-protocol (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
) const\hspace{0.3cm}{\ttfamily  \mbox{[}inline\mbox{]}}}}
\label{classIoIpComm_ab593cbc2945a251cb1eaf72389ca8a84}


Get \hyperlink{protocolthe-p}{the} IP protocol. 

\begin{DoxyReturn}{Returns}
\hyperlink{protocolthe-p}{the} IP protocol. 
\end{DoxyReturn}
\hypertarget{classIoIpComm_a69180f770849747d387e6e489ff06827}{
\index{IoIpComm@{IoIpComm}!join\_\-multicast\_\-group@{join\_\-multicast\_\-group}}
\index{join\_\-multicast\_\-group@{join\_\-multicast\_\-group}!IoIpComm@{IoIpComm}}
\subsubsection[{join\_\-multicast\_\-group}]{\setlength{\rightskip}{0pt plus 5cm}int IoIpComm::join\_\-multicast\_\-group (
\begin{DoxyParamCaption}
\item[{const string \&}]{if\_\-name, }
\item[{const string \&}]{vif\_\-name, }
\item[{const {\bf IPvX} \&}]{group\_\-address, }
\item[{const string \&}]{receiver\_\-name, }
\item[{string \&}]{error\_\-msg}
\end{DoxyParamCaption}
)}}
\label{classIoIpComm_a69180f770849747d387e6e489ff06827}


Join an IP multicast group. 


\begin{DoxyParams}{Parameters}
{\em if\_\-name} & \hyperlink{protocolthe-p}{the} interface through which packets should be accepted. \\
\hline
{\em vif\_\-name} & \hyperlink{protocolthe-p}{the} vif through which packets should be accepted. \\
\hline
{\em group\_\-address} & \hyperlink{protocolthe-p}{the} multicast group address to join. \\
\hline
{\em receiver\_\-name} & \hyperlink{protocolthe-p}{the} name of \hyperlink{protocolthe-p}{the} receiver. \\
\hline
{\em error\_\-msg} & \hyperlink{protocolthe-p}{the} error message (if error). \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR. 
\end{DoxyReturn}
\hypertarget{classIoIpComm_af11e04bb969f0763ebbc1fb6634e3917}{
\index{IoIpComm@{IoIpComm}!leave\_\-all\_\-multicast\_\-groups@{leave\_\-all\_\-multicast\_\-groups}}
\index{leave\_\-all\_\-multicast\_\-groups@{leave\_\-all\_\-multicast\_\-groups}!IoIpComm@{IoIpComm}}
\subsubsection[{leave\_\-all\_\-multicast\_\-groups}]{\setlength{\rightskip}{0pt plus 5cm}int IoIpComm::leave\_\-all\_\-multicast\_\-groups (
\begin{DoxyParamCaption}
\item[{const string \&}]{if\_\-name, }
\item[{const string \&}]{vif\_\-name, }
\item[{string \&}]{error\_\-msg}
\end{DoxyParamCaption}
)}}
\label{classIoIpComm_af11e04bb969f0763ebbc1fb6634e3917}


Leave all IP multicast groups on this interface. 


\begin{DoxyParams}{Parameters}
{\em if\_\-name} & \hyperlink{protocolthe-p}{the} interface through which packets should not be accepted. \\
\hline
{\em vif\_\-name} & \hyperlink{protocolthe-p}{the} vif through which packets should not be accepted. \\
\hline
{\em error\_\-msg} & \hyperlink{protocolthe-p}{the} error message (if error). \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR. 
\end{DoxyReturn}
\hypertarget{classIoIpComm_a26dee3a626c9d091410a9005ea420d04}{
\index{IoIpComm@{IoIpComm}!leave\_\-multicast\_\-group@{leave\_\-multicast\_\-group}}
\index{leave\_\-multicast\_\-group@{leave\_\-multicast\_\-group}!IoIpComm@{IoIpComm}}
\subsubsection[{leave\_\-multicast\_\-group}]{\setlength{\rightskip}{0pt plus 5cm}int IoIpComm::leave\_\-multicast\_\-group (
\begin{DoxyParamCaption}
\item[{const string \&}]{if\_\-name, }
\item[{const string \&}]{vif\_\-name, }
\item[{const {\bf IPvX} \&}]{group\_\-address, }
\item[{const string \&}]{receiver\_\-name, }
\item[{string \&}]{error\_\-msg}
\end{DoxyParamCaption}
)}}
\label{classIoIpComm_a26dee3a626c9d091410a9005ea420d04}


Leave an IP multicast group. 


\begin{DoxyParams}{Parameters}
{\em if\_\-name} & \hyperlink{protocolthe-p}{the} interface through which packets should not be accepted. \\
\hline
{\em vif\_\-name} & \hyperlink{protocolthe-p}{the} vif through which packets should not be accepted. \\
\hline
{\em group\_\-address} & \hyperlink{protocolthe-p}{the} multicast group address to leave. \\
\hline
{\em receiver\_\-name} & \hyperlink{protocolthe-p}{the} name of \hyperlink{protocolthe-p}{the} receiver. \\
\hline
{\em error\_\-msg} & \hyperlink{protocolthe-p}{the} error message (if error). \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR. 
\end{DoxyReturn}
\hypertarget{classIoIpComm_a04d0b84d5cf81da7f7de1bb49953c87a}{
\index{IoIpComm@{IoIpComm}!no\_\-input\_\-filters@{no\_\-input\_\-filters}}
\index{no\_\-input\_\-filters@{no\_\-input\_\-filters}!IoIpComm@{IoIpComm}}
\subsubsection[{no\_\-input\_\-filters}]{\setlength{\rightskip}{0pt plus 5cm}bool IoIpComm::no\_\-input\_\-filters (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
) const\hspace{0.3cm}{\ttfamily  \mbox{[}inline\mbox{]}}}}
\label{classIoIpComm_a04d0b84d5cf81da7f7de1bb49953c87a}
\begin{DoxyReturn}{Returns}
true if there are no filters associated with this instance. 
\end{DoxyReturn}
\hypertarget{classIoIpComm_a03b25bfd38d9f4bb131d79f909107ae8}{
\index{IoIpComm@{IoIpComm}!recv\_\-packet@{recv\_\-packet}}
\index{recv\_\-packet@{recv\_\-packet}!IoIpComm@{IoIpComm}}
\subsubsection[{recv\_\-packet}]{\setlength{\rightskip}{0pt plus 5cm}void IoIpComm::recv\_\-packet (
\begin{DoxyParamCaption}
\item[{const string \&}]{if\_\-name, }
\item[{const string \&}]{vif\_\-name, }
\item[{const {\bf IPvX} \&}]{src\_\-address, }
\item[{const {\bf IPvX} \&}]{dst\_\-address, }
\item[{int32\_\-t}]{ip\_\-ttl, }
\item[{int32\_\-t}]{ip\_\-tos, }
\item[{bool}]{ip\_\-router\_\-alert, }
\item[{bool}]{ip\_\-internet\_\-control, }
\item[{const vector$<$ uint8\_\-t $>$ \&}]{ext\_\-headers\_\-type, }
\item[{const vector$<$ vector$<$ uint8\_\-t $>$ $>$ \&}]{ext\_\-headers\_\-payload, }
\item[{const vector$<$ uint8\_\-t $>$ \&}]{payload}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily  \mbox{[}virtual\mbox{]}}}}
\label{classIoIpComm_a03b25bfd38d9f4bb131d79f909107ae8}


Received a raw IP packet. 


\begin{DoxyParams}{Parameters}
{\em if\_\-name} & \hyperlink{protocolthe-p}{the} interface name \hyperlink{protocolthe-p}{the} packet arrived on. \\
\hline
{\em vif\_\-name} & \hyperlink{protocolthe-p}{the} vif name \hyperlink{protocolthe-p}{the} packet arrived on. \\
\hline
{\em src\_\-address} & \hyperlink{protocolthe-p}{the} IP source address. \\
\hline
{\em dst\_\-address} & \hyperlink{protocolthe-p}{the} IP destination address. \\
\hline
{\em ip\_\-ttl} & \hyperlink{protocolthe-p}{the} IP TTL (hop-\/limit). If it has a negative value, then \hyperlink{protocolthe-p}{the} received value is unknown. \\
\hline
{\em ip\_\-tos} & The type of service (Diffserv/ECN bits for \hyperlink{classIPv4}{IPv4}). If it has a negative value, then \hyperlink{protocolthe-p}{the} received value is unknown. \\
\hline
{\em ip\_\-router\_\-alert} & if true, \hyperlink{protocolthe-p}{the} IP Router Alert option was included in \hyperlink{protocolthe-p}{the} IP packet. \\
\hline
{\em ip\_\-internet\_\-control} & if true, then this is IP control traffic. \\
\hline
{\em ext\_\-headers\_\-type} & a vector of integers with \hyperlink{protocolthe-p}{the} types of \hyperlink{protocolthe-p}{the} optional \hyperlink{classIPv6}{IPv6} extention headers. \\
\hline
{\em ext\_\-headers\_\-payload} & a vector of payload data, one for each optional \hyperlink{classIPv6}{IPv6} extention header. The number of entries must match ext\_\-headers\_\-type. \\
\hline
{\em packet} & \hyperlink{protocolthe-p}{the} payload, everything after \hyperlink{protocolthe-p}{the} IP header and options. \\
\hline
\end{DoxyParams}


Implements \hyperlink{classIoIpReceiver_a704309d8680306a6219fa4b3df261109}{IoIpReceiver}.

\hypertarget{classIoIpComm_a7d1720a0e7c6c6a00ea52ec8db9d74ae}{
\index{IoIpComm@{IoIpComm}!recv\_\-system\_\-multicast\_\-upcall@{recv\_\-system\_\-multicast\_\-upcall}}
\index{recv\_\-system\_\-multicast\_\-upcall@{recv\_\-system\_\-multicast\_\-upcall}!IoIpComm@{IoIpComm}}
\subsubsection[{recv\_\-system\_\-multicast\_\-upcall}]{\setlength{\rightskip}{0pt plus 5cm}void IoIpComm::recv\_\-system\_\-multicast\_\-upcall (
\begin{DoxyParamCaption}
\item[{const vector$<$ uint8\_\-t $>$ \&}]{payload}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily  \mbox{[}virtual\mbox{]}}}}
\label{classIoIpComm_a7d1720a0e7c6c6a00ea52ec8db9d74ae}


Received a multicast forwarding related upcall from \hyperlink{protocolthe-p}{the} system. 

Examples of such upcalls are: \char`\"{}nocache\char`\"{}, \char`\"{}wrongiif\char`\"{}, \char`\"{}wholepkt\char`\"{}, \char`\"{}bw\_\-upcall\char`\"{}.


\begin{DoxyParams}{Parameters}
{\em payload} & \hyperlink{protocolthe-p}{the} payload data for \hyperlink{protocolthe-p}{the} upcall. \\
\hline
\end{DoxyParams}


Implements \hyperlink{classIoIpReceiver_a597d6cd6a888f1fe38532cbbf3507a2f}{IoIpReceiver}.

\hypertarget{classIoIpComm_a43dae51a61a95bae731e9b8153e9f634}{
\index{IoIpComm@{IoIpComm}!remove\_\-filter@{remove\_\-filter}}
\index{remove\_\-filter@{remove\_\-filter}!IoIpComm@{IoIpComm}}
\subsubsection[{remove\_\-filter}]{\setlength{\rightskip}{0pt plus 5cm}int IoIpComm::remove\_\-filter (
\begin{DoxyParamCaption}
\item[{{\bf InputFilter} $\ast$}]{filter}
\end{DoxyParamCaption}
)}}
\label{classIoIpComm_a43dae51a61a95bae731e9b8153e9f634}


Remove filter from list of input filters. 


\begin{DoxyParams}{Parameters}
{\em filter} & \hyperlink{protocolthe-p}{the} filter to remove. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR. 
\end{DoxyReturn}
\hypertarget{classIoIpComm_a3f44be9aea19e087b6b18e873ff8589d}{
\index{IoIpComm@{IoIpComm}!send\_\-packet@{send\_\-packet}}
\index{send\_\-packet@{send\_\-packet}!IoIpComm@{IoIpComm}}
\subsubsection[{send\_\-packet}]{\setlength{\rightskip}{0pt plus 5cm}int IoIpComm::send\_\-packet (
\begin{DoxyParamCaption}
\item[{const string \&}]{if\_\-name, }
\item[{const string \&}]{vif\_\-name, }
\item[{const {\bf IPvX} \&}]{src\_\-address, }
\item[{const {\bf IPvX} \&}]{dst\_\-address, }
\item[{int32\_\-t}]{ip\_\-ttl, }
\item[{int32\_\-t}]{ip\_\-tos, }
\item[{bool}]{ip\_\-router\_\-alert, }
\item[{bool}]{ip\_\-internet\_\-control, }
\item[{const vector$<$ uint8\_\-t $>$ \&}]{ext\_\-headers\_\-type, }
\item[{const vector$<$ vector$<$ uint8\_\-t $>$ $>$ \&}]{ext\_\-headers\_\-payload, }
\item[{const vector$<$ uint8\_\-t $>$ \&}]{payload, }
\item[{string \&}]{error\_\-msg}
\end{DoxyParamCaption}
)}}
\label{classIoIpComm_a3f44be9aea19e087b6b18e873ff8589d}


\hyperlink{structSend}{Send} a raw IP packet. 


\begin{DoxyParams}{Parameters}
{\em if\_\-name} & \hyperlink{protocolthe-p}{the} interface to send \hyperlink{protocolthe-p}{the} packet on. It is essential for multicast. In \hyperlink{protocolthe-p}{the} unicast case this field may be empty. \\
\hline
{\em vif\_\-name} & \hyperlink{protocolthe-p}{the} vif to send \hyperlink{protocolthe-p}{the} packet on. It is essential for multicast. In \hyperlink{protocolthe-p}{the} unicast case this field may be empty. \\
\hline
{\em src\_\-address} & \hyperlink{protocolthe-p}{the} IP source address. \\
\hline
{\em dst\_\-address} & \hyperlink{protocolthe-p}{the} IP destination address. \\
\hline
{\em ip\_\-ttl} & \hyperlink{protocolthe-p}{the} IP TTL (hop-\/limit). If it has a negative value, \hyperlink{protocolthe-p}{the} TTL will be set internally before transmission. \\
\hline
{\em ip\_\-tos} & \hyperlink{protocolthe-p}{the} Type Of Service (IP traffic class for \hyperlink{classIPv6}{IPv6}). If it has a negative value, \hyperlink{protocolthe-p}{the} TOS will be set internally before transmission. \\
\hline
{\em ip\_\-router\_\-alert} & if true, then add \hyperlink{protocolthe-p}{the} IP Router Alert option to \hyperlink{protocolthe-p}{the} IP packet. \\
\hline
{\em ip\_\-internet\_\-control} & if true, then this is IP control traffic. \\
\hline
{\em ext\_\-headers\_\-type} & a vector of integers with \hyperlink{protocolthe-p}{the} types of \hyperlink{protocolthe-p}{the} optional \hyperlink{classIPv6}{IPv6} extention headers. \\
\hline
{\em ext\_\-headers\_\-payload} & a vector of payload data, one for each optional \hyperlink{classIPv6}{IPv6} extention header. The number of entries must match ext\_\-headers\_\-type. \\
\hline
{\em payload} & \hyperlink{protocolthe-p}{the} payload, everything after \hyperlink{protocolthe-p}{the} IP header and options. \\
\hline
{\em error\_\-msg} & \hyperlink{protocolthe-p}{the} error message (if error). \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR. 
\end{DoxyReturn}


The documentation for this class was generated from the following files:\begin{DoxyCompactItemize}
\item 
/home/greearb/git/xorp.ct.github/xorp/fea/io\_\-ip\_\-manager.hh\item 
/home/greearb/git/xorp.ct.github/xorp/fea/io\_\-ip\_\-manager.cc\end{DoxyCompactItemize}
