class ProtoNode

Base class for a protocol node. More...

Contains pure virtuals
Definition#include <proto_node.hh>
Template formProtoNode<class V>
InheritsProtoUnit [public ]
List of all Methods
Annotated List
Files
Globals
Hierarchy
Index

Public Methods


Detailed Description

 ProtoNode (int init_family, x_module_id init_module_id, EventLoop& init_event_loop)

ProtoNode

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

Parameters:
init_familythe address family (AF_INET or AF_INET6 for IPv4 and IPv6 respectively).
init_module_idthe module ID X_MODULE_* (x_module_id).
init_event_loopthe event loop to use.

 ~ProtoNode ()

~ProtoNode

[virtual]

Destructor

int  start ()

start

Reimplemented from ProtoUnit.

int  stop ()

stop

Reimplemented from ProtoUnit.

void  enable ()

enable

Reimplemented from ProtoUnit.

void  disable ()

disable

Reimplemented from ProtoUnit.

inline uint16_t  vif_name2vif_index (const string& vif_name)

vif_name2vif_index

[const]

Map a vif name to a vif index.

Parameters:
vif_namethe vif name to map to a vif index.

Returns: the virtual interface index for vif name vif_name.

inline uint16_t  find_unused_vif_index ()

find_unused_vif_index

[const]

Find an unused vif index.

Returns: the smallest unused vif index if there is one available, otherwise return Vif::VIF_INDEX_INVALID.

inline V * vif_find_by_name (const string& name)

vif_find_by_name

[const]

Find a virtual interface for a given name.

Parameters:
namethe name to search for.

Returns: the virtual interface with name name if found, otherwise NULL.

inline V * vif_find_by_addr (const IPvX& ipaddr_test)

vif_find_by_addr

[const]

Find a virtual interface for a given address.

Parameters:
ipaddr_testthe address to search for.

Returns: the virtual interface with address ipaddr_test if found, otherwise NULL.

inline V * vif_find_by_pif_index (uint16_t pif_index)

vif_find_by_pif_index

[const]

Find a virtual interface for a given physical interface index.

Parameters:
pif_indexthe physical interface index to search for.

Returns: the virtual interface with physical interface index pif_index if found, otherwise NULL.

inline V * vif_find_by_vif_index (uint16_t vif_index)

vif_find_by_vif_index

[const]

Find a virtual interface for a given virtual interface index.

Parameters:
vif_indexthe virtual interface index to search for.

Returns: the vvirtual interface with virtual interface index vif_index if found, otherwise NULL.

inline V * vif_find_direct (const IPvX& ipaddr_test)

vif_find_direct

[const]

Find a virtual interface that is directly connected to the given address.

Parameters:
ipaddr_testthe address to search by.

Returns: the virtual interface that is directly connected to address ipaddr_test if found, otherwise NULL.

bool  is_directly_connected (const IPvX& ipaddr_test)

is_directly_connected

[const]

Test if an address is directly connected to one of my virtual interfaces.

Parameters:
ipaddr_testthe address to test.

Returns: true if ipaddr_test is directly connected to one of my virtual interfaces, otherwise false.

bool  is_my_addr (const IPvX& ipaddr_test)

is_my_addr

[const]

Test if an address belongs to one of my virtual interfaces.

Parameters:
ipaddr_testthe address to test.

Returns: true if ipaddr_test belongs to one of my virtual interfaces, otherwise false.

inline int  add_vif (V *vif)

add_vif

Add a virtual interface.

Parameters:
vifa pointer to the virtual interface to add.

Returns: XORP_OK on success, otherwise XORP_ERROR.

inline int  delete_vif (const V *vif)

delete_vif

Delete a virtual interface.

Note: the vif itself is not deleted, only its place in the array of protocol vifs.

Parameters:
vifa pointer to the virtual interface to delete.

Returns: XORP_OK on success, otherwise XORP_ERROR.

vector<V *>&  proto_vifs ()

proto_vifs

Get the array of pointers to the virtual interfaces.

Returns: the array of pointers to the virtual interfaces.

uint16_t  maxvifs ()

maxvifs

[const]

Get the maximum number of vifs.

Note: the interfaces that are not configured or are down are also included.

Returns: the maximum number of vifs we can have.

EventLoop&  event_loop ()

event_loop

Get the event loop this node is added to.

Returns: the event loop this node is added to.

bool  is_vif_setup_completed ()

is_vif_setup_completed

[const]

Test if the vif setup is completed.

Returns: true if the vif setup is completed, otherwise false.

void  set_vif_setup_completed (bool v)

set_vif_setup_completed

Set/reset the flag that indicates whether the vif setup is completed.

Parameters:
vif true, set the flag that the vif setup is completed, otherwise reset it.

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

[pure virtual]

Receive a protocol message.

This is a pure virtual function, and it must be implemented by the particular protocol node class that inherits this base class.

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 (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  proto_send (const string& dst_module_instance_name, 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 *sndbuf, size_t sndlen)

proto_send

[pure virtual]

Send a protocol message.

This is a pure virtual function, and it must be implemented by the particular protocol node 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.
vif_indexthe vif index of the interface to send 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.
ip_tosthe IP TOS of the message. If it has a negative value, the TOS will be set by the lower layers.
router_alert_boolif true, set the ROUTER_ALERT IP option for the IP packet of the outgoung message.
sndbufthe data buffer with the outgoing message.
sndlenthe data length in sndbuf.

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

[pure virtual]

Receive a signal message.

This is a pure virtual function, and it must be implemented by the particular protocol node class that inherits this base class.

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.
message_typethe message type. The particular values are specific for the origin and recepient of this signal message.
vif_indexthe vif index of the related interface (message-specific relation).
srcthe source address of the message. The exact meaning of this address is message-specific.
dstthe destination address of the message. The exact meaning of this address is message-specific.
rcvbufthe data buffer with the additional information in the message.
rcvlenthe data length in rcvbuf.

Returns: XORP_OK on success, otherwise XORP_ERROR.

int  signal_message_send (const string& dst_module_instance_name, x_module_id dst_module_id, int message_type, uint16_t vif_index, const IPvX& src, const IPvX& dst, const uint8_t *sndbuf, size_t sndlen)

signal_message_send

[pure virtual]

Send a signal message.

This is a pure virtual function, and it must be implemented by the particular protocol node 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.
message_typethe message type. The particular values are specific for the origin and recepient of this signal message.
vif_indexthe vif index of the related interface (message-specific relation).
srcthe source address of the message. The exact meaning of this address is message-specific.
dstthe destination address of the message. The exact meaning of this address is message-specific.
sndbufthe data buffer with the outgoing message.
sndlenthe data length in sndbuf.

Returns: XORP_OK on success, otherwise XORP_ERROR.


Generated by: pavlin on possum.icir.org on Mon Mar 10 19:34:51 2003, using kdoc 2.0a54+XORP.