\hypertarget{classMfeaNode}{
\section{MfeaNode Class Reference}
\label{classMfeaNode}\index{MfeaNode@{MfeaNode}}
}


The MFEA node class.  




{\ttfamily \#include $<$mfea\_\-node.hh$>$}

Inheritance diagram for MfeaNode:\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[height=6.877193cm]{classMfeaNode}
\end{center}
\end{figure}
\subsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\hyperlink{classMfeaNode_a69b6aaee77bde5bb5f585f59e225f3e3}{MfeaNode} (\hyperlink{classFeaNode}{FeaNode} \&fea\_\-node, int family, xorp\_\-module\_\-id module\_\-id, \hyperlink{classEventLoop}{EventLoop} \&eventloop)
\begin{DoxyCompactList}\small\item\em Constructor for a given address family, module ID, and event loop. \item\end{DoxyCompactList}\item 
virtual \hyperlink{classMfeaNode_a0fd5cd433687659d5043b18a5958e6b1}{$\sim$MfeaNode} ()
\begin{DoxyCompactList}\small\item\em Destructor. \item\end{DoxyCompactList}\item 
\hyperlink{classFeaNode}{FeaNode} \& \hyperlink{classMfeaNode_a9a1358ac08a49908232f37e3cd1ab7f6}{fea\_\-node} ()
\begin{DoxyCompactList}\small\item\em Get \hyperlink{protocolthe-p}{the} FEA node instance. \item\end{DoxyCompactList}\item 
bool \hyperlink{classMfeaNode_a0b367f637625c53514684a2cddf12063}{is\_\-dummy} () const 
\begin{DoxyCompactList}\small\item\em Test if running in dummy mode. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_a1ea0bb20c73aabd57f2a79420408d744}{start} ()
\begin{DoxyCompactList}\small\item\em Start \hyperlink{protocolthe-p}{the} node operation. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_af630e3cbf23b810920313de2d6cb6b7b}{stop} ()
\begin{DoxyCompactList}\small\item\em Stop \hyperlink{protocolthe-p}{the} node operation. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_a6e7670569d6980e393902ba654d3f322}{final\_\-start} ()
\begin{DoxyCompactList}\small\item\em Completely start \hyperlink{protocolthe-p}{the} node operation. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_aa2a3a606b45a98cc640b171b0d1c530a}{final\_\-stop} ()
\begin{DoxyCompactList}\small\item\em Completely stop \hyperlink{protocolthe-p}{the} node operation. \item\end{DoxyCompactList}\item 
void \hyperlink{classMfeaNode_ac49b49c395c11f0cd0a7039635ea6394}{enable} ()
\begin{DoxyCompactList}\small\item\em Enable node operation. \item\end{DoxyCompactList}\item 
void \hyperlink{classMfeaNode_a311b3079f92c06de23bed83244719e86}{disable} ()
\begin{DoxyCompactList}\small\item\em Disable node operation. \item\end{DoxyCompactList}\item 
bool \hyperlink{classMfeaNode_a564d48891c74d78d041220efd9b24133}{have\_\-multicast\_\-routing4} () const 
\begin{DoxyCompactList}\small\item\em Test if \hyperlink{protocolthe-p}{the} underlying system supports \hyperlink{classIPv4}{IPv4} multicast routing. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_a03be1cd00bae0ac7c7e4a432c8c15667}{add\_\-vif} (const \hyperlink{classVif}{Vif} \&vif, string \&error\_\-msg)
\begin{DoxyCompactList}\small\item\em Install a new MFEA vif. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_a0e0f78e0be1883ae44e13824ad16577c}{delete\_\-vif} (const string \&vif\_\-name, string \&error\_\-msg)
\begin{DoxyCompactList}\small\item\em Delete an existing MFEA vif. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_ab125258754ed70160f1197d4330645c5}{add\_\-config\_\-vif} (const \hyperlink{classVif}{Vif} \&vif, string \&error\_\-msg)
\begin{DoxyCompactList}\small\item\em Add a configured vif. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_adb3194e40e6ee86f456ff0736e5d3403}{set\_\-config\_\-vif\_\-flags} (const string \&vif\_\-name, bool is\_\-pim\_\-register, bool is\_\-p2p, bool is\_\-loopback, bool is\_\-multicast, bool is\_\-broadcast, bool is\_\-up, uint32\_\-t mtu, string \&error\_\-msg)
\begin{DoxyCompactList}\small\item\em Set \hyperlink{protocolthe-p}{the} vif flags of a configured vif. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_ad8006ee99adc0b81db2cad0ee2db4ccd}{set\_\-config\_\-all\_\-vifs\_\-done} (string \&error\_\-msg)
\begin{DoxyCompactList}\small\item\em Complete \hyperlink{protocolthe-p}{the} set of vif configuration changes. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_a9eb370df6c9971a1aa98a49475740c72}{enable\_\-vif} (const string \&vif\_\-name, string \&error\_\-msg)
\begin{DoxyCompactList}\small\item\em Enable an existing MFEA vif. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_a419fe3a30beb11b77ecfadfb1ff597e6}{disable\_\-vif} (const string \&vif\_\-name, string \&error\_\-msg)
\begin{DoxyCompactList}\small\item\em Disable an existing MFEA vif. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_a96875b00aa24befc2b9a1181e5b59962}{start\_\-vif} (const string \&vif\_\-name, string \&error\_\-msg)
\begin{DoxyCompactList}\small\item\em Start an existing MFEA vif. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_a16206c620d50e74ee0238f2f6d7b12e8}{stop\_\-vif} (const string \&vif\_\-name, string \&error\_\-msg)
\begin{DoxyCompactList}\small\item\em Stop an existing MFEA vif. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_a9faefa8d60a5943dc22305a5a79f4a47}{start\_\-all\_\-vifs} ()
\begin{DoxyCompactList}\small\item\em Start MFEA on all enabled interfaces. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_a03b1dfab9778d423ca8fb2297b7eb556}{stop\_\-all\_\-vifs} ()
\begin{DoxyCompactList}\small\item\em Stop MFEA on all interfaces it was running on. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_ad6eb69963d11085fbef4823bf6f1c522}{enable\_\-all\_\-vifs} ()
\begin{DoxyCompactList}\small\item\em Enable MFEA on all interfaces. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_a3a72e7da62414ed14e646bf47d61de2a}{disable\_\-all\_\-vifs} ()
\begin{DoxyCompactList}\small\item\em Disable MFEA on all interfaces. \item\end{DoxyCompactList}\item 
void \hyperlink{classMfeaNode_aba5575c98bb4968df6f0749c0827573c}{delete\_\-all\_\-vifs} ()
\begin{DoxyCompactList}\small\item\em Delete all MFEA vifs. \item\end{DoxyCompactList}\item 
void \hyperlink{classMfeaNode_a8bcda74b48708947954a3d53ea23dbf3}{vif\_\-shutdown\_\-completed} (const string \&vif\_\-name)
\begin{DoxyCompactList}\small\item\em A method called when a vif has completed its shutdown. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_a85f7fa439d48246e04486f97b2aaea2d}{register\_\-protocol} (const string \&module\_\-instance\_\-name, const string \&if\_\-name, const string \&vif\_\-name, uint8\_\-t ip\_\-protocol, string \&error\_\-msg)
\begin{DoxyCompactList}\small\item\em Register a protocol on an interface in \hyperlink{protocolthe-p}{the} Multicast FEA. \item\end{DoxyCompactList}\item 
void \hyperlink{classMfeaNode_a7df0451f08affbe7d86ee55345a783bc}{unregister\_\-protocols\_\-for\_\-iface} (const string \&ifname)
\begin{DoxyCompactList}\small\item\em Helper method to unregister all protocols on all vifs for this interface. \item\end{DoxyCompactList}\item 
void \hyperlink{classMfeaNode_a98ddd09c2e08943696e139939fc8a44a}{unregister\_\-protocols\_\-for\_\-vif} (const string \&ifname, const string \&vifname)
\begin{DoxyCompactList}\small\item\em Helper method to unregister all protocols on this vif. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_aa8458741e2e8d98e2ca8598c18ad139a}{unregister\_\-protocol} (const string \&module\_\-instance\_\-name, const string \&if\_\-name, const string \&vif\_\-name, string \&error\_\-msg)
\begin{DoxyCompactList}\small\item\em Unregister a protocol on an interface in \hyperlink{protocolthe-p}{the} Multicast FEA. \item\end{DoxyCompactList}\item 
\hypertarget{classMfeaNode_a0dc78bbda5e0c3fc19fbafc2481bef82}{
int \hyperlink{classMfeaNode_a0dc78bbda5e0c3fc19fbafc2481bef82}{proto\_\-recv} (const string \&, const string \&, const \hyperlink{classIPvX}{IPvX} \&, const \hyperlink{classIPvX}{IPvX} \&, uint8\_\-t, int32\_\-t, int32\_\-t, bool, bool, const vector$<$ uint8\_\-t $>$ \&, string \&)}
\label{classMfeaNode_a0dc78bbda5e0c3fc19fbafc2481bef82}

\begin{DoxyCompactList}\small\item\em UNUSED. \item\end{DoxyCompactList}\item 
\hypertarget{classMfeaNode_a3c10f005250ff19ead5d0dba7299fc17}{
int \hyperlink{classMfeaNode_a3c10f005250ff19ead5d0dba7299fc17}{proto\_\-send} (const string \&, const string \&, const \hyperlink{classIPvX}{IPvX} \&, const \hyperlink{classIPvX}{IPvX} \&, uint8\_\-t, int32\_\-t, int32\_\-t, bool, bool, const uint8\_\-t $\ast$, size\_\-t, string \&)}
\label{classMfeaNode_a3c10f005250ff19ead5d0dba7299fc17}

\begin{DoxyCompactList}\small\item\em UNUSED. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_a849f69d434801b289f7a27feeeafd928}{signal\_\-message\_\-recv} (const string \&src\_\-module\_\-instance\_\-name, int message\_\-type, uint32\_\-t vif\_\-index, const \hyperlink{classIPvX}{IPvX} \&src, const \hyperlink{classIPvX}{IPvX} \&dst, const uint8\_\-t $\ast$rcvbuf, size\_\-t rcvlen)
\begin{DoxyCompactList}\small\item\em Process NOCACHE, WRONGVIF/WRONGMIF, WHOLEPKT signals from \hyperlink{protocolthe-p}{the} kernel. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_a2e9cb4af61881a9eefdf63d07e7314dc}{signal\_\-dataflow\_\-message\_\-recv} (const \hyperlink{classIPvX}{IPvX} \&source, const \hyperlink{classIPvX}{IPvX} \&group, const \hyperlink{classTimeVal}{TimeVal} \&threshold\_\-interval, const \hyperlink{classTimeVal}{TimeVal} \&measured\_\-interval, uint32\_\-t threshold\_\-packets, uint32\_\-t threshold\_\-bytes, uint32\_\-t measured\_\-packets, uint32\_\-t measured\_\-bytes, bool is\_\-threshold\_\-in\_\-packets, bool is\_\-threshold\_\-in\_\-bytes, bool is\_\-geq\_\-upcall, bool is\_\-leq\_\-upcall)
\begin{DoxyCompactList}\small\item\em Process a dataflow upcall from \hyperlink{protocolthe-p}{the} kernel or from \hyperlink{protocolthe-p}{the} MFEA internal mechanism. \item\end{DoxyCompactList}\item 
virtual int \hyperlink{classMfeaNode_ab6132e6437fc436f67d269133cbe70a0}{dataflow\_\-signal\_\-send} (const string \&dst\_\-module\_\-instance\_\-name, const \hyperlink{classIPvX}{IPvX} \&source\_\-addr, const \hyperlink{classIPvX}{IPvX} \&group\_\-addr, uint32\_\-t threshold\_\-interval\_\-sec, uint32\_\-t threshold\_\-interval\_\-usec, uint32\_\-t measured\_\-interval\_\-sec, uint32\_\-t measured\_\-interval\_\-usec, uint32\_\-t threshold\_\-packets, uint32\_\-t threshold\_\-bytes, uint32\_\-t measured\_\-packets, uint32\_\-t measured\_\-bytes, bool is\_\-threshold\_\-in\_\-packets, bool is\_\-threshold\_\-in\_\-bytes, bool is\_\-geq\_\-upcall, bool is\_\-leq\_\-upcall)=0
\begin{DoxyCompactList}\small\item\em \hyperlink{structSend}{Send} a signal that a dataflow-\/related pre-\/condition is true. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_a3f848cf043dbfefb3c49220c74593b33}{add\_\-mfc} (const string \&module\_\-instance\_\-name, const \hyperlink{classIPvX}{IPvX} \&source, const \hyperlink{classIPvX}{IPvX} \&group, uint32\_\-t iif\_\-vif\_\-index, const Mifset \&oiflist, const Mifset \&oiflist\_\-disable\_\-wrongvif, uint32\_\-t max\_\-vifs\_\-oiflist, const \hyperlink{classIPvX}{IPvX} \&rp\_\-addr)
\begin{DoxyCompactList}\small\item\em Add Multicast Forwarding Cache (MFC) to \hyperlink{protocolthe-p}{the} kernel. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_aac66a2920e959578e795d3e68abfdfeb}{delete\_\-mfc} (const string \&module\_\-instance\_\-name, const \hyperlink{classIPvX}{IPvX} \&source, const \hyperlink{classIPvX}{IPvX} \&group)
\begin{DoxyCompactList}\small\item\em Delete Multicast Forwarding Cache (MFC) from \hyperlink{protocolthe-p}{the} kernel. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_a3258b4ef7ad50092d1f9470cfbc1bf8a}{add\_\-dataflow\_\-monitor} (const string \&module\_\-instance\_\-name, const \hyperlink{classIPvX}{IPvX} \&source, const \hyperlink{classIPvX}{IPvX} \&group, const \hyperlink{classTimeVal}{TimeVal} \&threshold\_\-interval, uint32\_\-t threshold\_\-packets, uint32\_\-t threshold\_\-bytes, bool is\_\-threshold\_\-in\_\-packets, bool is\_\-threshold\_\-in\_\-bytes, bool is\_\-geq\_\-upcall, bool is\_\-leq\_\-upcall, string \&error\_\-msg)
\begin{DoxyCompactList}\small\item\em Add a dataflow monitor entry. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_ac7504fb54b792f7b53765295c65de5b0}{delete\_\-dataflow\_\-monitor} (const string \&module\_\-instance\_\-name, const \hyperlink{classIPvX}{IPvX} \&source, const \hyperlink{classIPvX}{IPvX} \&group, const \hyperlink{classTimeVal}{TimeVal} \&threshold\_\-interval, uint32\_\-t threshold\_\-packets, uint32\_\-t threshold\_\-bytes, bool is\_\-threshold\_\-in\_\-packets, bool is\_\-threshold\_\-in\_\-bytes, bool is\_\-geq\_\-upcall, bool is\_\-leq\_\-upcall, string \&error\_\-msg)
\begin{DoxyCompactList}\small\item\em Delete a dataflow monitor entry. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_a3e4ba3d51adc6df50a6ba76845aae0bd}{delete\_\-all\_\-dataflow\_\-monitor} (const string \&module\_\-instance\_\-name, const \hyperlink{classIPvX}{IPvX} \&source, const \hyperlink{classIPvX}{IPvX} \&group, string \&error\_\-msg)
\begin{DoxyCompactList}\small\item\em Delete all dataflow monitor entries for a given source and group address. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_a815d96971843582b855186459a253f32}{add\_\-multicast\_\-vif} (uint32\_\-t vif\_\-index)
\begin{DoxyCompactList}\small\item\em Add a multicast vif to \hyperlink{protocolthe-p}{the} kernel. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_a017c1783cc79fea45c7e4836bacebc0b}{delete\_\-multicast\_\-vif} (uint32\_\-t vif\_\-index)
\begin{DoxyCompactList}\small\item\em Delete a multicast vif from \hyperlink{protocolthe-p}{the} kernel. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_a1eea5c93b6a039beab5bf8bb2b98e790}{get\_\-sg\_\-count} (const \hyperlink{classIPvX}{IPvX} \&source, const \hyperlink{classIPvX}{IPvX} \&group, \hyperlink{classSgCount}{SgCount} \&sg\_\-count)
\begin{DoxyCompactList}\small\item\em Get MFC multicast forwarding statistics from \hyperlink{protocolthe-p}{the} kernel. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_a3a0f12f373141fdcb450ca927f040a35}{get\_\-vif\_\-count} (uint32\_\-t vif\_\-index, \hyperlink{classVifCount}{VifCount} \&vif\_\-count)
\begin{DoxyCompactList}\small\item\em Get interface multicast forwarding statistics from \hyperlink{protocolthe-p}{the} kernel. \item\end{DoxyCompactList}\item 
\hyperlink{classMfeaMrouter}{MfeaMrouter} \& \hyperlink{classMfeaNode_a6c9dc603dd80fc20d59b15ff93c1da84}{mfea\_\-mrouter} ()
\begin{DoxyCompactList}\small\item\em Get a reference to \hyperlink{protocolthe-p}{the} mrouter (\hyperlink{classMfeaMrouter}{MfeaMrouter}). \item\end{DoxyCompactList}\item 
\hyperlink{classMfeaDft}{MfeaDft} \& \hyperlink{classMfeaNode_ab6b2c29406f3e0ec694a5551849ba6a7}{mfea\_\-dft} ()
\begin{DoxyCompactList}\small\item\em Get a reference to \hyperlink{protocolthe-p}{the} dataflow table (\hyperlink{classMfeaDft}{MfeaDft}). \item\end{DoxyCompactList}\item 
bool \hyperlink{classMfeaNode_a4add1156cf30d81e65af372b49c8756b}{is\_\-log\_\-trace} () const 
\begin{DoxyCompactList}\small\item\em Test if trace log is enabled. \item\end{DoxyCompactList}\item 
void \hyperlink{classMfeaNode_a6918aa6d28c8fec108c2bababd63d110}{set\_\-log\_\-trace} (bool is\_\-enabled)
\begin{DoxyCompactList}\small\item\em Enable/disable trace log. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Protected Member Functions}
\begin{DoxyCompactItemize}
\item 
\hypertarget{classMfeaNode_a589d91c5998751242788ab1cf407feaf}{
\hyperlink{classIfConfigUpdateReplicator}{IfConfigUpdateReplicator} \& {\bfseries mfea\_\-iftree\_\-update\_\-replicator} ()}
\label{classMfeaNode_a589d91c5998751242788ab1cf407feaf}

\end{DoxyCompactItemize}
\subsection*{Private Member Functions}
\begin{DoxyCompactItemize}
\item 
\hypertarget{classMfeaNode_a69b19fb70ee95293353a3f8902cae4b4}{
void {\bfseries interface\_\-update} (const string \&ifname, const Update \&update)}
\label{classMfeaNode_a69b19fb70ee95293353a3f8902cae4b4}

\item 
\hypertarget{classMfeaNode_aab68fc2968fcb8311428f0692deef1dd}{
void {\bfseries vif\_\-update} (const string \&ifname, const string \&vifname, const Update \&update)}
\label{classMfeaNode_aab68fc2968fcb8311428f0692deef1dd}

\item 
\hypertarget{classMfeaNode_a35774e9b0c783385484d87acdec33cb2}{
void {\bfseries vifaddr4\_\-update} (const string \&ifname, const string \&vifname, const \hyperlink{classIPv4}{IPv4} \&addr, const Update \&update)}
\label{classMfeaNode_a35774e9b0c783385484d87acdec33cb2}

\item 
\hypertarget{classMfeaNode_a26771b2f1f5513a5b58fcedd540607fb}{
void {\bfseries updates\_\-completed} ()}
\label{classMfeaNode_a26771b2f1f5513a5b58fcedd540607fb}

\item 
void \hyperlink{classMfeaNode_adf444630173da869c927b962f296186a}{status\_\-change} (\hyperlink{classServiceBase}{ServiceBase} $\ast$service, ServiceStatus old\_\-status, ServiceStatus new\_\-status)
\begin{DoxyCompactList}\small\item\em A method invoked when \hyperlink{protocolthe-p}{the} status of a service changes. \item\end{DoxyCompactList}\item 
int \hyperlink{classMfeaNode_aae29f6b1f6318fea001f664bdadc73ee}{add\_\-pim\_\-register\_\-vif} ()
\begin{DoxyCompactList}\small\item\em \hyperlink{classMfeaNode_aae29f6b1f6318fea001f664bdadc73ee}{MfeaNode::add\_\-pim\_\-register\_\-vif}: \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Private Attributes}
\begin{DoxyCompactItemize}
\item 
\hypertarget{classMfeaNode_a4ada3ef02e2d04efe354ff5454b9d608}{
\hyperlink{classFeaNode}{FeaNode} \& {\bfseries \_\-fea\_\-node}}
\label{classMfeaNode_a4ada3ef02e2d04efe354ff5454b9d608}

\item 
\hypertarget{classMfeaNode_ac12d86204d811707293046c72985ed58}{
\hyperlink{classMfeaMrouter}{MfeaMrouter} {\bfseries \_\-mfea\_\-mrouter}}
\label{classMfeaNode_ac12d86204d811707293046c72985ed58}

\item 
\hypertarget{classMfeaNode_a288b9a3d43bc8c549f012243d4275b4d}{
\hyperlink{classMfeaDft}{MfeaDft} {\bfseries \_\-mfea\_\-dft}}
\label{classMfeaNode_a288b9a3d43bc8c549f012243d4275b4d}

\item 
\hypertarget{classMfeaNode_a92712ad8b2c3d93ea94b95cee0d7ee76}{
set$<$ string $>$ {\bfseries \_\-registered\_\-module\_\-instance\_\-names}}
\label{classMfeaNode_a92712ad8b2c3d93ea94b95cee0d7ee76}

\item 
\hypertarget{classMfeaNode_a41ce2aded49236a9bfb87e2ce03928b5}{
set$<$ uint8\_\-t $>$ {\bfseries \_\-registered\_\-ip\_\-protocols}}
\label{classMfeaNode_a41ce2aded49236a9bfb87e2ce03928b5}

\item 
\hypertarget{classMfeaNode_ab06a1b30e480d88a6513b8f61553148e}{
\hyperlink{classIfTree}{IfTree} {\bfseries \_\-mfea\_\-iftree}}
\label{classMfeaNode_ab06a1b30e480d88a6513b8f61553148e}

\item 
\hypertarget{classMfeaNode_ae107c5759cc1f1dfa4e88e8dce9112e9}{
\hyperlink{classIfConfigUpdateReplicator}{IfConfigUpdateReplicator} {\bfseries \_\-mfea\_\-iftree\_\-update\_\-replicator}}
\label{classMfeaNode_ae107c5759cc1f1dfa4e88e8dce9112e9}

\item 
\hypertarget{classMfeaNode_a0f1e51ec1ec5b312d9fa954084a4b6ff}{
bool {\bfseries \_\-is\_\-log\_\-trace}}
\label{classMfeaNode_a0f1e51ec1ec5b312d9fa954084a4b6ff}

\end{DoxyCompactItemize}


\subsection{Detailed Description}
The MFEA node class. There should be one node per MFEA instance. There should be one instance per address family. 

\subsection{Constructor \& Destructor Documentation}
\hypertarget{classMfeaNode_a69b6aaee77bde5bb5f585f59e225f3e3}{
\index{MfeaNode@{MfeaNode}!MfeaNode@{MfeaNode}}
\index{MfeaNode@{MfeaNode}!MfeaNode@{MfeaNode}}
\subsubsection[{MfeaNode}]{\setlength{\rightskip}{0pt plus 5cm}MfeaNode::MfeaNode (
\begin{DoxyParamCaption}
\item[{{\bf FeaNode} \&}]{fea\_\-node, }
\item[{int}]{family, }
\item[{xorp\_\-module\_\-id}]{module\_\-id, }
\item[{{\bf EventLoop} \&}]{eventloop}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a69b6aaee77bde5bb5f585f59e225f3e3}


Constructor for a given address family, module ID, and event loop. 

\hyperlink{classMfeaNode_a69b6aaee77bde5bb5f585f59e225f3e3}{MfeaNode::MfeaNode}: : The corresponding \hyperlink{classFeaNode}{FeaNode}.


\begin{DoxyParams}{Parameters}
{\em fea\_\-node} & \hyperlink{protocolthe-p}{the} corresponding \hyperlink{classFeaNode}{FeaNode} (\hyperlink{classFeaNode}{FeaNode}). \\
\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 module\_\-id} & \hyperlink{protocolthe-p}{the} module ID (xorp\_\-module\_\-id). Should be equal to XORP\_\-MODULE\_\-MFEA. \\
\hline
{\em eventloop} & \hyperlink{protocolthe-p}{the} event loop to use.\\
\hline
\end{DoxyParams}
: The address family (AF\_\-INET or AF\_\-INET6 for \hyperlink{classIPv4}{IPv4} and \hyperlink{classIPv6}{IPv6} respectively). : The module ID (must be XORP\_\-MODULE\_\-MFEA). : The event loop.

MFEA node constructor. \hypertarget{classMfeaNode_a0fd5cd433687659d5043b18a5958e6b1}{
\index{MfeaNode@{MfeaNode}!$\sim$MfeaNode@{$\sim$MfeaNode}}
\index{$\sim$MfeaNode@{$\sim$MfeaNode}!MfeaNode@{MfeaNode}}
\subsubsection[{$\sim$MfeaNode}]{\setlength{\rightskip}{0pt plus 5cm}MfeaNode::$\sim$MfeaNode (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily  \mbox{[}virtual\mbox{]}}}}
\label{classMfeaNode_a0fd5cd433687659d5043b18a5958e6b1}


Destructor. 

\hyperlink{classMfeaNode_a0fd5cd433687659d5043b18a5958e6b1}{MfeaNode::$\sim$MfeaNode}: @:

MFEA node destructor. 

\subsection{Member Function Documentation}
\hypertarget{classMfeaNode_ab125258754ed70160f1197d4330645c5}{
\index{MfeaNode@{MfeaNode}!add\_\-config\_\-vif@{add\_\-config\_\-vif}}
\index{add\_\-config\_\-vif@{add\_\-config\_\-vif}!MfeaNode@{MfeaNode}}
\subsubsection[{add\_\-config\_\-vif}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::add\_\-config\_\-vif (
\begin{DoxyParamCaption}
\item[{const {\bf Vif} \&}]{vif, }
\item[{string \&}]{error\_\-msg}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_ab125258754ed70160f1197d4330645c5}


Add a configured vif. 


\begin{DoxyParams}{Parameters}
{\em vif} & \hyperlink{protocolthe-p}{the} vif with \hyperlink{protocolthe-p}{the} information to add. \\
\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}


Reimplemented from \hyperlink{classProtoNode_a37a5a0e2ecc4c0d2ed1fca8abb99f103}{ProtoNode$<$ MfeaVif $>$}.

\hypertarget{classMfeaNode_a3258b4ef7ad50092d1f9470cfbc1bf8a}{
\index{MfeaNode@{MfeaNode}!add\_\-dataflow\_\-monitor@{add\_\-dataflow\_\-monitor}}
\index{add\_\-dataflow\_\-monitor@{add\_\-dataflow\_\-monitor}!MfeaNode@{MfeaNode}}
\subsubsection[{add\_\-dataflow\_\-monitor}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::add\_\-dataflow\_\-monitor (
\begin{DoxyParamCaption}
\item[{const string \&}]{module\_\-instance\_\-name, }
\item[{const {\bf IPvX} \&}]{source, }
\item[{const {\bf IPvX} \&}]{group, }
\item[{const {\bf TimeVal} \&}]{threshold\_\-interval, }
\item[{uint32\_\-t}]{threshold\_\-packets, }
\item[{uint32\_\-t}]{threshold\_\-bytes, }
\item[{bool}]{is\_\-threshold\_\-in\_\-packets, }
\item[{bool}]{is\_\-threshold\_\-in\_\-bytes, }
\item[{bool}]{is\_\-geq\_\-upcall, }
\item[{bool}]{is\_\-leq\_\-upcall, }
\item[{string \&}]{error\_\-msg}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a3258b4ef7ad50092d1f9470cfbc1bf8a}


Add a dataflow monitor entry. 

\hyperlink{classMfeaNode_a3258b4ef7ad50092d1f9470cfbc1bf8a}{MfeaNode::add\_\-dataflow\_\-monitor}: : The module instance name of \hyperlink{protocolthe-p}{the} protocol that adds \hyperlink{protocolthe-p}{the} dataflow monitor entry.

Note: either is\_\-threshold\_\-in\_\-packets or is\_\-threshold\_\-in\_\-bytes (or both) must be true. Note: either is\_\-geq\_\-upcall or is\_\-leq\_\-upcall (but not both) must be true.


\begin{DoxyParams}{Parameters}
{\em module\_\-instance\_\-name} & \hyperlink{protocolthe-p}{the} module instance name of \hyperlink{protocolthe-p}{the} protocol that adds \hyperlink{protocolthe-p}{the} dataflow monitor entry.\\
\hline
{\em source} & \hyperlink{protocolthe-p}{the} source address.\\
\hline
{\em group} & \hyperlink{protocolthe-p}{the} group address.\\
\hline
{\em threshold\_\-interval} & \hyperlink{protocolthe-p}{the} dataflow threshold interval.\\
\hline
{\em threshold\_\-packets} & \hyperlink{protocolthe-p}{the} threshold (in number of packets) to compare against.\\
\hline
{\em threshold\_\-bytes} & \hyperlink{protocolthe-p}{the} threshold (in number of bytes) to compare against.\\
\hline
{\em is\_\-threshold\_\-in\_\-packets} & if true, threshold\_\-packets is valid.\\
\hline
{\em is\_\-threshold\_\-in\_\-bytes} & if true, threshold\_\-bytes is valid.\\
\hline
{\em is\_\-geq\_\-upcall} & if true, \hyperlink{protocolthe-p}{the} operation for comparison is \char`\"{}$>$=\char`\"{}.\\
\hline
{\em is\_\-leq\_\-upcall} & if true, \hyperlink{protocolthe-p}{the} operation for comparison is \char`\"{}$<$=\char`\"{}.\\
\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 source address. : The group address. : The dataflow threshold interval. : The threshold (in number of packets) to compare against. : The threshold (in number of bytes) to compare against. : If true,  is valid. : If true,  is valid. : If true, \hyperlink{protocolthe-p}{the} operation for comparison is \char`\"{}$>$=\char`\"{}. : If true, \hyperlink{protocolthe-p}{the} operation for comparison is \char`\"{}$<$=\char`\"{}. : The error message (if error).

Add a dataflow monitor entry. Note: either  or  (or both) must be true. Note: either  or  (but not both) must be true.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. \hypertarget{classMfeaNode_a3f848cf043dbfefb3c49220c74593b33}{
\index{MfeaNode@{MfeaNode}!add\_\-mfc@{add\_\-mfc}}
\index{add\_\-mfc@{add\_\-mfc}!MfeaNode@{MfeaNode}}
\subsubsection[{add\_\-mfc}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::add\_\-mfc (
\begin{DoxyParamCaption}
\item[{const string \&}]{module\_\-instance\_\-name, }
\item[{const {\bf IPvX} \&}]{source, }
\item[{const {\bf IPvX} \&}]{group, }
\item[{uint32\_\-t}]{iif\_\-vif\_\-index, }
\item[{const Mifset \&}]{oiflist, }
\item[{const Mifset \&}]{oiflist\_\-disable\_\-wrongvif, }
\item[{uint32\_\-t}]{max\_\-vifs\_\-oiflist, }
\item[{const {\bf IPvX} \&}]{rp\_\-addr}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a3f848cf043dbfefb3c49220c74593b33}


Add Multicast Forwarding Cache (MFC) to \hyperlink{protocolthe-p}{the} kernel. 

\hyperlink{classMfeaNode_a3f848cf043dbfefb3c49220c74593b33}{MfeaNode::add\_\-mfc}: : The module instance name of \hyperlink{protocolthe-p}{the} protocol that adds \hyperlink{protocolthe-p}{the} MFC.


\begin{DoxyParams}{Parameters}
{\em module\_\-instance\_\-name} & \hyperlink{protocolthe-p}{the} module instance name of \hyperlink{protocolthe-p}{the} protocol that adds \hyperlink{protocolthe-p}{the} MFC.\\
\hline
{\em source} & \hyperlink{protocolthe-p}{the} source address.\\
\hline
{\em group} & \hyperlink{protocolthe-p}{the} group address.\\
\hline
{\em iif\_\-vif\_\-index} & \hyperlink{protocolthe-p}{the} vif index of \hyperlink{protocolthe-p}{the} incoming interface.\\
\hline
{\em oiflist} & \hyperlink{protocolthe-p}{the} bitset with \hyperlink{protocolthe-p}{the} outgoing interfaces.\\
\hline
{\em oiflist\_\-disable\_\-wrongvif} & \hyperlink{protocolthe-p}{the} bitset with \hyperlink{protocolthe-p}{the} outgoing interfaces to disable \hyperlink{protocolthe-p}{the} WRONGVIF signal.\\
\hline
{\em max\_\-vifs\_\-oiflist} & \hyperlink{protocolthe-p}{the} number of vifs covered by oiflist or oiflist\_\-disable\_\-wrongvif.\\
\hline
{\em rp\_\-addr} & \hyperlink{protocolthe-p}{the} RP address.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR.
\end{DoxyReturn}
: The source address. : The group address. : The vif index of \hyperlink{protocolthe-p}{the} incoming interface. : The bitset with \hyperlink{protocolthe-p}{the} outgoing interfaces. : The bitset with \hyperlink{protocolthe-p}{the} outgoing interfaces to disable \hyperlink{protocolthe-p}{the} WRONGVIF signal. : The number of vifs covered by  or . : The RP address.

Add Multicast Forwarding Cache (MFC) to \hyperlink{protocolthe-p}{the} kernel.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. \hypertarget{classMfeaNode_a815d96971843582b855186459a253f32}{
\index{MfeaNode@{MfeaNode}!add\_\-multicast\_\-vif@{add\_\-multicast\_\-vif}}
\index{add\_\-multicast\_\-vif@{add\_\-multicast\_\-vif}!MfeaNode@{MfeaNode}}
\subsubsection[{add\_\-multicast\_\-vif}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::add\_\-multicast\_\-vif (
\begin{DoxyParamCaption}
\item[{uint32\_\-t}]{vif\_\-index}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a815d96971843582b855186459a253f32}


Add a multicast vif to \hyperlink{protocolthe-p}{the} kernel. 

\hyperlink{classMfeaNode_a815d96971843582b855186459a253f32}{MfeaNode::add\_\-multicast\_\-vif}: : The vif index of \hyperlink{protocolthe-p}{the} interface to add.


\begin{DoxyParams}{Parameters}
{\em vif\_\-index} & \hyperlink{protocolthe-p}{the} vif index of \hyperlink{protocolthe-p}{the} interface to add. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR.
\end{DoxyReturn}
Add a multicast vif to \hyperlink{protocolthe-p}{the} kernel.

Return value: XORP\_\-OK on success, othewise XORP\_\-ERROR. \hypertarget{classMfeaNode_aae29f6b1f6318fea001f664bdadc73ee}{
\index{MfeaNode@{MfeaNode}!add\_\-pim\_\-register\_\-vif@{add\_\-pim\_\-register\_\-vif}}
\index{add\_\-pim\_\-register\_\-vif@{add\_\-pim\_\-register\_\-vif}!MfeaNode@{MfeaNode}}
\subsubsection[{add\_\-pim\_\-register\_\-vif}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::add\_\-pim\_\-register\_\-vif (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily  \mbox{[}private\mbox{]}}}}
\label{classMfeaNode_aae29f6b1f6318fea001f664bdadc73ee}


\hyperlink{classMfeaNode_aae29f6b1f6318fea001f664bdadc73ee}{MfeaNode::add\_\-pim\_\-register\_\-vif}: 

Install a new MFEA PIM Register vif (if needed).

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. \hypertarget{classMfeaNode_a03be1cd00bae0ac7c7e4a432c8c15667}{
\index{MfeaNode@{MfeaNode}!add\_\-vif@{add\_\-vif}}
\index{add\_\-vif@{add\_\-vif}!MfeaNode@{MfeaNode}}
\subsubsection[{add\_\-vif}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::add\_\-vif (
\begin{DoxyParamCaption}
\item[{const {\bf Vif} \&}]{vif, }
\item[{string \&}]{error\_\-msg}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a03be1cd00bae0ac7c7e4a432c8c15667}


Install a new MFEA vif. 

\hyperlink{classMfeaNode_a03be1cd00bae0ac7c7e4a432c8c15667}{MfeaNode::add\_\-vif}: : \hyperlink{classVif}{Vif} information about \hyperlink{protocolthe-p}{the} new \hyperlink{classMfeaVif}{MfeaVif} to install.


\begin{DoxyParams}{Parameters}
{\em vif} & vif information about \hyperlink{protocolthe-p}{the} new \hyperlink{classMfeaVif}{MfeaVif} to install. \\
\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 error message (if error).

Install a new MFEA vif.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. \hypertarget{classMfeaNode_ab6132e6437fc436f67d269133cbe70a0}{
\index{MfeaNode@{MfeaNode}!dataflow\_\-signal\_\-send@{dataflow\_\-signal\_\-send}}
\index{dataflow\_\-signal\_\-send@{dataflow\_\-signal\_\-send}!MfeaNode@{MfeaNode}}
\subsubsection[{dataflow\_\-signal\_\-send}]{\setlength{\rightskip}{0pt plus 5cm}virtual int MfeaNode::dataflow\_\-signal\_\-send (
\begin{DoxyParamCaption}
\item[{const string \&}]{dst\_\-module\_\-instance\_\-name, }
\item[{const {\bf IPvX} \&}]{source\_\-addr, }
\item[{const {\bf IPvX} \&}]{group\_\-addr, }
\item[{uint32\_\-t}]{threshold\_\-interval\_\-sec, }
\item[{uint32\_\-t}]{threshold\_\-interval\_\-usec, }
\item[{uint32\_\-t}]{measured\_\-interval\_\-sec, }
\item[{uint32\_\-t}]{measured\_\-interval\_\-usec, }
\item[{uint32\_\-t}]{threshold\_\-packets, }
\item[{uint32\_\-t}]{threshold\_\-bytes, }
\item[{uint32\_\-t}]{measured\_\-packets, }
\item[{uint32\_\-t}]{measured\_\-bytes, }
\item[{bool}]{is\_\-threshold\_\-in\_\-packets, }
\item[{bool}]{is\_\-threshold\_\-in\_\-bytes, }
\item[{bool}]{is\_\-geq\_\-upcall, }
\item[{bool}]{is\_\-leq\_\-upcall}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily  \mbox{[}pure virtual\mbox{]}}}}
\label{classMfeaNode_ab6132e6437fc436f67d269133cbe70a0}


\hyperlink{structSend}{Send} a signal that a dataflow-\/related pre-\/condition is true. 

This is a pure virtual function, and it must be implemented by \hyperlink{protocolthe-p}{the} communication-\/wrapper class that inherits this base class.

Note: either is\_\-threshold\_\-in\_\-packets or is\_\-threshold\_\-in\_\-bytes (or both) must be true. Note: either is\_\-geq\_\-upcall or is\_\-leq\_\-upcall (but not both) must be true.


\begin{DoxyParams}{Parameters}
{\em dst\_\-module\_\-instance\_\-name} & \hyperlink{protocolthe-p}{the} module instance name of \hyperlink{protocolthe-p}{the} module-\/recepient of \hyperlink{protocolthe-p}{the} message.\\
\hline
{\em source\_\-addr} & \hyperlink{protocolthe-p}{the} source address of \hyperlink{protocolthe-p}{the} dataflow.\\
\hline
{\em group\_\-addr} & \hyperlink{protocolthe-p}{the} group address of \hyperlink{protocolthe-p}{the} dataflow.\\
\hline
{\em threshold\_\-interval\_\-sec} & \hyperlink{protocolthe-p}{the} number of seconds in \hyperlink{protocolthe-p}{the} interval requested for measurement.\\
\hline
{\em threshold\_\-interval\_\-usec} & \hyperlink{protocolthe-p}{the} number of microseconds in \hyperlink{protocolthe-p}{the} interval requested for measurement.\\
\hline
{\em measured\_\-interval\_\-sec} & \hyperlink{protocolthe-p}{the} number of seconds in \hyperlink{protocolthe-p}{the} last measured interval that has triggered \hyperlink{protocolthe-p}{the} signal.\\
\hline
{\em measured\_\-interval\_\-usec} & \hyperlink{protocolthe-p}{the} number of microseconds in \hyperlink{protocolthe-p}{the} last measured interval that has triggered \hyperlink{protocolthe-p}{the} signal.\\
\hline
{\em threshold\_\-packets} & \hyperlink{protocolthe-p}{the} threshold value to trigger a signal (in number of packets).\\
\hline
{\em threshold\_\-bytes} & \hyperlink{protocolthe-p}{the} threshold value to trigger a signal (in bytes).\\
\hline
{\em measured\_\-packets} & \hyperlink{protocolthe-p}{the} number of packets measured within \hyperlink{protocolthe-p}{the} measured\_\-interval.\\
\hline
{\em measured\_\-bytes} & \hyperlink{protocolthe-p}{the} number of bytes measured within \hyperlink{protocolthe-p}{the} measured\_\-interval.\\
\hline
{\em is\_\-threshold\_\-in\_\-packets} & if true, threshold\_\-packets is valid.\\
\hline
{\em is\_\-threshold\_\-in\_\-bytes} & if true, threshold\_\-bytes is valid.\\
\hline
{\em is\_\-geq\_\-upcall} & if true, \hyperlink{protocolthe-p}{the} operation for comparison is \char`\"{}$>$=\char`\"{}.\\
\hline
{\em is\_\-leq\_\-upcall} & if true, \hyperlink{protocolthe-p}{the} operation for comparison is \char`\"{}$<$=\char`\"{}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR. 
\end{DoxyReturn}


Implemented in \hyperlink{classXrlMfeaNode_a01bc4f712d9ac3430fca7f30e49375fb}{XrlMfeaNode}.

\hypertarget{classMfeaNode_a3e4ba3d51adc6df50a6ba76845aae0bd}{
\index{MfeaNode@{MfeaNode}!delete\_\-all\_\-dataflow\_\-monitor@{delete\_\-all\_\-dataflow\_\-monitor}}
\index{delete\_\-all\_\-dataflow\_\-monitor@{delete\_\-all\_\-dataflow\_\-monitor}!MfeaNode@{MfeaNode}}
\subsubsection[{delete\_\-all\_\-dataflow\_\-monitor}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::delete\_\-all\_\-dataflow\_\-monitor (
\begin{DoxyParamCaption}
\item[{const string \&}]{module\_\-instance\_\-name, }
\item[{const {\bf IPvX} \&}]{source, }
\item[{const {\bf IPvX} \&}]{group, }
\item[{string \&}]{error\_\-msg}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a3e4ba3d51adc6df50a6ba76845aae0bd}


Delete all dataflow monitor entries for a given source and group address. 

\hyperlink{classMfeaNode_a3e4ba3d51adc6df50a6ba76845aae0bd}{MfeaNode::delete\_\-all\_\-dataflow\_\-monitor}: : The module instance name of \hyperlink{protocolthe-p}{the} protocol that deletes \hyperlink{protocolthe-p}{the} dataflow monitor entry.


\begin{DoxyParams}{Parameters}
{\em module\_\-instance\_\-name} & \hyperlink{protocolthe-p}{the} module instance name of \hyperlink{protocolthe-p}{the} protocol that deletes \hyperlink{protocolthe-p}{the} dataflow monitor entry.\\
\hline
{\em source} & \hyperlink{protocolthe-p}{the} source address.\\
\hline
{\em group} & \hyperlink{protocolthe-p}{the} group address.\\
\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 source address. : The group address. : The error message (if error).

Delete all dataflow monitor entries for a given  and  address.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. \hypertarget{classMfeaNode_aba5575c98bb4968df6f0749c0827573c}{
\index{MfeaNode@{MfeaNode}!delete\_\-all\_\-vifs@{delete\_\-all\_\-vifs}}
\index{delete\_\-all\_\-vifs@{delete\_\-all\_\-vifs}!MfeaNode@{MfeaNode}}
\subsubsection[{delete\_\-all\_\-vifs}]{\setlength{\rightskip}{0pt plus 5cm}void MfeaNode::delete\_\-all\_\-vifs (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_aba5575c98bb4968df6f0749c0827573c}


Delete all MFEA vifs. 

\hyperlink{classMfeaNode_aba5575c98bb4968df6f0749c0827573c}{MfeaNode::delete\_\-all\_\-vifs}: @: \hypertarget{classMfeaNode_ac7504fb54b792f7b53765295c65de5b0}{
\index{MfeaNode@{MfeaNode}!delete\_\-dataflow\_\-monitor@{delete\_\-dataflow\_\-monitor}}
\index{delete\_\-dataflow\_\-monitor@{delete\_\-dataflow\_\-monitor}!MfeaNode@{MfeaNode}}
\subsubsection[{delete\_\-dataflow\_\-monitor}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::delete\_\-dataflow\_\-monitor (
\begin{DoxyParamCaption}
\item[{const string \&}]{module\_\-instance\_\-name, }
\item[{const {\bf IPvX} \&}]{source, }
\item[{const {\bf IPvX} \&}]{group, }
\item[{const {\bf TimeVal} \&}]{threshold\_\-interval, }
\item[{uint32\_\-t}]{threshold\_\-packets, }
\item[{uint32\_\-t}]{threshold\_\-bytes, }
\item[{bool}]{is\_\-threshold\_\-in\_\-packets, }
\item[{bool}]{is\_\-threshold\_\-in\_\-bytes, }
\item[{bool}]{is\_\-geq\_\-upcall, }
\item[{bool}]{is\_\-leq\_\-upcall, }
\item[{string \&}]{error\_\-msg}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_ac7504fb54b792f7b53765295c65de5b0}


Delete a dataflow monitor entry. 

\hyperlink{classMfeaNode_ac7504fb54b792f7b53765295c65de5b0}{MfeaNode::delete\_\-dataflow\_\-monitor}: : The module instance name of \hyperlink{protocolthe-p}{the} protocol that deletes \hyperlink{protocolthe-p}{the} dataflow monitor entry.

Note: either is\_\-threshold\_\-in\_\-packets or is\_\-threshold\_\-in\_\-bytes (or both) must be true. Note: either is\_\-geq\_\-upcall or is\_\-leq\_\-upcall (but not both) must be true.


\begin{DoxyParams}{Parameters}
{\em module\_\-instance\_\-name} & \hyperlink{protocolthe-p}{the} module instance name of \hyperlink{protocolthe-p}{the} protocol that deletes \hyperlink{protocolthe-p}{the} dataflow monitor entry.\\
\hline
{\em source} & \hyperlink{protocolthe-p}{the} source address.\\
\hline
{\em group} & \hyperlink{protocolthe-p}{the} group address.\\
\hline
{\em threshold\_\-interval} & \hyperlink{protocolthe-p}{the} dataflow threshold interval.\\
\hline
{\em threshold\_\-packets} & \hyperlink{protocolthe-p}{the} threshold (in number of packets) to compare against.\\
\hline
{\em threshold\_\-bytes} & \hyperlink{protocolthe-p}{the} threshold (in number of bytes) to compare against.\\
\hline
{\em is\_\-threshold\_\-in\_\-packets} & if true, threshold\_\-packets is valid.\\
\hline
{\em is\_\-threshold\_\-in\_\-bytes} & if true, threshold\_\-bytes is valid.\\
\hline
{\em is\_\-geq\_\-upcall} & if true, \hyperlink{protocolthe-p}{the} operation for comparison is \char`\"{}$>$=\char`\"{}.\\
\hline
{\em is\_\-leq\_\-upcall} & if true, \hyperlink{protocolthe-p}{the} operation for comparison is \char`\"{}$<$=\char`\"{}.\\
\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 source address. : The group address. : The dataflow threshold interval. : The threshold (in number of packets) to compare against. : The threshold (in number of bytes) to compare against. : If true,  is valid. : If true,  is valid. : If true, \hyperlink{protocolthe-p}{the} operation for comparison is \char`\"{}$>$=\char`\"{}. : If true, \hyperlink{protocolthe-p}{the} operation for comparison is \char`\"{}$<$=\char`\"{}. : The error message (if error).

Delete a dataflow monitor entry. Note: either  or  (or both) must be true. Note: either  or  (but not both) must be true.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. \hypertarget{classMfeaNode_aac66a2920e959578e795d3e68abfdfeb}{
\index{MfeaNode@{MfeaNode}!delete\_\-mfc@{delete\_\-mfc}}
\index{delete\_\-mfc@{delete\_\-mfc}!MfeaNode@{MfeaNode}}
\subsubsection[{delete\_\-mfc}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::delete\_\-mfc (
\begin{DoxyParamCaption}
\item[{const string \&}]{module\_\-instance\_\-name, }
\item[{const {\bf IPvX} \&}]{source, }
\item[{const {\bf IPvX} \&}]{group}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_aac66a2920e959578e795d3e68abfdfeb}


Delete Multicast Forwarding Cache (MFC) from \hyperlink{protocolthe-p}{the} kernel. 

\hyperlink{classMfeaNode_aac66a2920e959578e795d3e68abfdfeb}{MfeaNode::delete\_\-mfc}: : The module instance name of \hyperlink{protocolthe-p}{the} protocol that deletes \hyperlink{protocolthe-p}{the} MFC.

Note: all corresponding dataflow entries are also removed.


\begin{DoxyParams}{Parameters}
{\em module\_\-instance\_\-name} & \hyperlink{protocolthe-p}{the} module instance name of \hyperlink{protocolthe-p}{the} protocol that deletes \hyperlink{protocolthe-p}{the} MFC.\\
\hline
{\em source} & \hyperlink{protocolthe-p}{the} source address.\\
\hline
{\em group} & \hyperlink{protocolthe-p}{the} group address.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR.
\end{DoxyReturn}
: The source address. : The group address.

Delete Multicast Forwarding Cache (MFC) from \hyperlink{protocolthe-p}{the} kernel. XXX: All corresponding dataflow entries are also removed.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. \hypertarget{classMfeaNode_a017c1783cc79fea45c7e4836bacebc0b}{
\index{MfeaNode@{MfeaNode}!delete\_\-multicast\_\-vif@{delete\_\-multicast\_\-vif}}
\index{delete\_\-multicast\_\-vif@{delete\_\-multicast\_\-vif}!MfeaNode@{MfeaNode}}
\subsubsection[{delete\_\-multicast\_\-vif}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::delete\_\-multicast\_\-vif (
\begin{DoxyParamCaption}
\item[{uint32\_\-t}]{vif\_\-index}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a017c1783cc79fea45c7e4836bacebc0b}


Delete a multicast vif from \hyperlink{protocolthe-p}{the} kernel. 

\hyperlink{classMfeaNode_a017c1783cc79fea45c7e4836bacebc0b}{MfeaNode::delete\_\-multicast\_\-vif}: : The vif index of \hyperlink{protocolthe-p}{the} interface to delete.


\begin{DoxyParams}{Parameters}
{\em vif\_\-index} & \hyperlink{protocolthe-p}{the} vif index of \hyperlink{protocolthe-p}{the} interface to delete. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR.
\end{DoxyReturn}
Delete a multicast vif from \hyperlink{protocolthe-p}{the} kernel.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. \hypertarget{classMfeaNode_a0e0f78e0be1883ae44e13824ad16577c}{
\index{MfeaNode@{MfeaNode}!delete\_\-vif@{delete\_\-vif}}
\index{delete\_\-vif@{delete\_\-vif}!MfeaNode@{MfeaNode}}
\subsubsection[{delete\_\-vif}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::delete\_\-vif (
\begin{DoxyParamCaption}
\item[{const string \&}]{vif\_\-name, }
\item[{string \&}]{error\_\-msg}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a0e0f78e0be1883ae44e13824ad16577c}


Delete an existing MFEA vif. 

\hyperlink{classMfeaNode_a0e0f78e0be1883ae44e13824ad16577c}{MfeaNode::delete\_\-vif}: : The name of \hyperlink{protocolthe-p}{the} vif to delete.


\begin{DoxyParams}{Parameters}
{\em vif\_\-name} & \hyperlink{protocolthe-p}{the} name of \hyperlink{protocolthe-p}{the} vif to delete. \\
\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 error message (if error).

Delete an existing MFEA vif.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. \hypertarget{classMfeaNode_a311b3079f92c06de23bed83244719e86}{
\index{MfeaNode@{MfeaNode}!disable@{disable}}
\index{disable@{disable}!MfeaNode@{MfeaNode}}
\subsubsection[{disable}]{\setlength{\rightskip}{0pt plus 5cm}void MfeaNode::disable (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a311b3079f92c06de23bed83244719e86}


Disable node operation. 

Disable \hyperlink{protocolthe-p}{the} node operation.

If an unit is disabled, it cannot be start or pending-\/start. If \hyperlink{protocolthe-p}{the} unit was runnning, it will be stop first. 

Reimplemented from \hyperlink{classProtoState_a42bbb9a9fa9588ec66f62d99644f3c48}{ProtoState}.

\hypertarget{classMfeaNode_a3a72e7da62414ed14e646bf47d61de2a}{
\index{MfeaNode@{MfeaNode}!disable\_\-all\_\-vifs@{disable\_\-all\_\-vifs}}
\index{disable\_\-all\_\-vifs@{disable\_\-all\_\-vifs}!MfeaNode@{MfeaNode}}
\subsubsection[{disable\_\-all\_\-vifs}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::disable\_\-all\_\-vifs (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a3a72e7da62414ed14e646bf47d61de2a}


Disable MFEA on all interfaces. 

\hyperlink{classMfeaNode_a3a72e7da62414ed14e646bf47d61de2a}{MfeaNode::disable\_\-all\_\-vifs}: @:

All running interfaces are stopped first.

\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR.
\end{DoxyReturn}
Disable MFEA on all interfaces. All running interfaces are stopped first.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. \hypertarget{classMfeaNode_a419fe3a30beb11b77ecfadfb1ff597e6}{
\index{MfeaNode@{MfeaNode}!disable\_\-vif@{disable\_\-vif}}
\index{disable\_\-vif@{disable\_\-vif}!MfeaNode@{MfeaNode}}
\subsubsection[{disable\_\-vif}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::disable\_\-vif (
\begin{DoxyParamCaption}
\item[{const string \&}]{vif\_\-name, }
\item[{string \&}]{error\_\-msg}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a419fe3a30beb11b77ecfadfb1ff597e6}


Disable an existing MFEA vif. 

\hyperlink{classMfeaNode_a419fe3a30beb11b77ecfadfb1ff597e6}{MfeaNode::disable\_\-vif}: : The name of \hyperlink{protocolthe-p}{the} vif to disable.


\begin{DoxyParams}{Parameters}
{\em vif\_\-name} & \hyperlink{protocolthe-p}{the} name of \hyperlink{protocolthe-p}{the} vif to disable. \\
\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 error message (if error).

Disable an existing MFEA vif.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. \hypertarget{classMfeaNode_ac49b49c395c11f0cd0a7039635ea6394}{
\index{MfeaNode@{MfeaNode}!enable@{enable}}
\index{enable@{enable}!MfeaNode@{MfeaNode}}
\subsubsection[{enable}]{\setlength{\rightskip}{0pt plus 5cm}void MfeaNode::enable (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_ac49b49c395c11f0cd0a7039635ea6394}


Enable node operation. 

Enable \hyperlink{protocolthe-p}{the} node operation.

If an unit is not enabled, it cannot be start, or pending-\/start. 

Reimplemented from \hyperlink{classProtoState_a9e91d1d442f873cf6bf914db996519e7}{ProtoState}.

\hypertarget{classMfeaNode_ad6eb69963d11085fbef4823bf6f1c522}{
\index{MfeaNode@{MfeaNode}!enable\_\-all\_\-vifs@{enable\_\-all\_\-vifs}}
\index{enable\_\-all\_\-vifs@{enable\_\-all\_\-vifs}!MfeaNode@{MfeaNode}}
\subsubsection[{enable\_\-all\_\-vifs}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::enable\_\-all\_\-vifs (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_ad6eb69963d11085fbef4823bf6f1c522}


Enable MFEA on all interfaces. 

\hyperlink{classMfeaNode_ad6eb69963d11085fbef4823bf6f1c522}{MfeaNode::enable\_\-all\_\-vifs}: @:

\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR.
\end{DoxyReturn}
Enable MFEA on all interfaces.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. \hypertarget{classMfeaNode_a9eb370df6c9971a1aa98a49475740c72}{
\index{MfeaNode@{MfeaNode}!enable\_\-vif@{enable\_\-vif}}
\index{enable\_\-vif@{enable\_\-vif}!MfeaNode@{MfeaNode}}
\subsubsection[{enable\_\-vif}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::enable\_\-vif (
\begin{DoxyParamCaption}
\item[{const string \&}]{vif\_\-name, }
\item[{string \&}]{error\_\-msg}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a9eb370df6c9971a1aa98a49475740c72}


Enable an existing MFEA vif. 

\hyperlink{classMfeaNode_a9eb370df6c9971a1aa98a49475740c72}{MfeaNode::enable\_\-vif}: : The name of \hyperlink{protocolthe-p}{the} vif to enable.


\begin{DoxyParams}{Parameters}
{\em vif\_\-name} & \hyperlink{protocolthe-p}{the} name of \hyperlink{protocolthe-p}{the} vif to enable. \\
\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 error message (if error).

Enable an existing MFEA vif.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. \hypertarget{classMfeaNode_a9a1358ac08a49908232f37e3cd1ab7f6}{
\index{MfeaNode@{MfeaNode}!fea\_\-node@{fea\_\-node}}
\index{fea\_\-node@{fea\_\-node}!MfeaNode@{MfeaNode}}
\subsubsection[{fea\_\-node}]{\setlength{\rightskip}{0pt plus 5cm}{\bf FeaNode}\& MfeaNode::fea\_\-node (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily  \mbox{[}inline\mbox{]}}}}
\label{classMfeaNode_a9a1358ac08a49908232f37e3cd1ab7f6}


Get \hyperlink{protocolthe-p}{the} FEA node instance. 

\begin{DoxyReturn}{Returns}
reference to \hyperlink{protocolthe-p}{the} FEA node instance. 
\end{DoxyReturn}
\hypertarget{classMfeaNode_a6e7670569d6980e393902ba654d3f322}{
\index{MfeaNode@{MfeaNode}!final\_\-start@{final\_\-start}}
\index{final\_\-start@{final\_\-start}!MfeaNode@{MfeaNode}}
\subsubsection[{final\_\-start}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::final\_\-start (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a6e7670569d6980e393902ba654d3f322}


Completely start \hyperlink{protocolthe-p}{the} node operation. 

\hyperlink{classMfeaNode_a6e7670569d6980e393902ba654d3f322}{MfeaNode::final\_\-start}: @:

This method should be called internally after \hyperlink{classMfeaNode_a1ea0bb20c73aabd57f2a79420408d744}{MfeaNode::start()} to complete \hyperlink{protocolthe-p}{the} job.

\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR.
\end{DoxyReturn}
Completely start \hyperlink{protocolthe-p}{the} node operation.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. \hypertarget{classMfeaNode_aa2a3a606b45a98cc640b171b0d1c530a}{
\index{MfeaNode@{MfeaNode}!final\_\-stop@{final\_\-stop}}
\index{final\_\-stop@{final\_\-stop}!MfeaNode@{MfeaNode}}
\subsubsection[{final\_\-stop}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::final\_\-stop (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_aa2a3a606b45a98cc640b171b0d1c530a}


Completely stop \hyperlink{protocolthe-p}{the} node operation. 

\hyperlink{classMfeaNode_aa2a3a606b45a98cc640b171b0d1c530a}{MfeaNode::final\_\-stop}: @:

This method should be called internally after \hyperlink{classMfeaNode_af630e3cbf23b810920313de2d6cb6b7b}{MfeaNode::stop()} to complete \hyperlink{protocolthe-p}{the} job.

\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR.
\end{DoxyReturn}
Completely stop \hyperlink{protocolthe-p}{the} MFEA operation.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. \hypertarget{classMfeaNode_a1eea5c93b6a039beab5bf8bb2b98e790}{
\index{MfeaNode@{MfeaNode}!get\_\-sg\_\-count@{get\_\-sg\_\-count}}
\index{get\_\-sg\_\-count@{get\_\-sg\_\-count}!MfeaNode@{MfeaNode}}
\subsubsection[{get\_\-sg\_\-count}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::get\_\-sg\_\-count (
\begin{DoxyParamCaption}
\item[{const {\bf IPvX} \&}]{source, }
\item[{const {\bf IPvX} \&}]{group, }
\item[{{\bf SgCount} \&}]{sg\_\-count}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a1eea5c93b6a039beab5bf8bb2b98e790}


Get MFC multicast forwarding statistics from \hyperlink{protocolthe-p}{the} kernel. 

\hyperlink{classMfeaNode_a1eea5c93b6a039beab5bf8bb2b98e790}{MfeaNode::get\_\-sg\_\-count}: : The MFC source address.

Get \hyperlink{protocolthe-p}{the} number of packets and bytes forwarded by a particular Multicast Forwarding Cache (MFC) entry in \hyperlink{protocolthe-p}{the} kernel, and \hyperlink{protocolthe-p}{the} number of packets arrived on wrong interface for that entry.


\begin{DoxyParams}{Parameters}
{\em source} & \hyperlink{protocolthe-p}{the} MFC source address. \\
\hline
{\em group} & \hyperlink{protocolthe-p}{the} MFC group address. \\
\hline
{\em sg\_\-count} & a reference to a \hyperlink{classSgCount}{SgCount} class to place \hyperlink{protocolthe-p}{the} result: \hyperlink{protocolthe-p}{the} number of packets and bytes forwarded by \hyperlink{protocolthe-p}{the} particular MFC entry, and \hyperlink{protocolthe-p}{the} number of packets arrived on a wrong interface. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR.
\end{DoxyReturn}
: The MFC group address. : A reference to a \hyperlink{classSgCount}{SgCount} class to place \hyperlink{protocolthe-p}{the} result: \hyperlink{protocolthe-p}{the} number of packets and bytes forwarded by \hyperlink{protocolthe-p}{the} particular MFC entry, and \hyperlink{protocolthe-p}{the} number of packets arrived on a wrong interface.

Get \hyperlink{protocolthe-p}{the} number of packets and bytes forwarded by a particular Multicast Forwarding Cache (MFC) entry in \hyperlink{protocolthe-p}{the} kernel, and \hyperlink{protocolthe-p}{the} number of packets arrived on wrong interface for that entry.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. \hypertarget{classMfeaNode_a3a0f12f373141fdcb450ca927f040a35}{
\index{MfeaNode@{MfeaNode}!get\_\-vif\_\-count@{get\_\-vif\_\-count}}
\index{get\_\-vif\_\-count@{get\_\-vif\_\-count}!MfeaNode@{MfeaNode}}
\subsubsection[{get\_\-vif\_\-count}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::get\_\-vif\_\-count (
\begin{DoxyParamCaption}
\item[{uint32\_\-t}]{vif\_\-index, }
\item[{{\bf VifCount} \&}]{vif\_\-count}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a3a0f12f373141fdcb450ca927f040a35}


Get interface multicast forwarding statistics from \hyperlink{protocolthe-p}{the} kernel. 

\hyperlink{classMfeaNode_a3a0f12f373141fdcb450ca927f040a35}{MfeaNode::get\_\-vif\_\-count}: : The vif index of \hyperlink{protocolthe-p}{the} virtual multicast interface whose statistics we need.

Get \hyperlink{protocolthe-p}{the} number of packets and bytes received on, or forwarded on a particular multicast interface.


\begin{DoxyParams}{Parameters}
{\em vif\_\-index} & \hyperlink{protocolthe-p}{the} vif index of \hyperlink{protocolthe-p}{the} virtual multicast interface whose statistics we need. \\
\hline
{\em vif\_\-count} & a reference to a \hyperlink{classVifCount}{VifCount} class to store \hyperlink{protocolthe-p}{the} result. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR.
\end{DoxyReturn}
: A reference to a \hyperlink{classVifCount}{VifCount} class to store \hyperlink{protocolthe-p}{the} result.

Get \hyperlink{protocolthe-p}{the} number of packets and bytes received on, or forwarded on a particular multicast interface.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. \hypertarget{classMfeaNode_a564d48891c74d78d041220efd9b24133}{
\index{MfeaNode@{MfeaNode}!have\_\-multicast\_\-routing4@{have\_\-multicast\_\-routing4}}
\index{have\_\-multicast\_\-routing4@{have\_\-multicast\_\-routing4}!MfeaNode@{MfeaNode}}
\subsubsection[{have\_\-multicast\_\-routing4}]{\setlength{\rightskip}{0pt plus 5cm}bool MfeaNode::have\_\-multicast\_\-routing4 (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
) const\hspace{0.3cm}{\ttfamily  \mbox{[}inline\mbox{]}}}}
\label{classMfeaNode_a564d48891c74d78d041220efd9b24133}


Test if \hyperlink{protocolthe-p}{the} underlying system supports \hyperlink{classIPv4}{IPv4} multicast routing. 

\begin{DoxyReturn}{Returns}
true if \hyperlink{protocolthe-p}{the} underlying system supports \hyperlink{classIPv4}{IPv4} multicast routing, otherwise false. 
\end{DoxyReturn}
\hypertarget{classMfeaNode_a0b367f637625c53514684a2cddf12063}{
\index{MfeaNode@{MfeaNode}!is\_\-dummy@{is\_\-dummy}}
\index{is\_\-dummy@{is\_\-dummy}!MfeaNode@{MfeaNode}}
\subsubsection[{is\_\-dummy}]{\setlength{\rightskip}{0pt plus 5cm}bool MfeaNode::is\_\-dummy (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
) const}}
\label{classMfeaNode_a0b367f637625c53514684a2cddf12063}


Test if running in dummy mode. 

\begin{DoxyReturn}{Returns}
true if running in dummy mode, otherwise false. 
\end{DoxyReturn}
\hypertarget{classMfeaNode_a4add1156cf30d81e65af372b49c8756b}{
\index{MfeaNode@{MfeaNode}!is\_\-log\_\-trace@{is\_\-log\_\-trace}}
\index{is\_\-log\_\-trace@{is\_\-log\_\-trace}!MfeaNode@{MfeaNode}}
\subsubsection[{is\_\-log\_\-trace}]{\setlength{\rightskip}{0pt plus 5cm}bool MfeaNode::is\_\-log\_\-trace (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
) const\hspace{0.3cm}{\ttfamily  \mbox{[}inline\mbox{]}}}}
\label{classMfeaNode_a4add1156cf30d81e65af372b49c8756b}


Test if trace log is enabled. 

This method is used to test whether to output trace log debug messges.

\begin{DoxyReturn}{Returns}
true if trace log is enabled, otherwise false. 
\end{DoxyReturn}
\hypertarget{classMfeaNode_ab6b2c29406f3e0ec694a5551849ba6a7}{
\index{MfeaNode@{MfeaNode}!mfea\_\-dft@{mfea\_\-dft}}
\index{mfea\_\-dft@{mfea\_\-dft}!MfeaNode@{MfeaNode}}
\subsubsection[{mfea\_\-dft}]{\setlength{\rightskip}{0pt plus 5cm}{\bf MfeaDft}\& MfeaNode::mfea\_\-dft (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily  \mbox{[}inline\mbox{]}}}}
\label{classMfeaNode_ab6b2c29406f3e0ec694a5551849ba6a7}


Get a reference to \hyperlink{protocolthe-p}{the} dataflow table (\hyperlink{classMfeaDft}{MfeaDft}). 

\begin{DoxyReturn}{Returns}
a reference to \hyperlink{protocolthe-p}{the} dataflow table (\hyperlink{classMfeaDft}{MfeaDft}). 
\end{DoxyReturn}
\hypertarget{classMfeaNode_a6c9dc603dd80fc20d59b15ff93c1da84}{
\index{MfeaNode@{MfeaNode}!mfea\_\-mrouter@{mfea\_\-mrouter}}
\index{mfea\_\-mrouter@{mfea\_\-mrouter}!MfeaNode@{MfeaNode}}
\subsubsection[{mfea\_\-mrouter}]{\setlength{\rightskip}{0pt plus 5cm}{\bf MfeaMrouter}\& MfeaNode::mfea\_\-mrouter (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily  \mbox{[}inline\mbox{]}}}}
\label{classMfeaNode_a6c9dc603dd80fc20d59b15ff93c1da84}


Get a reference to \hyperlink{protocolthe-p}{the} mrouter (\hyperlink{classMfeaMrouter}{MfeaMrouter}). 

\begin{DoxyReturn}{Returns}
a reference to \hyperlink{protocolthe-p}{the} mrouter (\hyperlink{classMfeaMrouter}{MfeaMrouter}). 
\end{DoxyReturn}
\hypertarget{classMfeaNode_a85f7fa439d48246e04486f97b2aaea2d}{
\index{MfeaNode@{MfeaNode}!register\_\-protocol@{register\_\-protocol}}
\index{register\_\-protocol@{register\_\-protocol}!MfeaNode@{MfeaNode}}
\subsubsection[{register\_\-protocol}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::register\_\-protocol (
\begin{DoxyParamCaption}
\item[{const string \&}]{module\_\-instance\_\-name, }
\item[{const string \&}]{if\_\-name, }
\item[{const string \&}]{vif\_\-name, }
\item[{uint8\_\-t}]{ip\_\-protocol, }
\item[{string \&}]{error\_\-msg}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a85f7fa439d48246e04486f97b2aaea2d}


Register a protocol on an interface in \hyperlink{protocolthe-p}{the} Multicast FEA. 

There could be only one registered protocol per interface/vif.


\begin{DoxyParams}{Parameters}
{\em module\_\-instance\_\-name} & \hyperlink{protocolthe-p}{the} module instance name of \hyperlink{protocolthe-p}{the} protocol to register. \\
\hline
{\em if\_\-name} & \hyperlink{protocolthe-p}{the} name of \hyperlink{protocolthe-p}{the} interface to register for \hyperlink{protocolthe-p}{the} particular protocol. \\
\hline
{\em vif\_\-name} & \hyperlink{protocolthe-p}{the} name of \hyperlink{protocolthe-p}{the} vif to register for \hyperlink{protocolthe-p}{the} particular protocol. \\
\hline
{\em ip\_\-protocol} & \hyperlink{protocolthe-p}{the} IP protocol number. It must be between 1 and 255. \\
\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{classMfeaNode_ad8006ee99adc0b81db2cad0ee2db4ccd}{
\index{MfeaNode@{MfeaNode}!set\_\-config\_\-all\_\-vifs\_\-done@{set\_\-config\_\-all\_\-vifs\_\-done}}
\index{set\_\-config\_\-all\_\-vifs\_\-done@{set\_\-config\_\-all\_\-vifs\_\-done}!MfeaNode@{MfeaNode}}
\subsubsection[{set\_\-config\_\-all\_\-vifs\_\-done}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::set\_\-config\_\-all\_\-vifs\_\-done (
\begin{DoxyParamCaption}
\item[{string \&}]{error\_\-msg}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_ad8006ee99adc0b81db2cad0ee2db4ccd}


Complete \hyperlink{protocolthe-p}{the} set of vif configuration changes. 


\begin{DoxyParams}{Parameters}
{\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{classMfeaNode_adb3194e40e6ee86f456ff0736e5d3403}{
\index{MfeaNode@{MfeaNode}!set\_\-config\_\-vif\_\-flags@{set\_\-config\_\-vif\_\-flags}}
\index{set\_\-config\_\-vif\_\-flags@{set\_\-config\_\-vif\_\-flags}!MfeaNode@{MfeaNode}}
\subsubsection[{set\_\-config\_\-vif\_\-flags}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::set\_\-config\_\-vif\_\-flags (
\begin{DoxyParamCaption}
\item[{const string \&}]{vif\_\-name, }
\item[{bool}]{is\_\-pim\_\-register, }
\item[{bool}]{is\_\-p2p, }
\item[{bool}]{is\_\-loopback, }
\item[{bool}]{is\_\-multicast, }
\item[{bool}]{is\_\-broadcast, }
\item[{bool}]{is\_\-up, }
\item[{uint32\_\-t}]{mtu, }
\item[{string \&}]{error\_\-msg}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_adb3194e40e6ee86f456ff0736e5d3403}


Set \hyperlink{protocolthe-p}{the} vif flags of a configured vif. 


\begin{DoxyParams}{Parameters}
{\em vif\_\-name} & \hyperlink{protocolthe-p}{the} name of \hyperlink{protocolthe-p}{the} vif. \\
\hline
{\em is\_\-pim\_\-register} & true if \hyperlink{protocolthe-p}{the} vif is a PIM Register interface. \\
\hline
{\em is\_\-p2p} & true if \hyperlink{protocolthe-p}{the} vif is point-\/to-\/point interface. \\
\hline
{\em is\_\-loopback} & true if \hyperlink{protocolthe-p}{the} vif is a loopback interface. \\
\hline
{\em is\_\-multicast} & true if \hyperlink{protocolthe-p}{the} vif is multicast capable. \\
\hline
{\em is\_\-broadcast} & true if \hyperlink{protocolthe-p}{the} vif is broadcast capable. \\
\hline
{\em is\_\-up} & true if \hyperlink{protocolthe-p}{the} underlying vif is UP. \\
\hline
{\em mtu} & \hyperlink{protocolthe-p}{the} MTU of \hyperlink{protocolthe-p}{the} vif. \\
\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}


Reimplemented from \hyperlink{classProtoNode_acc5d4ce5b1c3a86de0e1bca22ec3b791}{ProtoNode$<$ MfeaVif $>$}.

\hypertarget{classMfeaNode_a6918aa6d28c8fec108c2bababd63d110}{
\index{MfeaNode@{MfeaNode}!set\_\-log\_\-trace@{set\_\-log\_\-trace}}
\index{set\_\-log\_\-trace@{set\_\-log\_\-trace}!MfeaNode@{MfeaNode}}
\subsubsection[{set\_\-log\_\-trace}]{\setlength{\rightskip}{0pt plus 5cm}void MfeaNode::set\_\-log\_\-trace (
\begin{DoxyParamCaption}
\item[{bool}]{is\_\-enabled}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily  \mbox{[}inline\mbox{]}}}}
\label{classMfeaNode_a6918aa6d28c8fec108c2bababd63d110}


Enable/disable trace log. 

This method is used to enable/disable trace log debug messages output.


\begin{DoxyParams}{Parameters}
{\em is\_\-enabled} & if true, trace log is enabled, otherwise is disabled. \\
\hline
\end{DoxyParams}
\hypertarget{classMfeaNode_a2e9cb4af61881a9eefdf63d07e7314dc}{
\index{MfeaNode@{MfeaNode}!signal\_\-dataflow\_\-message\_\-recv@{signal\_\-dataflow\_\-message\_\-recv}}
\index{signal\_\-dataflow\_\-message\_\-recv@{signal\_\-dataflow\_\-message\_\-recv}!MfeaNode@{MfeaNode}}
\subsubsection[{signal\_\-dataflow\_\-message\_\-recv}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::signal\_\-dataflow\_\-message\_\-recv (
\begin{DoxyParamCaption}
\item[{const {\bf IPvX} \&}]{source, }
\item[{const {\bf IPvX} \&}]{group, }
\item[{const {\bf TimeVal} \&}]{threshold\_\-interval, }
\item[{const {\bf TimeVal} \&}]{measured\_\-interval, }
\item[{uint32\_\-t}]{threshold\_\-packets, }
\item[{uint32\_\-t}]{threshold\_\-bytes, }
\item[{uint32\_\-t}]{measured\_\-packets, }
\item[{uint32\_\-t}]{measured\_\-bytes, }
\item[{bool}]{is\_\-threshold\_\-in\_\-packets, }
\item[{bool}]{is\_\-threshold\_\-in\_\-bytes, }
\item[{bool}]{is\_\-geq\_\-upcall, }
\item[{bool}]{is\_\-leq\_\-upcall}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a2e9cb4af61881a9eefdf63d07e7314dc}


Process a dataflow upcall from \hyperlink{protocolthe-p}{the} kernel or from \hyperlink{protocolthe-p}{the} MFEA internal mechanism. 

\hyperlink{classMfeaNode_a2e9cb4af61881a9eefdf63d07e7314dc}{MfeaNode::signal\_\-dataflow\_\-message\_\-recv}: : The source address.

The MFEA internal bandwidth-\/estimation mechanism is based on periodic reading of \hyperlink{protocolthe-p}{the} kernel multicast forwarding statistics. The signal is sent to all user-\/level protocols that expect it.

Note: either is\_\-threshold\_\-in\_\-packets or is\_\-threshold\_\-in\_\-bytes (or both) must be true. Note: either is\_\-geq\_\-upcall or is\_\-leq\_\-upcall (but not both) must be true.


\begin{DoxyParams}{Parameters}
{\em source} & \hyperlink{protocolthe-p}{the} source address.\\
\hline
{\em group} & \hyperlink{protocolthe-p}{the} group address.\\
\hline
{\em threshold\_\-interval} & \hyperlink{protocolthe-p}{the} dataflow threshold interval.\\
\hline
{\em measured\_\-interval} & \hyperlink{protocolthe-p}{the} dataflow measured interval.\\
\hline
{\em threshold\_\-packets} & \hyperlink{protocolthe-p}{the} threshold (in number of packets) to compare against.\\
\hline
{\em threshold\_\-bytes} & \hyperlink{protocolthe-p}{the} threshold (in number of bytes) to compare against.\\
\hline
{\em measured\_\-packets} & \hyperlink{protocolthe-p}{the} number of packets measured within \hyperlink{protocolthe-p}{the} measured\_\-interval.\\
\hline
{\em measured\_\-bytes} & \hyperlink{protocolthe-p}{the} number of bytes measured within \hyperlink{protocolthe-p}{the} measured\_\-interval.\\
\hline
{\em is\_\-threshold\_\-in\_\-packets} & if true, threshold\_\-packets is valid.\\
\hline
{\em is\_\-threshold\_\-in\_\-bytes} & if true, threshold\_\-bytes is valid.\\
\hline
{\em is\_\-geq\_\-upcall} & if true, \hyperlink{protocolthe-p}{the} operation for comparison is \char`\"{}$>$=\char`\"{}.\\
\hline
{\em is\_\-leq\_\-upcall} & if true, \hyperlink{protocolthe-p}{the} operation for comparison is \char`\"{}$<$=\char`\"{}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR.
\end{DoxyReturn}
: The group address. : The dataflow threshold interval. : The dataflow measured interval. : The threshold (in number of packets) to compare against. : The threshold (in number of bytes) to compare against. : The number of packets measured within \hyperlink{protocolthe-p}{the} . : The number of bytes measured within \hyperlink{protocolthe-p}{the} . : If true,  is valid. : If true,  is valid. : If true, \hyperlink{protocolthe-p}{the} operation for comparison is \char`\"{}$>$=\char`\"{}. : If true, \hyperlink{protocolthe-p}{the} operation for comparison is \char`\"{}$<$=\char`\"{}.

Process a dataflow upcall from \hyperlink{protocolthe-p}{the} kernel or from \hyperlink{protocolthe-p}{the} MFEA internal bandwidth-\/estimation mechanism (i.e., periodic reading of \hyperlink{protocolthe-p}{the} kernel multicast forwarding statistics). The signal is sent to all user-\/level protocols that expect it.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. \hypertarget{classMfeaNode_a849f69d434801b289f7a27feeeafd928}{
\index{MfeaNode@{MfeaNode}!signal\_\-message\_\-recv@{signal\_\-message\_\-recv}}
\index{signal\_\-message\_\-recv@{signal\_\-message\_\-recv}!MfeaNode@{MfeaNode}}
\subsubsection[{signal\_\-message\_\-recv}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::signal\_\-message\_\-recv (
\begin{DoxyParamCaption}
\item[{const string \&}]{src\_\-module\_\-instance\_\-name, }
\item[{int}]{message\_\-type, }
\item[{uint32\_\-t}]{vif\_\-index, }
\item[{const {\bf IPvX} \&}]{src, }
\item[{const {\bf IPvX} \&}]{dst, }
\item[{const uint8\_\-t $\ast$}]{rcvbuf, }
\item[{size\_\-t}]{rcvlen}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily  \mbox{[}virtual\mbox{]}}}}
\label{classMfeaNode_a849f69d434801b289f7a27feeeafd928}


Process NOCACHE, WRONGVIF/WRONGMIF, WHOLEPKT signals from \hyperlink{protocolthe-p}{the} kernel. 

\hyperlink{classMfeaNode_a849f69d434801b289f7a27feeeafd928}{MfeaNode::signal\_\-message\_\-recv}: : Unused.

The signal is sent to all user-\/level protocols that expect it.


\begin{DoxyParams}{Parameters}
{\em src\_\-module\_\-instance\_\-name} & unused. \\
\hline
{\em message\_\-type} & \hyperlink{protocolthe-p}{the} message type of \hyperlink{protocolthe-p}{the} kernel signal (for \hyperlink{classIPv4}{IPv4} and \hyperlink{classIPv6}{IPv6} respectively):\\
\hline
\end{DoxyParams}

\begin{DoxyPre}
#define IGMPMSG\_NOCACHE         1
#define IGMPMSG\_WRONGVIF        2
#define IGMPMSG\_WHOLEPKT        3\end{DoxyPre}



\begin{DoxyPre}#define MRT6MSG\_NOCACHE         1
#define MRT6MSG\_WRONGMIF        2
#define MRT6MSG\_WHOLEPKT        3
\end{DoxyPre}



\begin{DoxyParams}{Parameters}
{\em vif\_\-index} & \hyperlink{protocolthe-p}{the} vif index of \hyperlink{protocolthe-p}{the} related interface (message-\/specific).\\
\hline
{\em src} & \hyperlink{protocolthe-p}{the} source address in \hyperlink{protocolthe-p}{the} message. \\
\hline
{\em dst} & \hyperlink{protocolthe-p}{the} destination address in \hyperlink{protocolthe-p}{the} message. \\
\hline
{\em rcvbuf} & \hyperlink{protocolthe-p}{the} data buffer with \hyperlink{protocolthe-p}{the} additional information in \hyperlink{protocolthe-p}{the} message. \\
\hline
{\em rcvlen} & \hyperlink{protocolthe-p}{the} data length in rcvbuf.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR.
\end{DoxyReturn}
: The message type of \hyperlink{protocolthe-p}{the} kernel signal (IGMPMSG\_\-$\ast$ or MRT6MSG\_\-$\ast$) : The vif index of \hyperlink{protocolthe-p}{the} related interface (message-\/specific). : The source address in \hyperlink{protocolthe-p}{the} message. : The destination address in \hyperlink{protocolthe-p}{the} message. : The data buffer with \hyperlink{protocolthe-p}{the} additional information in \hyperlink{protocolthe-p}{the} message. : The data length in .

Process NOCACHE, WRONGVIF/WRONGMIF, WHOLEPKT, BW\_\-UPCALL signals from \hyperlink{protocolthe-p}{the} kernel. The signal is sent to all user-\/level protocols that expect it.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. 

Implements \hyperlink{classProtoNode_a77df4775756fcc3b4ce487e38fcdea3c}{ProtoNode$<$ MfeaVif $>$}.

\hypertarget{classMfeaNode_a1ea0bb20c73aabd57f2a79420408d744}{
\index{MfeaNode@{MfeaNode}!start@{start}}
\index{start@{start}!MfeaNode@{MfeaNode}}
\subsubsection[{start}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::start (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a1ea0bb20c73aabd57f2a79420408d744}


Start \hyperlink{protocolthe-p}{the} node operation. 

\hyperlink{classMfeaNode_a1ea0bb20c73aabd57f2a79420408d744}{MfeaNode::start}: @:

After \hyperlink{protocolthe-p}{the} startup operations are completed, \hyperlink{classMfeaNode_a6e7670569d6980e393902ba654d3f322}{MfeaNode::final\_\-start()} is called internally to complete \hyperlink{protocolthe-p}{the} job.

\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR.
\end{DoxyReturn}
Start \hyperlink{protocolthe-p}{the} MFEA. TODO: This function should not start \hyperlink{protocolthe-p}{the} operation on \hyperlink{protocolthe-p}{the} interfaces. The interfaces must be activated separately. After \hyperlink{protocolthe-p}{the} startup operations are completed, \hyperlink{classMfeaNode_a6e7670569d6980e393902ba654d3f322}{MfeaNode::final\_\-start()} is called to complete \hyperlink{protocolthe-p}{the} job.

Return value: XORP\_\-OK on success, otherwize XORP\_\-ERROR. 

Reimplemented from \hyperlink{classProtoState_a5a0cf7fc68b9db681ce8b8fca9635e07}{ProtoState}.

\hypertarget{classMfeaNode_a9faefa8d60a5943dc22305a5a79f4a47}{
\index{MfeaNode@{MfeaNode}!start\_\-all\_\-vifs@{start\_\-all\_\-vifs}}
\index{start\_\-all\_\-vifs@{start\_\-all\_\-vifs}!MfeaNode@{MfeaNode}}
\subsubsection[{start\_\-all\_\-vifs}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::start\_\-all\_\-vifs (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a9faefa8d60a5943dc22305a5a79f4a47}


Start MFEA on all enabled interfaces. 

\hyperlink{classMfeaNode_a9faefa8d60a5943dc22305a5a79f4a47}{MfeaNode::start\_\-all\_\-vifs}: @:

\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR.
\end{DoxyReturn}
Start MFEA on all enabled interfaces.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. \hypertarget{classMfeaNode_a96875b00aa24befc2b9a1181e5b59962}{
\index{MfeaNode@{MfeaNode}!start\_\-vif@{start\_\-vif}}
\index{start\_\-vif@{start\_\-vif}!MfeaNode@{MfeaNode}}
\subsubsection[{start\_\-vif}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::start\_\-vif (
\begin{DoxyParamCaption}
\item[{const string \&}]{vif\_\-name, }
\item[{string \&}]{error\_\-msg}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a96875b00aa24befc2b9a1181e5b59962}


Start an existing MFEA vif. 

\hyperlink{classMfeaNode_a96875b00aa24befc2b9a1181e5b59962}{MfeaNode::start\_\-vif}: : The name of \hyperlink{protocolthe-p}{the} vif to start.


\begin{DoxyParams}{Parameters}
{\em vif\_\-name} & \hyperlink{protocolthe-p}{the} name of \hyperlink{protocolthe-p}{the} vif to start. \\
\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 error message (if error).

Start an existing MFEA vif.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. \hypertarget{classMfeaNode_adf444630173da869c927b962f296186a}{
\index{MfeaNode@{MfeaNode}!status\_\-change@{status\_\-change}}
\index{status\_\-change@{status\_\-change}!MfeaNode@{MfeaNode}}
\subsubsection[{status\_\-change}]{\setlength{\rightskip}{0pt plus 5cm}void MfeaNode::status\_\-change (
\begin{DoxyParamCaption}
\item[{{\bf ServiceBase} $\ast$}]{service, }
\item[{ServiceStatus}]{old\_\-status, }
\item[{ServiceStatus}]{new\_\-status}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily  \mbox{[}private, virtual\mbox{]}}}}
\label{classMfeaNode_adf444630173da869c927b962f296186a}


A method invoked when \hyperlink{protocolthe-p}{the} status of a service changes. 


\begin{DoxyParams}{Parameters}
{\em service} & \hyperlink{protocolthe-p}{the} service whose status has changed. \\
\hline
{\em old\_\-status} & \hyperlink{protocolthe-p}{the} old status. \\
\hline
{\em new\_\-status} & \hyperlink{protocolthe-p}{the} new status. \\
\hline
\end{DoxyParams}


Implements \hyperlink{classServiceChangeObserverBase}{ServiceChangeObserverBase}.

\hypertarget{classMfeaNode_af630e3cbf23b810920313de2d6cb6b7b}{
\index{MfeaNode@{MfeaNode}!stop@{stop}}
\index{stop@{stop}!MfeaNode@{MfeaNode}}
\subsubsection[{stop}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::stop (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_af630e3cbf23b810920313de2d6cb6b7b}


Stop \hyperlink{protocolthe-p}{the} node operation. 

\hyperlink{classMfeaNode_af630e3cbf23b810920313de2d6cb6b7b}{MfeaNode::stop}: @:

After \hyperlink{protocolthe-p}{the} shutdown operations are completed, \hyperlink{classMfeaNode_aa2a3a606b45a98cc640b171b0d1c530a}{MfeaNode::final\_\-stop()} is called internally to complete \hyperlink{protocolthe-p}{the} job.

\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR.
\end{DoxyReturn}
Gracefully stop \hyperlink{protocolthe-p}{the} MFEA. XXX: After \hyperlink{protocolthe-p}{the} cleanup is completed, \hyperlink{classMfeaNode_aa2a3a606b45a98cc640b171b0d1c530a}{MfeaNode::final\_\-stop()} is called to complete \hyperlink{protocolthe-p}{the} job. XXX: This function, unlike \hyperlink{classMfeaNode_a1ea0bb20c73aabd57f2a79420408d744}{start()}, will stop \hyperlink{protocolthe-p}{the} MFEA operation on all interfaces.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. 

Reimplemented from \hyperlink{classProtoState_a00a8d35d02b0ce61a6b012326e81878c}{ProtoState}.

\hypertarget{classMfeaNode_a03b1dfab9778d423ca8fb2297b7eb556}{
\index{MfeaNode@{MfeaNode}!stop\_\-all\_\-vifs@{stop\_\-all\_\-vifs}}
\index{stop\_\-all\_\-vifs@{stop\_\-all\_\-vifs}!MfeaNode@{MfeaNode}}
\subsubsection[{stop\_\-all\_\-vifs}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::stop\_\-all\_\-vifs (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a03b1dfab9778d423ca8fb2297b7eb556}


Stop MFEA on all interfaces it was running on. 

\hyperlink{classMfeaNode_a03b1dfab9778d423ca8fb2297b7eb556}{MfeaNode::stop\_\-all\_\-vifs}: @:

\begin{DoxyReturn}{Returns}
XORP\_\-OK on success, otherwise XORP\_\-ERROR.
\end{DoxyReturn}
Stop MFEA on all interfaces it was running on.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. \hypertarget{classMfeaNode_a16206c620d50e74ee0238f2f6d7b12e8}{
\index{MfeaNode@{MfeaNode}!stop\_\-vif@{stop\_\-vif}}
\index{stop\_\-vif@{stop\_\-vif}!MfeaNode@{MfeaNode}}
\subsubsection[{stop\_\-vif}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::stop\_\-vif (
\begin{DoxyParamCaption}
\item[{const string \&}]{vif\_\-name, }
\item[{string \&}]{error\_\-msg}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a16206c620d50e74ee0238f2f6d7b12e8}


Stop an existing MFEA vif. 

\hyperlink{classMfeaNode_a16206c620d50e74ee0238f2f6d7b12e8}{MfeaNode::stop\_\-vif}: : The name of \hyperlink{protocolthe-p}{the} vif to stop.


\begin{DoxyParams}{Parameters}
{\em vif\_\-name} & \hyperlink{protocolthe-p}{the} name of \hyperlink{protocolthe-p}{the} vif to start. \\
\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 error message (if error).

Stop an existing MFEA vif.

Return value: XORP\_\-OK on success, otherwise XORP\_\-ERROR. \hypertarget{classMfeaNode_aa8458741e2e8d98e2ca8598c18ad139a}{
\index{MfeaNode@{MfeaNode}!unregister\_\-protocol@{unregister\_\-protocol}}
\index{unregister\_\-protocol@{unregister\_\-protocol}!MfeaNode@{MfeaNode}}
\subsubsection[{unregister\_\-protocol}]{\setlength{\rightskip}{0pt plus 5cm}int MfeaNode::unregister\_\-protocol (
\begin{DoxyParamCaption}
\item[{const string \&}]{module\_\-instance\_\-name, }
\item[{const string \&}]{if\_\-name, }
\item[{const string \&}]{vif\_\-name, }
\item[{string \&}]{error\_\-msg}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_aa8458741e2e8d98e2ca8598c18ad139a}


Unregister a protocol on an interface in \hyperlink{protocolthe-p}{the} Multicast FEA. 

There could be only one registered protocol per interface/vif.


\begin{DoxyParams}{Parameters}
{\em module\_\-instance\_\-name} & \hyperlink{protocolthe-p}{the} module instance name of \hyperlink{protocolthe-p}{the} protocol to unregister. \\
\hline
{\em if\_\-name} & \hyperlink{protocolthe-p}{the} name of \hyperlink{protocolthe-p}{the} interface to unregister for \hyperlink{protocolthe-p}{the} particular protocol. \\
\hline
{\em vif\_\-name} & \hyperlink{protocolthe-p}{the} name of \hyperlink{protocolthe-p}{the} vif to unregister for \hyperlink{protocolthe-p}{the} particular protocol. \\
\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{classMfeaNode_a7df0451f08affbe7d86ee55345a783bc}{
\index{MfeaNode@{MfeaNode}!unregister\_\-protocols\_\-for\_\-iface@{unregister\_\-protocols\_\-for\_\-iface}}
\index{unregister\_\-protocols\_\-for\_\-iface@{unregister\_\-protocols\_\-for\_\-iface}!MfeaNode@{MfeaNode}}
\subsubsection[{unregister\_\-protocols\_\-for\_\-iface}]{\setlength{\rightskip}{0pt plus 5cm}void MfeaNode::unregister\_\-protocols\_\-for\_\-iface (
\begin{DoxyParamCaption}
\item[{const string \&}]{ifname}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a7df0451f08affbe7d86ee55345a783bc}


Helper method to unregister all protocols on all vifs for this interface. 

This needs to be called before we delete an interface to ensure \hyperlink{protocolthe-p}{the} cleanup can happen properly. \hypertarget{classMfeaNode_a98ddd09c2e08943696e139939fc8a44a}{
\index{MfeaNode@{MfeaNode}!unregister\_\-protocols\_\-for\_\-vif@{unregister\_\-protocols\_\-for\_\-vif}}
\index{unregister\_\-protocols\_\-for\_\-vif@{unregister\_\-protocols\_\-for\_\-vif}!MfeaNode@{MfeaNode}}
\subsubsection[{unregister\_\-protocols\_\-for\_\-vif}]{\setlength{\rightskip}{0pt plus 5cm}void MfeaNode::unregister\_\-protocols\_\-for\_\-vif (
\begin{DoxyParamCaption}
\item[{const string \&}]{ifname, }
\item[{const string \&}]{vifname}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a98ddd09c2e08943696e139939fc8a44a}


Helper method to unregister all protocols on this vif. 

This needs to be called before we delete an interface to ensure \hyperlink{protocolthe-p}{the} cleanup can happen properly. \hypertarget{classMfeaNode_a8bcda74b48708947954a3d53ea23dbf3}{
\index{MfeaNode@{MfeaNode}!vif\_\-shutdown\_\-completed@{vif\_\-shutdown\_\-completed}}
\index{vif\_\-shutdown\_\-completed@{vif\_\-shutdown\_\-completed}!MfeaNode@{MfeaNode}}
\subsubsection[{vif\_\-shutdown\_\-completed}]{\setlength{\rightskip}{0pt plus 5cm}void MfeaNode::vif\_\-shutdown\_\-completed (
\begin{DoxyParamCaption}
\item[{const string \&}]{vif\_\-name}
\end{DoxyParamCaption}
)}}
\label{classMfeaNode_a8bcda74b48708947954a3d53ea23dbf3}


A method called when a vif has completed its shutdown. 


\begin{DoxyParams}{Parameters}
{\em vif\_\-name} & \hyperlink{protocolthe-p}{the} name of \hyperlink{protocolthe-p}{the} vif that has completed its shutdown. \\
\hline
\end{DoxyParams}


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