class MfeaNode

The MFEA node class. More...

Contains pure virtuals
Definition#include <mfea_node.hh>
InheritsProtoNode (libproto) [public ]
Inherited byXrlMfeaNode
List of all Methods
Annotated List
Files
Globals
Hierarchy
Index

Public Methods


Detailed Description

There should be one node per MFEA instance. There should be one instance per address family.

 MfeaNode (int family, x_module_id module_id, EventLoop& event_loop)

MfeaNode

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 (x_module_id). Should be equal to X_MODULE_MFEA.
event_loopthe event loop to use.

 ~MfeaNode ()

~MfeaNode

[virtual]

Destructor

int  start ()

start

Start the node operation.

Returns: XORP_OK on success, otherwise XORP_ERROR.

Reimplemented from ProtoNode.

int  stop ()

stop

Stop the node operation.

Returns: XORP_OK on success, otherwise XORP_ERROR.

Reimplemented from ProtoNode.

int  add_vif (const MfeaVif& mfea_vif)

add_vif

Install a new MFEA vif.

Parameters:
mfea_vifinformation about new MfeaVif to install.

Returns: XORP_OK on success, otherwise XORP_ERROR.

Reimplemented from ProtoNode.

int  delete_vif (const char *vif_name)

delete_vif

Delete an existing MFEA vif.

Parameters:
vif_namethe name of the vif to delete.

Returns: XORP_OK on success, otherwise XORP_ERROR.

Reimplemented from ProtoNode.

int  start_all_vifs ()

start_all_vifs

Start MFEA on all enabled interfaces.

Returns: the number of virtual interfaces MFEA was started on, or XORP_ERROR if error occured.

int  stop_all_vifs ()

stop_all_vifs

Stop MFEA on all interfaces it was running on.

Returns: the number of virtual interfaces MFEA was stopped on, or XORP_ERROR if error occured.

int  enable_all_vifs ()

enable_all_vifs

Enable MFEA on all interfaces.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  disable_all_vifs ()

disable_all_vifs

Disable MFEA on all interfaces.

All running interfaces are stopped first.

Returns: XORP_OK on success, otherwise XORP_ERROR.

void  delete_all_vifs ()

delete_all_vifs

Delete all MFEA vifs.

int  start_protocol (x_module_id module_id)

start_protocol

Start operation for a given protocol.

Parameters:
module_idthe module ID (x_module_id) of the protocol to start.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  stop_protocol (x_module_id module_id)

stop_protocol

Stop operation for a given protocol.

Parameters:
module_idthe module ID (x_module_id) of the protocol to stop.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  add_protocol (const string& module_instance_name, x_module_id module_id)

add_protocol

A method used by a protocol instance to register with this MfeaNode.

Parameters:
module_instance_namethe module instance name of the protocol to add.
module_idthe module ID (x_module_id) of the protocol to add.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  delete_protocol (const string& module_instance_name, x_module_id proto_id)

delete_protocol

A method used by a protocol instance to deregister with this MfeaNode.

Parameters:
module_instance_namethe module instance name of the protocol to delete.
module_idthe module ID (x_module_id) of the protocol to delete.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  start_protocol_vif (const string& module_instance_name, x_module_id module_id, uint16_t vif_index)

start_protocol_vif

Start a protocol on an interface.

Parameters:
module_instance_namethe module instance name of the protocol to start on the interface.
module_idthe module ID (x_module_id) of the protocol to start on the interface.
vif_indexthe vif index of the interface to start the protocol on.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  stop_protocol_vif (const string& module_instance_name, x_module_id module_id, uint16_t vif_index)

stop_protocol_vif

Stop a protocol on an interface.

Parameters:
module_instance_namethe module instance name of the protocol to stop on the interface.
module_idthe module ID (x_module_id) of the protocol to stop on the interface.
vif_indexthe vif index of the interface to stop the protocol on.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  add_allow_kernel_signal_messages (const string& module_instance_name, x_module_id module_id)

add_allow_kernel_signal_messages

Add a protocol to receive kernel signal messages.

Add a protocol to the set of protocols that are interested in receiving kernel signal messages.

Currently, the type of messages received from the kernel and forwarded to the protocol instances are:


#define MFEA_UNIX_KERNEL_MESSAGE_NOCACHE        1
#define MFEA_UNIX_KERNEL_MESSAGE_WRONGVIF       2
#define MFEA_UNIX_KERNEL_MESSAGE_WHOLEPKT       3

Parameters:
module_instance_namethe module instance name of the protocol to add.
module_idthe module ID (x_module_id) of the protocol to add.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  delete_allow_kernel_signal_messages (const string& module_instance_name, x_module_id module_id)

delete_allow_kernel_signal_messages

Delete a protocol from receiving kernel signal messages.

Delete a protocol from the set of protocols that are interested in receiving kernel signal messages.

Currently, the type of messages received from the kernel and forwarded to the protocol instances are:


#define MFEA_UNIX_KERNEL_MESSAGE_NOCACHE        1
#define MFEA_UNIX_KERNEL_MESSAGE_WRONGVIF       2
#define MFEA_UNIX_KERNEL_MESSAGE_WHOLEPKT       3

Parameters:
module_instance_namethe module instance name of the protocol to delete.
module_idthe module ID (x_module_id) of the protocol to delete.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  add_allow_mrib_messages (const string& module_instance_name, x_module_id module_id)

add_allow_mrib_messages

Add a protocol to receive MRIB messages.

Add a protocol to the set of protocols that are interested in receiving MRIB (see Mrib) messages.

The MRIB (see Mrib) messages contain (unicast) routing information that can be used for obtaining the RPF (Reverse-Path Forwarding) information.

Parameters:
module_instance_namethe module instance name of the protocol to add.
module_idthe module ID (x_module_id) of the protocol to add.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  delete_allow_mrib_messages (const string& module_instance_name, x_module_id module_id)

delete_allow_mrib_messages

Delete a protocol from receiving MRIB messages.

Delete a protocol to the set of protocols that are interested in receiving MRIB (see Mrib) messages.

The MRIB (see Mrib) messages contain (unicast) routing information that can be used for obtaining the RPF (Reverse-Path Forwarding) information.

Parameters:
module_instance_namethe module instance name of the protocol to delete.
module_idthe module ID (x_module_id) of the protocol to delete.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  send_add_mrib (const Mrib& mrib)

send_add_mrib

Add a Mrib entry to user-level protocols.

Add a Mrib entry to all user-level protocols that are interested in receiving MRIB messages.

Parameters:
mribthe Mrib entry to add.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  send_delete_mrib (const Mrib& mrib)

send_delete_mrib

Delete a Mrib entry from user-level protocols.

Delete a Mrib entry from all user-level protocols that are interested in receiving MRIB messages.

Parameters:
mribthe Mrib entry to delete.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  send_set_mrib_done ()

send_set_mrib_done

Complete a transaction of add/delete Mrib entries.

Complete a transaction of add/delete Mrib entries with all user-level protocols that are interested in receiving MRIB messages.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  send_add_mrib (const string& dst_module_instance_name, x_module_id dst_module_id, const Mrib& mrib)

send_add_mrib

[pure virtual]

Add a Mrib entry to an user-level protocol.

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 module-recepient of the message.
dst_module_idthe module ID (x_module_id) of the module-recepient of the message.
mribthe Mrib entry to add.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  send_delete_mrib (const string& dst_module_instance_name, x_module_id dst_module_id, const Mrib& mrib)

send_delete_mrib

[pure virtual]

Delete a Mrib entry from an user-level protocol.

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 module-recepient of the message.
dst_module_idthe module ID (x_module_id) of the module-recepient of the message.
mribthe Mrib entry to delete.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  send_set_mrib_done (const string& dst_module_instance_name, x_module_id dst_module_id)

send_set_mrib_done

[pure virtual]

Signal completion of a transaction of add/delete Mrib entries to an user-level protocol.

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 module-recepient of the message.
dst_module_idthe module ID (x_module_id) of the module-recepient of the message.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  proto_recv (const string& src_module_instance_name, x_module_id src_module_id, uint16_t vif_index, const IPvX& src, const IPvX& dst, int ip_ttl, int ip_tos, bool router_alert_bool, const uint8_t *rcvbuf, size_t rcvlen)

proto_recv

Receive a protocol message from an user-level protocol.

Parameters:
src_module_instance_namethe module instance name of the module-origin of the message.
src_module_idthe module ID (x_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, the TTL will be set by the lower layers (including the MFEA).
ip_tosthe IP TOS of the message. If it has a negative value, the TOS will be set by the lower layers (including the MFEA).
router_alert_boolif true, set the ROUTER_ALERT IP option for the IP packet of the outgoung message.
rcvbufthe data buffer with the received message.
rcvlenthe data length in rcvbuf.

Returns: XORP_OK on success, otherwise XORP_ERROR.

Reimplemented from ProtoNode.

int  unix_comm_recv (x_module_id dst_module_id, uint16_t vif_index, const IPvX& src, const IPvX& dst, int ip_ttl, int ip_tos, bool router_alert_bool, const uint8_t *rcvbuf, size_t rcvlen)

unix_comm_recv

Process an incoming message from the kernel.

This method sends the protocol message to an user-level protocol module. Note: it uses the pure virtual ProtoNode::proto_send() method that is implemented somewhere else (at a class that inherits this one).

Parameters:
dst_module_idthe module ID (x_module_id) of the module-recepient 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 (Time To Live) of the message. If it has a negative value, it should be ignored.
ip_tosthe IP TOS (Type of Service) of the message. If it has a negative value, it should be ignored.
router_alert_boolif true, the ROUTER_ALERT IP option for the IP packet of the incoming message was set.
rcvbufthe data buffer with the received message.
rcvlenthe data length in rcvbuf.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  signal_message_recv (const string& src_module_instance_name, x_module_id src_module_id, int message_type, uint16_t vif_index, const IPvX& src, const IPvX& dst, const uint8_t *rcvbuf, size_t rcvlen)

signal_message_recv

Process NOCACHE, WRONGVIF/WRONGMIF, WHOLEPKT signals from the kernel.

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


#define IGMPMSG_NOCACHE         1
#define IGMPMSG_WRONGVIF        2
#define IGMPMSG_WHOLEPKT        3

#define MRT6MSG_NOCACHE         1
#define MRT6MSG_WRONGMIF        2
#define MRT6MSG_WHOLEPKT        3

Parameters:
src_module_instance_nameunused.
src_module_idthe x_module_id module ID of the associated UnixComm entry. Note: in the future it may become irrelevant.
message_typethe message type of the kernel signal (for IPv4 and IPv6 respectively):
vif_indexthe vif index of the related interface (message-specific).
srcthe source address in the message.
dstthe destination address in the message.
rcvbufthe data buffer with the additional information in the message.
rcvlenthe data length in rcvbuf.

Returns: XORP_OK on success, otherwise XORP_ERROR.

Reimplemented from ProtoNode.

int  signal_dataflow_message_recv (const IPvX& source, const IPvX& group, const struct timeval& threshold_interval, const struct 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)

signal_dataflow_message_recv

Process a dataflow upcall from the kernel or from the MFEA internal mechanism.

The MFEA internal bandwidth-estimation mechanism is based on periodic reading of 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.

Parameters:
sourcethe source address.
groupthe group address.
threshold_intervalthe dataflow threshold interval.
measured_intervalthe dataflow measured interval.
threshold_packetsthe threshold (in number of packets) to compare against.
threshold_bytesthe threshold (in number of bytes) to compare against.
measured_packetsthe number of packets measured within the measured_interval.
measured_bytesthe number of bytes measured within the measured_interval.
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 "<=".

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  dataflow_signal_send (const string& dst_module_instance_name, x_module_id dst_module_id, const IPvX& source_addr, const 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)

dataflow_signal_send

[pure virtual]

Send a signal that a dataflow-related pre-condition is true.

This is a pure virtual function, and it must be implemented by 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.

Parameters:
dst_module_instance_namethe module instance name of the module-recepient of the message.
dst_module_idthe module ID (x_module_id) of the module-recepient of the message.
source_addrthe source address of the dataflow.
group_addrthe group address of the dataflow.
threshold_interval_secthe number of seconds in the interval requested for measurement.
threshold_interval_usecthe number of microseconds in the interval requested for measurement.
measured_interval_secthe number of seconds in the last measured interval that has triggered the signal.
measured_interval_usecthe number of microseconds in the last measured interval that has triggered the signal.
threshold_packetsthe threshold value to trigger a signal (in number of packets).
threshold_bytesthe threshold value to trigger a signal (in bytes).
measured_packetsthe number of packets measured within the measured_interval.
measured_bytesthe number of bytes measured within the measured_interval.
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 "<=".

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  join_multicast_group (const string& module_instance_name, x_module_id module_id, uint16_t vif_index, const IPvX& group)

join_multicast_group

Join a multicast group.

Parameters:
module_instance_namethe module instance name of the protocol to join the multicast group.
module_idthe module ID (x_module_id) of the protocol to join the multicast group.
vif_indexthe vif index of the interface to join.
groupthe multicast group to join.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  leave_multicast_group (const string& module_instance_name, x_module_id module_id, uint16_t vif_index, const IPvX& group)

leave_multicast_group

Leave a multicast group.

Parameters:
module_instance_namethe module instance name of the protocol to leave the multicast group.
module_idthe module ID (x_module_id) of the protocol to leave the multicast group.
vif_indexthe vif index of the interface to leave.
groupthe multicast group to leave.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  add_mfc (const string& module_instance_name, const IPvX& source, const IPvX& group, uint16_t iif_vif_index, const Mifset& oiflist, const Mifset& oiflist_disable_wrongvif, uint32_t max_vifs_oiflist, const IPvX& rp_addr)

add_mfc

Add Multicast Forwarding Cache (MFC) to the kernel.

Parameters:
module_instance_namethe module instance name of the protocol that adds the MFC.
sourcethe source address.
groupthe group address.
iif_vif_indexthe vif index of the incoming interface.
oiflistthe bitset with the outgoing interfaces.
oiflist_disable_wrongvifthe bitset with the outgoing interfaces to disable the WRONGVIF signal.
max_vifs_oiflistthe number of vifs covered by oiflist or oiflist_disable_wrongvif.
rp_addrthe RP address.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  delete_mfc (const string& module_instance_name, const IPvX& source, const IPvX& group)

delete_mfc

Delete Multicast Forwarding Cache (MFC) from the kernel.

Note: all corresponding dataflow entries are also removed.

Parameters:
module_instance_namethe module instance name of the protocol that deletes the MFC.
sourcethe source address.
groupthe group address.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  add_dataflow_monitor (const string& module_instance_name, const IPvX& source, const IPvX& group, const struct 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)

add_dataflow_monitor

Add a 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.

Parameters:
module_instance_namethe module instance name of the protocol that adds the dataflow monitor entry.
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 "<=".

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  delete_dataflow_monitor (const string& module_instance_name, const IPvX& source, const IPvX& group, const struct 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)

delete_dataflow_monitor

Delete a 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.

Parameters:
module_instance_namethe module instance name of the protocol that deletes the dataflow monitor entry.
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 "<=".

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  delete_all_dataflow_monitor (const string& module_instance_name, const IPvX& source, const IPvX& group)

delete_all_dataflow_monitor

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

Parameters:
module_instance_namethe module instance name of the protocol that deletes the dataflow monitor entry.
sourcethe source address.
groupthe group address.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  add_multicast_vif (uint16_t vif_index)

add_multicast_vif

Add a multicast vif to the kernel.

Parameters:
vif_indexthe vif index of the interface to add.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  delete_multicast_vif (uint16_t vif_index)

delete_multicast_vif

Delete a multicast vif from the kernel.

Parameters:
vif_indexthe vif index of the interface to delete.

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 MFC multicast forwarding statistics from the kernel.

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: the number of packets and bytes forwarded by the particular MFC entry, and the number of packets arrived on a wrong interface.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  get_vif_count (uint16_t vif_index, VifCount& vif_count)

get_vif_count

Get interface multicast forwarding statistics from the kernel.

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.

MribTable&  mrib_table ()

mrib_table

Get a reference to the local copy of the MRIB table (MribTable).

Returns: a reference to the local copy of the MRIB table (MribTable).

Timer&  mrib_table_read_timer ()

mrib_table_read_timer

Get a reference to the timer for periodic update of the local MRIB table (MribTable) from the kernel.

Returns: a reference to the timer for periodic update of the local MRIB table (MribTable) from the kernel.

int  get_mrib_table (Mrib **mrib_table)

get_mrib_table

Get a copy of the kernel MRIB (Mrib) information.

Parameters:
mrib_tablea pointer to the routing table array composed of Mrib elements.

Returns: The number of entries in mrib_table, or XORP_ERROR if there was an error.

MfeaDft&  mfea_dft ()

mfea_dft

Get a reference to the dataflow table (MfeaDft).

Returns: a reference to the dataflow table (MfeaDft).

vector<UnixComm *>&  unix_comms ()

unix_comms

Get a reference to the vector-array of installed UnixComm entries.

Returns: a reference to the vector-array of installed UnixComm entries.

UnixCommunix_comm_find_by_module_id (x_module_id module_id)

unix_comm_find_by_module_id

[const]

Find an UnixComm entry for a given module ID (x_module_id).

Parameters:
module_idthe module ID (x_module_id) to search for.

Returns: the corresponding #UnixComm entry if found, otherwise NULL.

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 Dec 11 16:50:48 2002, using kdoc 2.0a54+XORP.