class Mld6igmpNode

The MLD/IGMP node class. More...

 
LOGO
 Annotated List  Files  Globals  Hierarchy  Index  Top

Public Methods


Detailed Description

There should be one node per MLD or IGMP instance. There should be one instance per address family.

 Mld6igmpNode (int family, xorp_module_id module_id, EventLoop& eventloop)

Mld6igmpNode

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

Parameters:

familythe address family (AF_INET or AF_INET6 for IPv4 and IPv6 respectively).
module_idthe module ID (xorp_module_id). Should be equal to XORP_MODULE_MLD6IGMP.
eventloopthe event loop to use.
 ~Mld6igmpNode ()

~Mld6igmpNode

[virtual]

Destructor

int  start ()

start

Start the node operation.

Start the MLD or IGMP protocol. After the startup operations are completed, Mld6igmpNode::final_start() is called internally to complete the job.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  stop ()

stop

Stop the node operation.

Gracefully stop the MLD or IGMP protocol. After the shutdown operations are completed, Mld6igmpNode::final_stop() is called internally to complete the job.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  final_start ()

final_start

Completely start the node operation.

This method should be called internally after Mld6igmpNode::start() to complete the job.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  final_stop ()

final_stop

Completely stop the node operation.

This method should be called internally after Mld6igmpNode::stop() to complete the job.

Returns: XORP_OK on success, otherwise XORP_ERROR.

void  enable ()

enable

Enable node operation.

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

void  disable ()

disable

Disable node operation.

If an unit is disabled, it cannot be start or pending-start. If the unit was runnning, it will be stop first.

int  add_vif (const Vif& vif, string& error_msg)

add_vif

Install a new MLD/IGMP vif.

Parameters:

vifvif information about the new Mld6igmpVif to install.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

Reimplemented from ProtoNode.

int  add_vif (const string& vif_name, uint32_t vif_index, string& error_msg)

add_vif

Install a new MLD/IGMP vif.

Parameters:

vif_namethe name of the new vif.
vif_indexthe vif index of the new vif.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

Reimplemented from ProtoNode.

int  delete_vif (const string& vif_name, string& error_msg)

delete_vif

Delete an existing MLD/IGMP vif.

Parameters:

vif_namethe name of the vif to delete.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

Reimplemented from ProtoNode.

int  set_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)

set_vif_flags

Set flags to a vif.

Parameters:

vif_namethe name of the vif.
is_pim_registertrue if this is a PIM Register vif.
is_p2ptrue if this is a point-to-point vif.
is_loopbacktrue if this is a loopback interface.
is_multicasttrue if the vif is multicast-capable.
is_broadcasttrue if the vif is broadcast-capable.
is_uptrue if the vif is UP and running.
mtuthe MTU of the vif.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  add_vif_addr (const string& vif_name, const IPvX& addr, const IPvXNet& subnet_addr, const IPvX& broadcast_addr, const IPvX& peer_addr, string& error_msg)

add_vif_addr

Add an address to a vif.

Parameters:

vif_namethe name of the vif.
addrthe unicast address to add.
subnet_addrthe subnet address to add.
broadcast_addrthe broadcast address (when applicable).
peer_addrthe peer address (when applicable).
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  delete_vif_addr (const string& vif_name, const IPvX& addr, string& error_msg)

delete_vif_addr

Delete an address from a vif.

Parameters:

vif_namethe name of the vif.
addrthe unicast address to delete.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  enable_vif (const string& vif_name, string& error_msg)

enable_vif

Enable an existing MLD6IGMP vif.

Parameters:

vif_namethe name of the vif to enable.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  disable_vif (const string& vif_name, string& error_msg)

disable_vif

Disable an existing MLD6IGMP vif.

Parameters:

vif_namethe name of the vif to disable.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  start_vif (const string& vif_name, string& error_msg)

start_vif

Start an existing MLD6IGMP vif.

Parameters:

vif_namethe name of the vif to start.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  stop_vif (const string& vif_name, string& error_msg)

stop_vif

Stop an existing MLD6IGMP vif.

Parameters:

vif_namethe name of the vif to start.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  start_all_vifs ()

start_all_vifs

Start MLD/IGMP on all enabled interfaces.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  stop_all_vifs ()

stop_all_vifs

Stop MLD/IGMP on all interfaces it was running on.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  enable_all_vifs ()

enable_all_vifs

Enable MLD/IGMP on all interfaces.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  disable_all_vifs ()

disable_all_vifs

Disable MLD/IGMP on all interfaces.

Returns: XORP_OK on success, otherwise XORP_ERROR.

void  delete_all_vifs ()

delete_all_vifs

Delete all MLD/IGMP vifs.

void  vif_shutdown_completed (const string& vif_name)

vif_shutdown_completed

A method called when a vif has completed its shutdown.

Parameters:

vif_namethe name of the vif that has completed its shutdown.
int  proto_recv (const string& src_module_instance_name, xorp_module_id src_module_id, uint32_t vif_index, const IPvX& src, const IPvX& dst, int ip_ttl, int ip_tos, bool is_router_alert, const uint8_t *rcvbuf, size_t rcvlen, string& error_msg)

proto_recv

Receive a protocol message.

Parameters:

src_module_instance_namethe module instance name of the module-origin of the message.
src_module_idthe module ID (xorp_module_id) of the module-origin of the message.
vif_indexthe vif index of the interface used to receive this message.
srcthe source address of the message.
dstthe destination address of the message.
ip_ttlthe IP TTL of the message. If it has a negative value, it should be ignored.
ip_tosthe IP TOS of the message. If it has a negative value, it should be ignored.
is_router_alertif true, the IP Router Alert option in the IP packet was set (when applicable).
rcvbufthe data buffer with the received message.
rcvlenthe data length in rcvbuf.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

Reimplemented from ProtoNode.

int  mld6igmp_send (uint32_t vif_index, const IPvX& src, const IPvX& dst, int ip_ttl, int ip_tos, bool is_router_alert, buffer_t *buffer, string& error_msg)

mld6igmp_send

Send a protocol message.

Note: this method uses the pure virtual ProtoNode::proto_send() method that is implemented somewhere else (in a class that inherits this one).

Parameters:

vif_indexthe vif index of the vif to send the message.
srcthe source address of the message.
dstthe destination address of the message.
ip_ttlthe TTL of the IP packet to send. If it has a negative value, the TTL will be set by the lower layers.
ip_tosthe TOS of the IP packet to send. If it has a negative value, the TOS will be set by the lower layers.
is_router_alertif true, set the IP Router Alert option in the IP packet to send (when applicable).
bufferthe data buffer with the message to send.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  signal_message_recv (const string& , xorp_module_id , int , uint32_t , const IPvX& , const IPvX& , const uint8_t * , size_t )

signal_message_recv

Receive signal message: not used by MLD/IGMP.

Reimplemented from ProtoNode.

int  signal_message_send (const string& , xorp_module_id , int , uint32_t , const IPvX& , const IPvX& , const uint8_t * , size_t )

signal_message_send

Send signal message: not used by MLD/IGMP.

Reimplemented from ProtoNode.

int  start_protocol_kernel_vif (uint32_t vif_index)

start_protocol_kernel_vif

[pure virtual]

Start a protocol vif with the kernel.

This is a pure virtual function, and it must be implemented by the communication-wrapper class that inherits this base class.

Parameters:

vif_indexthe vif index of the interface to start.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  stop_protocol_kernel_vif (uint32_t vif_index)

stop_protocol_kernel_vif

[pure virtual]

Stop a protocol vif with the kernel.

This is a pure virtual function, and it must be implemented by the communication-wrapper class that inherits this base class.

Parameters:

vif_indexthe vif index of the interface to stop.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  join_multicast_group (uint32_t vif_index, const IPvX& multicast_group)

join_multicast_group

[pure virtual]

Join a multicast group on an interface.

This is a pure virtual function, and it must be implemented by the communication-wrapper class that inherits this base class.

TODO: add a source address as well!!

Parameters:

vif_indexthe vif index of the interface to join.
multicast_groupthe multicast group address.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  leave_multicast_group (uint32_t vif_index, const IPvX& multicast_group)

leave_multicast_group

[pure virtual]

Leave a multicast group on an interface.

This is a pure virtual function, and it must be implemented by the communication-wrapper class that inherits this base class.

TODO: add a source address as well!!

Parameters:

vif_indexthe vif index of the interface to leave.
multicast_groupthe multicast group address.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  add_protocol (const string& module_instance_name, xorp_module_id module_id, uint32_t vif_index)

add_protocol

Add a protocol that needs to be notified about multicast membership changes.

Add a protocol to the list of entries that would be notified if there is membership change on a particular interface.

Parameters:

module_instance_namethe module instance name of the protocol to add.
module_idthe module ID (xorp_module_id) of the protocol to add.
vif_indexthe vif index of the interface to add the protocol to.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  delete_protocol (const string& module_instance_name, xorp_module_id module_id, uint32_t vif_index)

delete_protocol

Delete a protocol that needs to be notified about multicast membership changes.

Delete a protocol from the list of entries that would be notified if there is membership change on a particular interface.

Parameters:

module_instance_namethe module instance name of the protocol to delete.
module_idthe module ID (xorp_module_id) of the protocol to delete.
vif_indexthe vif index of the interface to delete the protocol from.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  send_add_membership (const string& dst_module_instance_name, xorp_module_id dst_module_id, uint32_t vif_index, const IPvX& source, const IPvX& group)

send_add_membership

[pure virtual]

Send "add membership" to a protocol that needs to be notified about multicast membership changes.

This is a pure virtual function, and it must be implemented by the communication-wrapper class that inherits this base class.

Parameters:

dst_module_instance_namethe module instance name of the protocol to notify.
dst_module_idthe module ID (xorp_module_id) of the protocol to notify.
vif_indexthe vif index of the interface with membership change.
sourcethe source address of the (S,G) or (*,G) entry that has changed membership. In case of Any-Source Multicast, it is IPvX::ZERO().
groupthe group address.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  send_delete_membership (const string& dst_module_instance_name, xorp_module_id dst_module_id, uint32_t vif_index, const IPvX& source, const IPvX& group)

send_delete_membership

[pure virtual]

Send "delete membership" to a protocol that needs to be notified about multicast membership changes.

This is a pure virtual function, and it must be implemented by the communication-wrapper class that inherits this base class.

Parameters:

dst_module_instance_namethe module instance name of the protocol to notify.
dst_module_idthe module ID (xorp_module_id) of the protocol to notify.
vif_indexthe vif index of the interface with membership change.
sourcethe source address of the (S,G) or (*,G) entry that has changed membership. In case of Any-Source Multicast, it is IPvX::ZERO().
groupthe group address of the (S,G) or (*,G) entry that has changed.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  join_prune_notify_routing (const string& module_instance_name, xorp_module_id module_id, uint32_t vif_index, const IPvX& source, const IPvX& group, action_jp_t action_jp)

join_prune_notify_routing

Notify a protocol about multicast membership change.

Parameters:

module_instance_namethe module instance name of the protocol to notify.
module_idthe module ID (xorp_module_id) of the protocol to notify.
vif_indexthe vif index of the interface with membership change.
sourcethe source address of the (S,G) or (*,G) entry that has changed. In case of group-specific multicast, it is IPvX::ZERO().
groupthe group address of the (S,G) or (*,G) entry that has changed.
action_jpthe membership change type (action_jp_t): either ACTION_JOIN or ACTION_PRUNE.

Returns: XORP_OK on success, otherwise XORP_ERROR.

bool  is_directly_connected (const Mld6igmpVif& mld6igmp_vif, const IPvX& ipaddr_test)

is_directly_connected

[const]

Test if an address is directly connected to a specified virtual interface.

Note that the virtual interface the address is directly connected to must be UP.

Parameters:

mld6igmp_vifthe virtual interface to test against.
ipaddr_testthe address to test.

Returns: true if ipaddr_test is directly connected to vif, otherwise false.

int  set_config_all_vifs_done (string& error_msg)

set_config_all_vifs_done

Complete the set of vif configuration changes.

Parameters:

error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  get_vif_proto_version (const string& vif_name, int& proto_version, string& error_msg)

get_vif_proto_version

Get the protocol version on an interface.

Parameters:

vif_namethe name of the vif to get the protocol version of.
proto_versionthe return-by-reference protocol version.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  set_vif_proto_version (const string& vif_name, int proto_version, string& error_msg)

set_vif_proto_version

Set the protocol version on an interface.

Parameters:

vif_namethe name of the vif to set the protocol version of.
proto_versionthe new protocol version.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  reset_vif_proto_version (const string& vif_name, string& error_msg)

reset_vif_proto_version

Reset the protocol version on an interface to its default value.

Parameters:

vif_namethe name of the vif to reset the protocol version of to its default value.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  get_vif_ip_router_alert_option_check (const string& vif_name, bool& enabled, string& error_msg)

get_vif_ip_router_alert_option_check

Get the value of the flag that enables/disables the IP Router Alert option check per interface for received packets.

Parameters:

vif_namethe name of the vif to apply to.
enabledthe return-by-reference flag value.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  set_vif_ip_router_alert_option_check (const string& vif_name, bool enable, string& error_msg)

set_vif_ip_router_alert_option_check

Enable/disable the IP Router Alert option check per interface for received packets.

Parameters:

vif_namethe name of the vif to apply to.
enableif true, then enable the IP Router Alert option check, otherwise disable it.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  reset_vif_ip_router_alert_option_check (const string& vif_name, string& error_msg)

reset_vif_ip_router_alert_option_check

Reset the value of the flag that enables/disables the IP Router Alert option check per interface for received packets to its default value.

Parameters:

vif_namethe name of the vif to apply to.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  get_vif_query_interval (const string& vif_name, TimeVal& interval, string& error_msg)

get_vif_query_interval

Get the Query Interval per interface.

Parameters:

vif_namethe name of the vif to apply to.
intervalthe return-by-reference interval.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  set_vif_query_interval (const string& vif_name, const TimeVal& interval, string& error_msg)

set_vif_query_interval

Set the Query Interval per interface.

Parameters:

vif_namethe name of the vif to apply to.
intervalthe interval.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  reset_vif_query_interval (const string& vif_name, string& error_msg)

reset_vif_query_interval

Reset the Query Interval per interface.

Parameters:

vif_namethe name of the vif to apply to.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  get_vif_query_last_member_interval (const string& vif_name, TimeVal& interval, string& error_msg)

get_vif_query_last_member_interval

Get the Last Member Query Interval per interface.

Parameters:

vif_namethe name of the vif to apply to.
intervalthe return-by-reference interval.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  set_vif_query_last_member_interval (const string& vif_name, const TimeVal& interval, string& error_msg)

set_vif_query_last_member_interval

Set the Last Member Query Interval per interface.

Parameters:

vif_namethe name of the vif to apply to.
intervalthe interval.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  reset_vif_query_last_member_interval (const string& vif_name, string& error_msg)

reset_vif_query_last_member_interval

Reset the Last Member Query Interval per interface.

Parameters:

vif_namethe name of the vif to apply to.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  get_vif_query_response_interval (const string& vif_name, TimeVal& interval, string& error_msg)

get_vif_query_response_interval

Get the Query Response Interval per interface.

Parameters:

vif_namethe name of the vif to apply to.
intervalthe return-by-reference interval.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  set_vif_query_response_interval (const string& vif_name, const TimeVal& interval, string& error_msg)

set_vif_query_response_interval

Set the Query Response Interval per interface.

Parameters:

vif_namethe name of the vif to apply to.
intervalthe interval.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  reset_vif_query_response_interval (const string& vif_name, string& error_msg)

reset_vif_query_response_interval

Reset the Query Response Interval per interface.

Parameters:

vif_namethe name of the vif to apply to.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  get_vif_robust_count (const string& vif_name, uint32_t& robust_count, string& error_msg)

get_vif_robust_count

Get the Robustness Variable count per interface.

Parameters:

vif_namethe name of the vif to apply to.
robust_countthe return-by-reference count value.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  set_vif_robust_count (const string& vif_name, uint32_t robust_count, string& error_msg)

set_vif_robust_count

Set the Robustness Variable count per interface.

Parameters:

vif_namethe name of the vif to apply to.
robust_countthe count value.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  reset_vif_robust_count (const string& vif_name, string& error_msg)

reset_vif_robust_count

Reset the Robustness Variable count per interface.

Parameters:

vif_namethe name of the vif to apply to.
error_msgthe error message (if error).

Returns: XORP_OK on success, otherwise XORP_ERROR.

bool  is_log_trace ()

is_log_trace

[const]

Test if trace log is enabled.

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

Returns: true if trace log is enabled, otherwise false.

void  set_log_trace (bool is_enabled)

set_log_trace

Enable/disable trace log.

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

Parameters:

is_enabledif true, trace log is enabled, otherwise is disabled.

Generated by: pavlin on possum.icir.org on Wed Mar 21 11:23:28 2007, using kdoc $.