| 
 | 
 | ||||||||||||||||
In case of UNIX kernels, we cannot have more than one MfeaMrouter per address family (i.e., one per IPv4, and one per IPv6).
| MfeaMrouter (MfeaNode& mfea_node) | MfeaMrouter | 
Constructor for given MFEA node.
Parameters:
| mfea_node | the MFEA node (MfeaNode) this entry belongs to. | 
| ~MfeaMrouter () | ~MfeaMrouter | 
[virtual]
| int		 start () | start | 
Start the MfeaMrouter.
Returns: XORP_OK on success, otherwise XORP_ERROR.
| int		 stop () | stop | 
Stop the MfeaMrouter.
Returns: XORP_OK on success, otherwise XORP_ERROR.
| bool  have_multicast_routing4 () | have_multicast_routing4 | 
[const]
Test if the underlying system supports IPv4 multicast routing.
Returns: true if the underlying system supports IPv4 multicast routing, otherwise false.
| bool  have_multicast_routing6 () | have_multicast_routing6 | 
[const]
Test if the underlying system supports IPv6 multicast routing.
Returns: true if the underlying system supports IPv6 multicast routing, otherwise false.
| int		 kernel_mrouter_ipproto () | kernel_mrouter_ipproto | 
[const]
Get the protocol that would be used in case of mrouter socket.
Return value: the protocol number on success, otherwise XORP_ERROR.
| XorpFd	 mrouter_socket () | mrouter_socket | 
[const]
Get the mrouter socket.
The mrouter socket is used for various multicast-related access.
Returns: the socket value.
| XorpFd	 open_mrouter_socket () | open_mrouter_socket | 
Open an mrouter socket.
The mrouter socket is used for various multicast-related access. Note that no more than one mrouter socket (per address family) should be open at a time.
Returns: the socket value.
| XorpFd	 adopt_mrouter_socket () | adopt_mrouter_socket | 
Adopt control over the mrouter socket.
When the MfeaMrouter adopts control over the mrouter socket, it is the one that will be reading from that socket.
Returns: the socket value.
| int		 close_mrouter_socket () | close_mrouter_socket | 
Close the mrouter socket.
Returns: XORP_OK on success, otherwise XORP_ERROR.
| int		 start_mrt () | start_mrt | 
Start/enable the multicast routing in the kernel.
Returns: XORP_OK on success, otherwise XORP_ERROR.
| int		 stop_mrt () | stop_mrt | 
Stop/disable the multicast routing in the kernel.
Returns: XORP_OK on success, otherwise XORP_ERROR.
| int		 start_pim () | start_pim | 
Start/enable PIM routing in the kernel.
Returns: XORP_OK on success, otherwise XORP_ERROR.
| int		 stop_pim () | stop_pim | 
Stop/disable PIM routing in the kernel.
Returns: XORP_OK on success, otherwise XORP_ERROR.
| int		 add_multicast_vif (uint32_t vif_index) | add_multicast_vif | 
Add a virtual multicast interface to the kernel.
Parameters:
| vif_index | the vif index of the virtual interface to add. | 
Returns: XORP_OK on success, otherwise XORP_ERROR.
| int		 delete_multicast_vif (uint32_t vif_index) | delete_multicast_vif | 
Delete a virtual multicast interface from the kernel.
Parameters:
| vif_index | the vif index of the interface to delete. | 
Returns: XORP_OK on success, otherwise XORP_ERROR.
| int		 add_mfc (const IPvX& source, const IPvX& group,
			uint32_t iif_vif_index, uint8_t *oifs_ttl,
			uint8_t *oifs_flags,
			const IPvX& rp_addr) | add_mfc | 
Install/modify a Multicast Forwarding Cache (MFC) entry in the kernel.
If the MFC entry specified by (@source, @group) pair was not installed before, a new MFC entry will be created in the kernel; otherwise, the existing entry's fields will be modified.
Parameters:
| source | the MFC source address. | 
| group | the MFC group address. | 
| iif_vif_index | the MFC incoming interface index. | 
| oifs_ttl | an array with the min. TTL a packet should have to be forwarded. | 
| oifs_flags | an array with misc. flags for the MFC to install. Note that those flags are supported only by the advanced multicast API. | 
| rp_addr | the RP address. | 
Returns: XORP_OK on success, otherwise XORP_ERROR.
| int		 delete_mfc (const IPvX& source, const IPvX& group) | delete_mfc | 
Delete a Multicast Forwarding Cache (MFC) entry in the kernel.
Parameters:
| source | the MFC source address. | 
| group | the MFC group address. | 
Returns: XORP_OK on success, otherwise XORP_ERROR.
| int		 add_bw_upcall (const IPvX& source, const IPvX& group,
			      const 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) | add_bw_upcall | 
Add a dataflow monitor entry in the kernel.
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.
Parameters:
| source | the source address. | 
| group | the group address. | 
| threshold_interval | the dataflow threshold interval. | 
| threshold_packets | the threshold (in number of packets) to compare against. | 
| threshold_bytes | the threshold (in number of bytes) to compare against. | 
| is_threshold_in_packets | if true, threshold_packets is valid. | 
| is_threshold_in_bytes | if true, threshold_bytes is valid. | 
| is_geq_upcall | if true, the operation for comparison is ">=". | 
| is_leq_upcall | if true, the operation for comparison is "<=". | 
| error_msg | the error message (if error). | 
Returns: XORP_OK on success, otherwise XORP_ERROR.
| int		 delete_bw_upcall (const IPvX& source, const IPvX& group,
				 const 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) | delete_bw_upcall | 
Delete a dataflow monitor entry from the kernel.
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.
Parameters:
| source | the source address. | 
| group | the group address. | 
| threshold_interval | the dataflow threshold interval. | 
| threshold_packets | the threshold (in number of packets) to compare against. | 
| threshold_bytes | the threshold (in number of bytes) to compare against. | 
| is_threshold_in_packets | if true, threshold_packets is valid. | 
| is_threshold_in_bytes | if true, threshold_bytes is valid. | 
| is_geq_upcall | if true, the operation for comparison is ">=". | 
| is_leq_upcall | if true, the operation for comparison is "<=". | 
| error_msg | the error message (if error). | 
Returns: XORP_OK on success, otherwise XORP_ERROR.
| int		 delete_all_bw_upcall (const IPvX& source, const IPvX& group,
				     string& error_msg) | delete_all_bw_upcall | 
Delete all dataflow monitor entries from the kernel for a given source and group address.
Parameters:
| source | the source address. | 
| group | the group address. | 
| error_msg | the error message (if error). | 
Returns: XORP_OK on success, otherwise XORP_ERROR.
| int		 get_sg_count (const IPvX& source, const IPvX& group,
			     SgCount& sg_count) | get_sg_count | 
Get various counters per (S,G) entry.
Get the number of packets and bytes forwarded by a particular Multicast Forwarding Cache (MFC) entry in the kernel, and the number of packets arrived on wrong interface for that entry.
Parameters:
| source | the MFC source address. | 
| group | the MFC group address. | 
| sg_count | a reference to a SgCount class to place the result. | 
Returns: XORP_OK on success, otherwise XORP_ERROR.
| int		 get_vif_count (uint32_t vif_index, VifCount& vif_count) | get_vif_count | 
Get various counters per virtual interface.
Get the number of packets and bytes received on, or forwarded on a particular multicast interface.
Parameters:
| vif_index | the vif index of the virtual multicast interface whose statistics we need. | 
| vif_count | a reference to a VifCount class to store the result. | 
Returns: XORP_OK on success, otherwise XORP_ERROR.
| bool	 mrt_api_mrt_mfc_flags_disable_wrongvif () | mrt_api_mrt_mfc_flags_disable_wrongvif | 
[const]
Get the flag that indicates whether the kernel supports disabling of WRONGVIF signal per (S,G) per interface.
Returns: true if the kernel supports disabling of WRONGVIF signal per (S,G) per interface, otherwise false.
| bool	 mrt_api_mrt_mfc_flags_border_vif () | mrt_api_mrt_mfc_flags_border_vif | 
[const]
Get the flag that indicates whether the kernel supports setting of the Border bit flag per (S,G) per interface.
The Border bit flag is used for PIM-SM Register encapsulation in the kernel.
Returns: true if the kernel supports setting of the Border bit flag per (S,G) per interface, otherwise false.
| bool	 mrt_api_mrt_mfc_rp () | mrt_api_mrt_mfc_rp | 
[const]
Get the flag that indicates whether the kernel supports adding the RP address to the kernel.
The RP address is used for PIM-SM Register encapsulation in the kernel.
Returns: true if the kernel supports adding the RP address to the kernel, otherwise false.
| bool	 mrt_api_mrt_mfc_bw_upcall () | mrt_api_mrt_mfc_bw_upcall | 
[const]
Get the flag that indicates whether the kernel supports the bandwidth upcall mechanism.
Returns: true if the kernel supports the bandwidth upcall mechanism.
| int		 kernel_call_process (uint8_t *databuf, size_t datalen) | kernel_call_process | 
Process a call from the kernel (e.g., "nocache", "wrongiif", "wholepkt") XXX: It is OK for im_src/im6_src to be 0 (for 'nocache' or 'wrongiif'), just in case the kernel supports (*,G) MFC.
Parameters:
| databuf | the data buffer. | 
| datalen | the length of the data in databuf. | 
Returns: XORP_OK on success, otherwise XORP_ERROR.