|
|
ProtoNode (int init_family, xorp_module_id init_module_id,
EventLoop& init_eventloop)
| ProtoNode |
Constructor for a given address family, module ID, and event loop.
Parameters:
init_family | the address family (AF_INET or AF_INET6 for IPv4 and IPv6 respectively). |
init_module_id | the module ID XORP_MODULE_* (xorp_module_id). |
init_eventloop | the event loop to use. |
~ProtoNode ()
| ~ProtoNode |
[virtual]
inline uint16_t vif_name2vif_index (const string& vif_name)
| vif_name2vif_index |
[const]
Map a vif name to a vif index.
Parameters:
vif_name | the 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:
name | the 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.
Note that the PIM Register virtual interfaces are excluded, because they are special, and because they may share the same address as some of the other virtual interfaces.
Parameters:
ipaddr_test | the 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_index | the 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_index | the virtual interface index to search for. |
Returns: the vvirtual interface with virtual interface index vif_index if found, otherwise NULL.
inline V * vif_find_same_subnet_or_p2p (const IPvX& ipaddr_test)
| vif_find_same_subnet_or_p2p |
[const]
Find a virtual interface that belongs to the same subnet or point-to-point link as a given address.
Note that the PIM Register virtual interfaces are excluded, because they are special, and because they may share the same address as some of the other virtual interfaces.
Parameters:
ipaddr_test | the address to search by. |
Returns: the virtual interface that belongs to the same subnet or point-to-point link as address ipaddr_test if found, otherwise NULL.
bool is_my_addr (const IPvX& ipaddr_test)
| is_my_addr |
[const]
Test if an address belongs to one of my virtual interfaces.
Note that the PIM Register virtual interfaces are excluded, because they are special, and because they may share the same address as some of the other virtual interfaces.
Parameters:
ipaddr_test | the 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:
vif | a 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:
vif | a 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.
const vector<V *>& const_proto_vifs ()
| const_proto_vifs |
[const]
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& eventloop ()
| eventloop |
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:
v | if true, set the flag that the vif setup is completed, otherwise reset it. |
int proto_recv (const string& src_module_instance_name,
xorp_module_id src_module_id,
uint16_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)
| 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_name | the module instance name of the module-origin of the message. |
src_module_id | the module ID (xorp_module_id) of the module-origin of the message. |
vif_index | the vif index of the interface used to receive this message. |
src | the source address of the message. |
dst | the destination address of the message. |
ip_ttl | the IP TTL (Time To Live) of the message. If it has a negative value, it should be ignored. |
ip_tos | the IP TOS (Type of Service) of the message. If it has a negative value, it should be ignored. |
is_router_alert | if true, the Router Alert IP option for the IP packet of the incoming message was set. |
rcvbuf | the data buffer with the received message. |
rcvlen | the data length in rcvbuf. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int proto_send (const string& dst_module_instance_name,
xorp_module_id dst_module_id,
uint16_t vif_index,
const IPvX& src,
const IPvX& dst,
int ip_ttl,
int ip_tos,
bool is_router_alert,
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_name | the module instance name of the module-recepient of the message. |
dst_module_id | the module ID (xorp_module_id) of the module-recepient of the message. |
vif_index | the vif index of the interface to send this message. |
src | the source address of the message. |
dst | the destination address of the message. |
ip_ttl | the IP TTL of the message. If it has a negative value, the TTL will be set by the lower layers. |
ip_tos | the IP TOS of the message. If it has a negative value, the TOS will be set by the lower layers. |
is_router_alert | if true, set the Router Alert IP option for the IP packet of the outgoung message. |
sndbuf | the data buffer with the outgoing message. |
sndlen | the data length in sndbuf. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int signal_message_recv (const string& src_module_instance_name,
xorp_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_name | the module instance name of the module-origin of the message. |
src_module_id | the module ID (xorp_module_id) of the module-origin of the message. |
message_type | the message type. The particular values are specific for the origin and recepient of this signal message. |
vif_index | the vif index of the related interface (message-specific relation). |
src | the source address of the message. The exact meaning of this address is message-specific. |
dst | the destination address of the message. The exact meaning of this address is message-specific. |
rcvbuf | the data buffer with the additional information in the message. |
rcvlen | the data length in rcvbuf. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int signal_message_send (const string& dst_module_instance_name,
xorp_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_name | the module instance name of the module-recepient of the message. |
dst_module_id | the module ID (xorp_module_id) of the module-recepient of the message. |
message_type | the message type. The particular values are specific for the origin and recepient of this signal message. |
vif_index | the vif index of the related interface (message-specific relation). |
src | the source address of the message. The exact meaning of this address is message-specific. |
dst | the destination address of the message. The exact meaning of this address is message-specific. |
sndbuf | the data buffer with the outgoing message. |
sndlen | the data length in sndbuf. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
bool is_done ()
| is_done |
[const]
Test if the node processing is done.
Returns: true if the node processing is done, otherwise false.
ProcessStatus node_status ()
| node_status |
[const]
Get the node status (see ProcessStatus).
Returns: the node status (see ProcessStatus).
void set_node_status (ProcessStatus v)
| set_node_status |
Set the node status (see ProcessStatus).
Parameters:
v | the value to set the node status to. |
int start_config (string& error_msg)
| start_config |
Start a set of configuration changes.
Note that it may change the node status.
@error_msg: The error message (if error).
Returns: XORP_OK on success, otherwise XORP_ERROR.
int end_config (string& error_msg)
| end_config |
End a set of configuration changes.
Note that it may change the node status.
@error_msg: The error message (if error).
Returns: XORP_OK on success, otherwise XORP_ERROR.
inline uint16_t find_unused_config_vif_index ()
| find_unused_config_vif_index |
[const]
Find an unused vif index from the set of configured vifs.
Returns: the smallest unused vif index from the set of configured vifs if there is one available, otherwise return Vif::VIF_INDEX_INVALID.
int add_config_vif (const Vif& vif, string& error_msg)
| add_config_vif |
Add a configured vif.
Parameters:
vif | the vif with the information to add. @error_msg: The error message (if error). |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int add_config_vif (const string& vif_name, uint16_t vif_index,
string& error_msg)
| add_config_vif |
Add a configured vif.
Parameters:
vif_name | the name of the vif to add. |
vif_index | the vif index of the vif to add. @error_msg: The error message (if error). |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int delete_config_vif (const string& vif_name, string& error_msg)
| delete_config_vif |
Delete a configured vif.
Parameters:
vif_name | the name of the vif to delete. @error_msg: The error message (if error). |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int add_config_vif_addr (const string& vif_name,
const IPvX& addr,
const IPvXNet& subnet,
const IPvX& broadcast,
const IPvX& peer,
string& error_msg)
| add_config_vif_addr |
Add an address to a configured vif.
Parameters:
vif_name | the name of the vif. |
addr | the address to add. |
subnet | the subnet address to add. |
broadcast | the broadcast address to add. |
peer | the peer address to add. @error_msg: The error message (if error). |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int delete_config_vif_addr (const string& vif_name,
const IPvX& addr,
string& error_msg)
| delete_config_vif_addr |
Delete an address from a configured vif.
Parameters:
vif_name | the name of the vif. |
addr | the address to delete. @error_msg: The error message (if error). |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int set_config_pif_index (const string& vif_name,
uint16_t pif_index,
string& error_msg)
| set_config_pif_index |
Set the pif_index of a configured vif.
Parameters:
vif_name | the name of the vif. |
pif_index | the physical interface index. @error_msg: The error message (if error). |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int set_config_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,
string& error_msg)
| set_config_vif_flags |
Set the vif flags of a configured vif.
Parameters:
vif_name | the name of the vif. |
is_pim_register | true if the vif is a PIM Register interface. |
is_p2p | true if the vif is point-to-point interface. |
is_loopback | true if the vif is a loopback interface. |
is_multicast | true if the vif is multicast capable. |
is_broadcast | true if the vif is broadcast capable. |
is_up | true if the underlying vif is UP. @error_msg: The error message (if error). |
Returns: XORP_OK on success, otherwise XORP_ERROR.
map<string, Vif>& configured_vifs ()
| configured_vifs |
Get the map with configured vifs.
Returns: a reference for the map with configured vifs.
ProcessStatus node_status (string& reason_msg)
| node_status |
Get the node status (see ProcessStatus).
Parameters:
reason_msg | return-by-reference string that contains human-readable information about the status. |
Returns: the node status (see ProcessStatus).
void incr_startup_requests_n ()
| incr_startup_requests_n |
Increment the number of startup requests.
void decr_startup_requests_n ()
| decr_startup_requests_n |
Decrement the number of startup requests.
void incr_shutdown_requests_n ()
| incr_shutdown_requests_n |
Increment the number of shutdown requests.
void decr_shutdown_requests_n ()
| decr_shutdown_requests_n |
Decrement the number of shutdown requests.
void update_status ()
| update_status |
[protected]