|
|
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.
int mrouter_socket ()
| mrouter_socket |
[const]
Get the mrouter socket.
The mrouter socket is used for various multicast-related access.
Returns: the socket value if valid, otherwise XORP_ERROR.
int 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 on success, otherwise XORP_ERROR.
int 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 on success, otherwise XORP_ERROR.
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 (uint16_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 (uint16_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,
uint16_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 (uint16_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.