|
|
PimVif (PimNode& pim_node, const Vif& vif)
| PimVif |
Constructor for a given PIM node and a generic virtual interface.
Parameters:
pim_node | the PimNode this interface belongs to. |
vif | the generic Vif interface that contains various information. |
~PimVif ()
| ~PimVif |
[virtual]
void set_default_config ()
| set_default_config |
Set configuration to default values.
int set_proto_version (int proto_version)
| set_proto_version |
Set the current protocol version.
The protocol version must be in the interval [PIM_VERSION_MIN, PIM_VERSION_MAX].
Parameters:
proto_version | the protocol version to set. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
Reimplemented from ProtoUnit.
int start (string& error_msg)
| start |
Start PIM on a single virtual interface.
Parameters:
error_msg | the error message (if error). |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int stop (string& error_msg)
| stop |
Gracefully stop PIM on a single virtual interface.
The graceful stop will attempt to send Join/Prune, Assert, etc. messages for all multicast routing entries to gracefully clean-up state with neighbors. After the multicast routing entries cleanup is completed, PimVif::final_stop() is called to complete the job. If this method is called one-after-another, the second one will force calling immediately PimVif::final_stop() to quickly finish the job.
Parameters:
error_msg | the error message (if error). |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int final_stop (string& error_msg)
| final_stop |
Completely stop PIM on a single virtual interface.
This method should be called after PimVif::stop() to complete the job.
Parameters:
error_msg | the error message (if error). |
Returns: XORP_OK on success, otherwise XORP_ERROR.
void enable ()
| enable |
Enable PIM on a single virtual interface.
If an unit is not enabled, it cannot be start, or pending-start.
void disable ()
| disable |
Disable PIM on a single virtual interface.
If an unit is disabled, it cannot be start or pending-start. If the unit was runnning, it will be stop first.
int pim_recv (const IPvX& src, const IPvX& dst,
int ip_ttl, int ip_tos, bool router_alert_bool,
buffer_t *buffer)
| pim_recv |
Receive a protocol message.
Parameters:
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 it should be ignored. |
ip_ttl | the IP TOS of the message. If it has a negative value, it should be ignored. |
router_alert_bool | if true, the IP Router Alert option in the IP packet was set (when applicable). |
buffer | the data buffer with the received message. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
string flags_string ()
| flags_string |
[const]
Get the string with the flags about the vif status.
TODO: temporary here. Should go to the Vif class after the Vif class starts using the Proto class.
Returns: the C++ style string with the flags about the vif status (e.g., UP/DOWN/DISABLED, etc).
PimNode& pim_node ()
| pim_node |
[const]
Get the PIM node (PimNode).
Returns: a reference to the PIM node (PimNode).
PimMrt& pim_mrt ()
| pim_mrt |
[const]
Get the PIM Multicast Routing Table (PimMrt).
Returns: a reference to the PIM Multicast Routing Table (PimMrt).
PimNbr& pim_nbr_me ()
| pim_nbr_me |
Get the PIM neighbor information (PimNbr) about myself.
Returns: a reference to the PIM neighbor information (PimNbr) about myself.
void pim_hello_start ()
| pim_hello_start |
Start the PIM Hello operation.
void pim_hello_stop ()
| pim_hello_stop |
void pim_hello_stop_dr ()
| pim_hello_stop_dr |
Attempt to inform other PIM neighbors that this interface is not more the Designated Router.
void pim_dr_elect ()
| pim_dr_elect |
Elect a Designated Router on this interface.
bool i_may_become_dr (const IPvX& exclude_addr)
| i_may_become_dr |
Compute if I may become the Designated Router on this interface if one of the PIM neighbor addresses is not considered.
Compute if I may become the DR on this interface if exclude_addr is excluded.
Parameters:
exclude_addr | the address to exclude in the computation. |
Returns: true if I may become the DR on this interface, otherwise false.
const IPvX& primary_addr ()
| primary_addr |
[const]
Get my primary address on this interface.
Returns: my primary address on this interface.
const IPvX& domain_wide_addr ()
| domain_wide_addr |
[const]
Get my domain-wide reachable address on this interface.
Returns: my domain-wide reachable address on this interface.
void set_domain_wide_addr (const IPvX& v)
| set_domain_wide_addr |
Set my domain-wide reachable address on this interface.
Parameters:
v | the value of the domain-wide reachable address. |
int update_primary_and_domain_wide_address (string& error_msg)
| update_primary_and_domain_wide_address |
Update the primary and the domain-wide reachable addresses.
The primary address should be a link-local unicast address, and is used for transmitting the multicast control packets on the LAN. The domain-wide reachable address is the address that should be reachable by all PIM-SM routers in the domain (e.g., the Cand-BSR, or the Cand-RP address).
Parameters:
error_msg | the error message (if error). |
Returns: XORP_OK on success, otherwise XORP_ERROR.
const IPvX& dr_addr ()
| dr_addr |
[const]
Get the address of the Designated Router on this interface.
Returns: the address of the Designated Router on this interface.
ConfigParam<uint16_t>& hello_triggered_delay ()
| hello_triggered_delay |
ConfigParam<uint16_t>& hello_period ()
| hello_period |
ConfigParam<uint16_t>& hello_holdtime ()
| hello_holdtime |
ConfigParam<uint32_t>& dr_priority ()
| dr_priority |
ConfigParam<uint16_t>& lan_delay ()
| lan_delay |
ConfigParam<uint16_t>& override_interval ()
| override_interval |
ConfigParam<bool>& is_tracking_support_disabled ()
| is_tracking_support_disabled |
ConfigParam<bool>& accept_nohello_neighbors ()
| accept_nohello_neighbors |
ConfigParam<uint32_t>& genid ()
| genid |
ConfigParam<uint16_t>& join_prune_period ()
| join_prune_period |
ConfigParam<uint16_t>& join_prune_holdtime ()
| join_prune_holdtime |
ConfigParam<uint32_t>& assert_time ()
| assert_time |
ConfigParam<uint32_t>& assert_override_interval ()
| assert_override_interval |
int pim_send (const IPvX& src, const IPvX& dst,
uint8_t message_type, buffer_t *buffer)
| pim_send |
int pim_hello_send ()
| pim_hello_send |
int pim_hello_first_send ()
| pim_hello_first_send |
int pim_join_prune_send (PimNbr *pim_nbr, PimJpHeader *jp_header)
| pim_join_prune_send |
int pim_assert_mre_send (PimMre *pim_mre,
const IPvX& assert_source_addr)
| pim_assert_mre_send |
int pim_assert_cancel_send (PimMre *pim_mre)
| pim_assert_cancel_send |
int pim_assert_send (const IPvX& assert_source_addr,
const IPvX& assert_group_addr,
bool rpt_bit,
uint32_t metric_preference,
uint32_t metric)
| pim_assert_send |
int pim_register_send (const IPvX& rp_addr,
const IPvX& source_addr,
const IPvX& group_addr,
const uint8_t *rcvbuf,
size_t rcvlen)
| pim_register_send |
int pim_register_null_send (const IPvX& rp_addr,
const IPvX& source_addr,
const IPvX& group_addr)
| pim_register_null_send |
int pim_register_stop_send (const IPvX& dr_addr,
const IPvX& source_addr,
const IPvX& group_addr)
| pim_register_stop_send |
int pim_bootstrap_send (const IPvX& dst_addr,
const BsrZone& bsr_zone)
| pim_bootstrap_send |
buffer_t * pim_bootstrap_send_prepare (const IPvX& src_addr,
const IPvX& dst_addr,
const BsrZone& bsr_zone,
bool is_first_fragment)
| pim_bootstrap_send_prepare |
int pim_cand_rp_adv_send (const IPvX& bsr_addr,
const BsrZone& bsr_zone)
| pim_cand_rp_adv_send |
void hello_timer_start (uint32_t sec, uint32_t usec)
| hello_timer_start |
void hello_timer_start_random (uint32_t sec, uint32_t usec)
| hello_timer_start_random |
bool is_lan_delay_enabled ()
| is_lan_delay_enabled |
[const]
const TimeVal& vif_propagation_delay ()
| vif_propagation_delay |
[const]
const TimeVal& vif_override_interval ()
| vif_override_interval |
[const]
bool is_lan_suppression_state_enabled ()
| is_lan_suppression_state_enabled |
[const]
const TimeVal& upstream_join_timer_t_suppressed ()
| upstream_join_timer_t_suppressed |
[const]
const TimeVal& upstream_join_timer_t_override ()
| upstream_join_timer_t_override |
[const]
const TimeVal& jp_override_interval ()
| jp_override_interval |
[const]
list<PimNbr *>& pim_nbrs ()
| pim_nbrs |
int pim_nbrs_number ()
| pim_nbrs_number |
[const]
bool i_am_dr ()
| i_am_dr |
[const]
void set_i_am_dr (bool v)
| set_i_am_dr |
PimNbr * pim_nbr_find (const IPvX& nbr_addr)
| pim_nbr_find |
void add_pim_nbr (PimNbr *pim_nbr)
| add_pim_nbr |
int delete_pim_nbr (PimNbr *pim_nbr)
| delete_pim_nbr |
void delete_pim_nbr_from_nbr_list (PimNbr *pim_nbr)
| delete_pim_nbr_from_nbr_list |
const list<IPvXNet>& alternative_subnet_list ()
| alternative_subnet_list |
[const]
void add_alternative_subnet (const IPvXNet& subnet)
| add_alternative_subnet |
void delete_alternative_subnet (const IPvXNet& subnet)
| delete_alternative_subnet |
void remove_all_alternative_subnets ()
| remove_all_alternative_subnets |
size_t usage_by_pim_mre_task ()
| usage_by_pim_mre_task |
[const]
void incr_usage_by_pim_mre_task ()
| incr_usage_by_pim_mre_task |
void decr_usage_by_pim_mre_task ()
| decr_usage_by_pim_mre_task |
uint16_t calculate_ipv6_pseudo_header_checksum (const IPvX& src,
const IPvX& dst,
size_t len)
| calculate_ipv6_pseudo_header_checksum |
Calculate the checksum of an IPv6 "pseudo-header" as described in RFC 2460.
Parameters:
src | the source address of the pseudo-header. |
dst | the destination address of the pseudo-header. |
len | the upper-layer packet length of the pseudo-header (in host-order). |
Returns: the checksum of the IPv6 "pseudo-header".
buffer_t * buffer_send_prepare ()
| buffer_send_prepare |
buffer_t * buffer_send_prepare (buffer_t *buffer)
| buffer_send_prepare |
void clear_pim_statistics ()
| clear_pim_statistics |
uint32_t pimstat_hello_messages_received ()
| pimstat_hello_messages_received |
[const]
uint32_t pimstat_hello_messages_sent ()
| pimstat_hello_messages_sent |
[const]
uint32_t pimstat_hello_messages_rx_errors ()
| pimstat_hello_messages_rx_errors |
[const]
uint32_t pimstat_register_messages_received ()
| pimstat_register_messages_received |
[const]
uint32_t pimstat_register_messages_sent ()
| pimstat_register_messages_sent |
[const]
uint32_t pimstat_register_messages_rx_errors ()
| pimstat_register_messages_rx_errors |
[const]
uint32_t pimstat_register_stop_messages_received ()
| pimstat_register_stop_messages_received |
[const]
uint32_t pimstat_register_stop_messages_sent ()
| pimstat_register_stop_messages_sent |
[const]
uint32_t pimstat_register_stop_messages_rx_errors ()
| pimstat_register_stop_messages_rx_errors |
[const]
uint32_t pimstat_join_prune_messages_received ()
| pimstat_join_prune_messages_received |
[const]
uint32_t pimstat_join_prune_messages_sent ()
| pimstat_join_prune_messages_sent |
[const]
uint32_t pimstat_join_prune_messages_rx_errors ()
| pimstat_join_prune_messages_rx_errors |
[const]
uint32_t pimstat_bootstrap_messages_received ()
| pimstat_bootstrap_messages_received |
[const]
uint32_t pimstat_bootstrap_messages_sent ()
| pimstat_bootstrap_messages_sent |
[const]
uint32_t pimstat_bootstrap_messages_rx_errors ()
| pimstat_bootstrap_messages_rx_errors |
[const]
uint32_t pimstat_assert_messages_received ()
| pimstat_assert_messages_received |
[const]
uint32_t pimstat_assert_messages_sent ()
| pimstat_assert_messages_sent |
[const]
uint32_t pimstat_assert_messages_rx_errors ()
| pimstat_assert_messages_rx_errors |
[const]
uint32_t pimstat_graft_messages_received ()
| pimstat_graft_messages_received |
[const]
uint32_t pimstat_graft_messages_sent ()
| pimstat_graft_messages_sent |
[const]
uint32_t pimstat_graft_messages_rx_errors ()
| pimstat_graft_messages_rx_errors |
[const]
uint32_t pimstat_graft_ack_messages_received ()
| pimstat_graft_ack_messages_received |
[const]
uint32_t pimstat_graft_ack_messages_sent ()
| pimstat_graft_ack_messages_sent |
[const]
uint32_t pimstat_graft_ack_messages_rx_errors ()
| pimstat_graft_ack_messages_rx_errors |
[const]
uint32_t pimstat_candidate_rp_messages_received ()
| pimstat_candidate_rp_messages_received |
[const]
uint32_t pimstat_candidate_rp_messages_sent ()
| pimstat_candidate_rp_messages_sent |
[const]
uint32_t pimstat_candidate_rp_messages_rx_errors ()
| pimstat_candidate_rp_messages_rx_errors |
[const]
uint32_t pimstat_unknown_type_messages ()
| pimstat_unknown_type_messages |
[const]
uint32_t pimstat_unknown_version_messages ()
| pimstat_unknown_version_messages |
[const]
uint32_t pimstat_neighbor_unknown_messages ()
| pimstat_neighbor_unknown_messages |
[const]
uint32_t pimstat_bad_length_messages ()
| pimstat_bad_length_messages |
[const]
uint32_t pimstat_bad_checksum_messages ()
| pimstat_bad_checksum_messages |
[const]
uint32_t pimstat_bad_receive_interface_messages ()
| pimstat_bad_receive_interface_messages |
[const]
uint32_t pimstat_rx_interface_disabled_messages ()
| pimstat_rx_interface_disabled_messages |
[const]
uint32_t pimstat_rx_register_not_rp ()
| pimstat_rx_register_not_rp |
[const]
uint32_t pimstat_rp_filtered_source ()
| pimstat_rp_filtered_source |
[const]
uint32_t pimstat_unknown_register_stop ()
| pimstat_unknown_register_stop |
[const]
uint32_t pimstat_rx_join_prune_no_state ()
| pimstat_rx_join_prune_no_state |
[const]
uint32_t pimstat_rx_graft_graft_ack_no_state ()
| pimstat_rx_graft_graft_ack_no_state |
[const]
uint32_t pimstat_rx_graft_on_upstream_interface ()
| pimstat_rx_graft_on_upstream_interface |
[const]
uint32_t pimstat_rx_candidate_rp_not_bsr ()
| pimstat_rx_candidate_rp_not_bsr |
[const]
uint32_t pimstat_rx_bsr_when_bsr ()
| pimstat_rx_bsr_when_bsr |
[const]
uint32_t pimstat_rx_bsr_not_rpf_interface ()
| pimstat_rx_bsr_not_rpf_interface |
[const]
uint32_t pimstat_rx_unknown_hello_option ()
| pimstat_rx_unknown_hello_option |
[const]
uint32_t pimstat_rx_data_no_state ()
| pimstat_rx_data_no_state |
[const]
uint32_t pimstat_rx_rp_no_state ()
| pimstat_rx_rp_no_state |
[const]
uint32_t pimstat_rx_aggregate ()
| pimstat_rx_aggregate |
[const]
uint32_t pimstat_rx_malformed_packet ()
| pimstat_rx_malformed_packet |
[const]
uint32_t pimstat_no_rp ()
| pimstat_no_rp |
[const]
uint32_t pimstat_no_route_upstream ()
| pimstat_no_route_upstream |
[const]
uint32_t pimstat_rp_mismatch ()
| pimstat_rp_mismatch |
[const]
uint32_t pimstat_rpf_neighbor_unknown ()
| pimstat_rpf_neighbor_unknown |
[const]
uint32_t pimstat_rx_join_rp ()
| pimstat_rx_join_rp |
[const]
uint32_t pimstat_rx_prune_rp ()
| pimstat_rx_prune_rp |
[const]
uint32_t pimstat_rx_join_wc ()
| pimstat_rx_join_wc |
[const]
uint32_t pimstat_rx_prune_wc ()
| pimstat_rx_prune_wc |
[const]
uint32_t pimstat_rx_join_sg ()
| pimstat_rx_join_sg |
[const]
uint32_t pimstat_rx_prune_sg ()
| pimstat_rx_prune_sg |
[const]
uint32_t pimstat_rx_join_sg_rpt ()
| pimstat_rx_join_sg_rpt |
[const]
uint32_t pimstat_rx_prune_sg_rpt ()
| pimstat_rx_prune_sg_rpt |
[const]