class MfeaMrouter

A class for multicast routing related I/O communication. More...

 
LOGO
 Annotated List  Files  Globals  Hierarchy  Index  Top

Public Methods


Detailed Description

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_nodethe MFEA node (MfeaNode) this entry belongs to.
 ~MfeaMrouter ()

~MfeaMrouter

[virtual]

Destructor

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_indexthe 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_indexthe 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:

sourcethe MFC source address.
groupthe MFC group address.
iif_vif_indexthe MFC incoming interface index.
oifs_ttlan array with the min. TTL a packet should have to be forwarded.
oifs_flagsan array with misc. flags for the MFC to install. Note that those flags are supported only by the advanced multicast API.
rp_addrthe 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:

sourcethe MFC source address.
groupthe 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:

sourcethe source address.
groupthe group address.
threshold_intervalthe dataflow threshold interval.
threshold_packetsthe threshold (in number of packets) to compare against.
threshold_bytesthe threshold (in number of bytes) to compare against.
is_threshold_in_packetsif true, threshold_packets is valid.
is_threshold_in_bytesif true, threshold_bytes is valid.
is_geq_upcallif true, the operation for comparison is ">=".
is_leq_upcallif true, the operation for comparison is "<=".
error_msgthe 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:

sourcethe source address.
groupthe group address.
threshold_intervalthe dataflow threshold interval.
threshold_packetsthe threshold (in number of packets) to compare against.
threshold_bytesthe threshold (in number of bytes) to compare against.
is_threshold_in_packetsif true, threshold_packets is valid.
is_threshold_in_bytesif true, threshold_bytes is valid.
is_geq_upcallif true, the operation for comparison is ">=".
is_leq_upcallif true, the operation for comparison is "<=".
error_msgthe 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:

sourcethe source address.
groupthe group address.
error_msgthe 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:

sourcethe MFC source address.
groupthe MFC group address.
sg_counta 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_indexthe vif index of the virtual multicast interface whose statistics we need.
vif_counta 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:

databufthe data buffer.
datalenthe length of the data in databuf.

Returns: XORP_OK on success, otherwise XORP_ERROR.


Generated by: pavlin on possum.icir.org on Thu Jul 8 23:48:26 2004, using kdoc $.