|
xorp
|
A class for MLD/IGMP-specific virtual interface. More...
#include <mld6igmp_vif.hh>
Public Member Functions | |
| Mld6igmpVif (Mld6igmpNode &mld6igmp_node, const Vif &vif) | |
| Constructor for a given MLD/IGMP node and a generic virtual interface. | |
| virtual | ~Mld6igmpVif () |
| Destructor. | |
| int | set_proto_version (int proto_version) |
| Set the current protocol version. | |
| int | start (string &error_msg) |
| Start MLD/IGMP on a single virtual interface. | |
| int | stop (string &error_msg) |
| Stop MLD/IGMP on a single virtual interface. | |
| void | enable () |
| Enable MLD/IGMP on a single virtual interface. | |
| void | disable () |
| Disable MLD/IGMP on a single virtual interface. | |
| int | mld6igmp_recv (const IPvX &src, const IPvX &dst, int ip_ttl, int ip_tos, bool ip_router_alert, bool ip_internet_control, buffer_t *buffer, string &error_msg) |
| Receive a protocol message. | |
| string | flags_string () const |
| Get the string with the flags about the vif status. | |
| Mld6igmpNode & | mld6igmp_node () const |
| Get the MLD6IGMP node (Mld6igmpNode). | |
| const IPvX & | primary_addr () const |
| Get my primary address on this interface. | |
| void | set_primary_addr (const IPvX &v) |
| Set my primary address on this interface. | |
| int | update_primary_address (string &error_msg) |
| Update the primary address. | |
| const IPvX & | querier_addr () const |
| Get the MLD/IGMP querier address. | |
| void | set_querier_addr (const IPvX &v) |
| Set the MLD6/IGMP querier address. | |
| Mld6igmpGroupSet & | group_records () |
| Get the set with the multicast group records information (Mld6igmpGroupSet). | |
| const Mld6igmpGroupSet & | group_records () const |
| Get the const set with the multicast group records information (Mld6igmpGroupSet). | |
| bool | proto_is_ssm () const |
| Test if the protocol is Source-Specific Multicast (e.g., IGMPv3 or MLDv2). | |
| const XorpTimer & | const_other_querier_timer () const |
| Get the timer to timeout the (other) MLD/IGMP querier. | |
| ConfigParam< bool > & | ip_router_alert_option_check () |
| Optain a reference to the "IP Router Alert option check" flag. | |
| ConfigParam< TimeVal > & | configured_query_interval () |
| Optain a reference to the configured Query Interval. | |
| const TimeVal & | effective_query_interval () const |
| Get the effective Query Interval value. | |
| void | set_effective_query_interval (const TimeVal &v) |
| Set the effective Query Interval. | |
| ConfigParam< TimeVal > & | query_last_member_interval () |
| Optain a reference to the Last Member Query Interval. | |
| ConfigParam< TimeVal > & | query_response_interval () |
| Optain a reference to the Query Response Interval. | |
| ConfigParam< uint32_t > & | configured_robust_count () |
| Optain a reference to the configured Robustness Variable count. | |
| uint32_t | effective_robustness_variable () const |
| Get the effective Robustness Variable value. | |
| void | set_effective_robustness_variable (uint32_t v) |
| Set the effective Robustness Variable. | |
| uint32_t | last_member_query_count () const |
| Get the Last Member Query Count value. | |
| const TimeVal & | group_membership_interval () const |
| Obtain a reference to the Group Membership Interval. | |
| const TimeVal & | last_member_query_time () const |
| Obtain a reference to the Last Member Query Time. | |
| const TimeVal & | older_version_host_present_interval () const |
| Obtain a reference to the Older Version Host Present Interval. | |
| int | add_protocol (xorp_module_id module_id, const string &module_instance_name) |
| Add a protocol that needs to be notified about multicast membership changes. | |
| int | delete_protocol (xorp_module_id module_id, const string &module_instance_name) |
| Delete a protocol that needs to be notified about multicast membership changes. | |
| int | join_prune_notify_routing (const IPvX &source, const IPvX &group, action_jp_t action_jp) const |
| Notify the interested parties that there is membership change among the local members. | |
| int | mld6igmp_send (const IPvX &src, const IPvX &dst, uint8_t message_type, uint16_t max_resp_code, const IPvX &group_address, buffer_t *buffer, string &error_msg) |
| Send MLD or IGMP message. | |
| int | mld6igmp_group_query_send (const IPvX &group_address, string &error_msg) |
| Send Group-Specific Query message. | |
| int | mld6igmp_group_source_query_send (const IPvX &group_address, const set< IPvX > &sources, string &error_msg) |
| Send MLDv2 or IGMPv3 Group-and-Source-Specific Query message. | |
| int | mld6igmp_query_send (const IPvX &src, const IPvX &dst, const TimeVal &max_resp_time, const IPvX &group_address, const set< IPvX > &sources, bool s_flag, string &error_msg) |
| Send MLD or IGMP Query message. | |
| bool | is_igmpv1_mode () const |
| Test if the interface is running in IGMPv1 mode. | |
| bool | is_igmpv2_mode () const |
| Test if the interface is running in IGMPv2 mode. | |
| bool | is_igmpv3_mode () const |
| Test if the interface is running in IGMPv3 mode. | |
| bool | is_mldv1_mode () const |
| Test if the interface is running in MLDv1 mode. | |
| bool | is_mldv2_mode () const |
| Test if the interface is running in MLDv2 mode. | |
| bool | is_igmpv1_mode (const Mld6igmpGroupRecord *group_record) const |
| Test if a group is running in IGMPv1 mode. | |
| bool | is_igmpv2_mode (const Mld6igmpGroupRecord *group_record) const |
| Test if a group is running in IGMPv2 mode. | |
| bool | is_igmpv3_mode (const Mld6igmpGroupRecord *group_record) const |
| Test if a group is running in IGMPv3 mode. | |
| bool | is_mldv1_mode (const Mld6igmpGroupRecord *group_record) const |
| Test if a group is running in MLDv1 mode. | |
| bool | is_mldv2_mode (const Mld6igmpGroupRecord *group_record) const |
| Test if a group is running in MLDv2 mode. | |
| Mld6igmpVif (Mld6igmpNode &mld6igmp_node, const Vif &vif) | |
| Constructor for a given MLD/IGMP node and a generic virtual interface. | |
| virtual | ~Mld6igmpVif () |
| Destructor. | |
| int | set_proto_version (int proto_version) |
| Set the current protocol version. | |
| int | start (string &error_msg) |
| Start MLD/IGMP on a single virtual interface. | |
| void | notifyUpdated () |
| Attempt deferred start. | |
| int | stop (string &error_msg) |
| Stop MLD/IGMP on a single virtual interface. | |
| void | enable () |
| Enable MLD/IGMP on a single virtual interface. | |
| void | disable () |
| Disable MLD/IGMP on a single virtual interface. | |
| int | mld6igmp_recv (const IPvX &src, const IPvX &dst, int ip_ttl, int ip_tos, bool ip_router_alert, bool ip_internet_control, buffer_t *buffer, string &error_msg) |
| Receive a protocol message. | |
| string | flags_string () const |
| Get the string with the flags about the vif status. | |
| Mld6igmpNode & | mld6igmp_node () const |
| Get the MLD6IGMP node (Mld6igmpNode). | |
| const IPvX & | primary_addr () const |
| Get my primary address on this interface. | |
| void | set_primary_addr (const IPvX &v) |
| Set my primary address on this interface. | |
| int | update_primary_address (string &error_msg) |
| Update the primary address. | |
| const IPvX & | querier_addr () const |
| Get the MLD/IGMP querier address. | |
| void | set_querier_addr (const IPvX &v) |
| Set the MLD6/IGMP querier address. | |
| Mld6igmpGroupSet & | group_records () |
| Get the set with the multicast group records information (Mld6igmpGroupSet). | |
| const Mld6igmpGroupSet & | group_records () const |
| Get the const set with the multicast group records information (Mld6igmpGroupSet). | |
| bool | proto_is_ssm () const |
| Test if the protocol is Source-Specific Multicast (e.g., IGMPv3 or MLDv2). | |
| const XorpTimer & | const_other_querier_timer () const |
| Get the timer to timeout the (other) MLD/IGMP querier. | |
| ConfigParam< bool > & | ip_router_alert_option_check () |
| Optain a reference to the "IP Router Alert option check" flag. | |
| ConfigParam< TimeVal > & | configured_query_interval () |
| Optain a reference to the configured Query Interval. | |
| const TimeVal & | effective_query_interval () const |
| Get the effective Query Interval value. | |
| void | set_effective_query_interval (const TimeVal &v) |
| Set the effective Query Interval. | |
| ConfigParam< TimeVal > & | query_last_member_interval () |
| Optain a reference to the Last Member Query Interval. | |
| ConfigParam< TimeVal > & | query_response_interval () |
| Optain a reference to the Query Response Interval. | |
| ConfigParam< uint32_t > & | configured_robust_count () |
| Optain a reference to the configured Robustness Variable count. | |
| uint32_t | effective_robustness_variable () const |
| Get the effective Robustness Variable value. | |
| void | set_effective_robustness_variable (uint32_t v) |
| Set the effective Robustness Variable. | |
| uint32_t | last_member_query_count () const |
| Get the Last Member Query Count value. | |
| const TimeVal & | group_membership_interval () const |
| Obtain a reference to the Group Membership Interval. | |
| const TimeVal & | last_member_query_time () const |
| Obtain a reference to the Last Member Query Time. | |
| const TimeVal & | older_version_host_present_interval () const |
| Obtain a reference to the Older Version Host Present Interval. | |
| int | add_protocol (xorp_module_id module_id, const string &module_instance_name) |
| Add a protocol that needs to be notified about multicast membership changes. | |
| int | delete_protocol (xorp_module_id module_id, const string &module_instance_name, string &error_msg) |
| Delete a protocol that needs to be notified about multicast membership changes. | |
| int | join_prune_notify_routing (const IPvX &source, const IPvX &group, action_jp_t action_jp) const |
| Notify the interested parties that there is membership change among the local members. | |
| int | mld6igmp_send (const IPvX &src, const IPvX &dst, uint8_t message_type, uint16_t max_resp_code, const IPvX &group_address, buffer_t *buffer, string &error_msg) |
| Send MLD or IGMP message. | |
| int | mld6igmp_group_query_send (const IPvX &group_address, string &error_msg) |
| Send Group-Specific Query message. | |
| int | mld6igmp_group_source_query_send (const IPvX &group_address, const set< IPvX > &sources, string &error_msg) |
| Send MLDv2 or IGMPv3 Group-and-Source-Specific Query message. | |
| int | mld6igmp_query_send (const IPvX &src, const IPvX &dst, const TimeVal &max_resp_time, const IPvX &group_address, const set< IPvX > &sources, bool s_flag, string &error_msg) |
| Send MLD or IGMP Query message. | |
| bool | is_igmpv1_mode () const |
| Test if the interface is running in IGMPv1 mode. | |
| bool | is_igmpv2_mode () const |
| Test if the interface is running in IGMPv2 mode. | |
| bool | is_igmpv3_mode () const |
| Test if the interface is running in IGMPv3 mode. | |
| bool | is_mldv1_mode () const |
| Test if the interface is running in MLDv1 mode. | |
| bool | is_mldv2_mode () const |
| Test if the interface is running in MLDv2 mode. | |
| bool | is_igmpv1_mode (const Mld6igmpGroupRecord *group_record) const |
| Test if a group is running in IGMPv1 mode. | |
| bool | is_igmpv2_mode (const Mld6igmpGroupRecord *group_record) const |
| Test if a group is running in IGMPv2 mode. | |
| bool | is_igmpv3_mode (const Mld6igmpGroupRecord *group_record) const |
| Test if a group is running in IGMPv3 mode. | |
| bool | is_mldv1_mode (const Mld6igmpGroupRecord *group_record) const |
| Test if a group is running in MLDv1 mode. | |
| bool | is_mldv2_mode (const Mld6igmpGroupRecord *group_record) const |
| Test if a group is running in MLDv2 mode. | |
Private Types | |
| enum | { MLD6IGMP_VIF_QUERIER = 1 << 0 } |
| enum | { MLD6IGMP_VIF_QUERIER = 1 << 0 } |
Private Member Functions | |
| const char * | proto_message_type2ascii (uint8_t message_type) const |
| Return the ASCII text description of the protocol message. | |
| buffer_t * | buffer_send_prepare () |
| Reset and prepare the buffer for sending data. | |
| uint16_t | calculate_ipv6_pseudo_header_checksum (const IPvX &src, const IPvX &dst, size_t len, uint8_t protocol) |
| Calculate the checksum of an IPv6 "pseudo-header" as described in RFC 2460. | |
| bool | i_am_querier () const |
| Test whether I am the querier for this vif. | |
| void | set_i_am_querier (bool v) |
| Set the state whether I am the querier for this vif. | |
| void | set_configured_query_interval_cb (TimeVal v) |
| void | set_query_last_member_interval_cb (TimeVal v) |
| void | set_query_response_interval_cb (TimeVal v) |
| void | set_configured_robust_count_cb (uint32_t v) |
| void | recalculate_effective_query_interval () |
| void | recalculate_effective_robustness_variable () |
| void | recalculate_last_member_query_count () |
| void | recalculate_group_membership_interval () |
| void | recalculate_last_member_query_time () |
| void | recalculate_older_version_host_present_interval () |
| void | restore_effective_variables () |
| int | mld6igmp_membership_query_recv (const IPvX &src, const IPvX &dst, uint8_t message_type, uint16_t max_resp_code, const IPvX &group_address, buffer_t *buffer) |
| Mld6igmpVif::mld6igmp_membership_query_recv: : The message source address. | |
| int | mld6igmp_ssm_membership_query_recv (const IPvX &src, const IPvX &dst, uint8_t message_type, uint16_t max_resp_code, const IPvX &group_address, buffer_t *buffer) |
| Mld6igmpVif::mld6igmp_ssm_membership_query_recv: : The message source address. | |
| int | mld6igmp_membership_report_recv (const IPvX &src, const IPvX &dst, uint8_t message_type, uint16_t max_resp_code, const IPvX &group_address, buffer_t *buffer) |
| Mld6igmpVif::mld6igmp_membership_report_recv: : The message source address. | |
| int | mld6igmp_leave_group_recv (const IPvX &src, const IPvX &dst, uint8_t message_type, uint16_t max_resp_code, const IPvX &group_address, buffer_t *buffer) |
| Mld6igmpVif::mld6igmp_leave_group_recv: : The message source address. | |
| int | mld6igmp_ssm_membership_report_recv (const IPvX &src, const IPvX &dst, uint8_t message_type, buffer_t *buffer) |
| Mld6igmpVif::mld6igmp_ssm_membership_report_recv: : The message source address. | |
| int | mld6igmp_query_version_consistency_check (const IPvX &src, const IPvX &dst, uint8_t message_type, int message_version) |
| mld6igmp_query_version_consistency_check: : The message source address. | |
| int | mld6igmp_process (const IPvX &src, const IPvX &dst, int ip_ttl, int ip_tos, bool ip_router_alert, bool ip_internet_control, buffer_t *buffer, string &error_msg) |
| Mld6igmpVif::mld6igmp_process: : The message source address. | |
| size_t | mld6igmp_constant_minlen () const |
| uint32_t | mld6igmp_constant_timer_scale () const |
| uint8_t | mld6igmp_constant_membership_query () const |
| void | other_querier_timer_timeout () |
| Mld6igmpVif::other_querier_timer_timeout: | |
| void | query_timer_timeout () |
| Mld6igmpVif::query_timer_timeout: | |
| void | decode_exp_time_code8 (uint8_t code, TimeVal &timeval, uint32_t timer_scale) |
| void | decode_exp_time_code16 (uint16_t code, TimeVal &timeval, uint32_t timer_scale) |
| void | encode_exp_time_code8 (const TimeVal &timeval, uint8_t &code, uint32_t timer_scale) |
| void | encode_exp_time_code16 (const TimeVal &timeval, uint16_t &code, uint32_t timer_scale) |
| const char * | proto_message_type2ascii (uint8_t message_type) const |
| Return the ASCII text description of the protocol message. | |
| buffer_t * | buffer_send_prepare () |
| Reset and prepare the buffer for sending data. | |
| uint16_t | calculate_ipv6_pseudo_header_checksum (const IPvX &src, const IPvX &dst, size_t len, uint8_t protocol) |
| Calculate the checksum of an IPv6 "pseudo-header" as described in RFC 2460. | |
| bool | i_am_querier () const |
| Test whether I am the querier for this vif. | |
| void | set_i_am_querier (bool v) |
| Set the state whether I am the querier for this vif. | |
| void | set_configured_query_interval_cb (TimeVal v) |
| void | set_query_last_member_interval_cb (TimeVal v) |
| void | set_query_response_interval_cb (TimeVal v) |
| void | set_configured_robust_count_cb (uint32_t v) |
| void | recalculate_effective_query_interval () |
| void | recalculate_effective_robustness_variable () |
| void | recalculate_last_member_query_count () |
| void | recalculate_group_membership_interval () |
| void | recalculate_last_member_query_time () |
| void | recalculate_older_version_host_present_interval () |
| void | restore_effective_variables () |
| int | mld6igmp_membership_query_recv (const IPvX &src, const IPvX &dst, uint8_t message_type, uint16_t max_resp_code, const IPvX &group_address, buffer_t *buffer) |
| int | mld6igmp_ssm_membership_query_recv (const IPvX &src, const IPvX &dst, uint8_t message_type, uint16_t max_resp_code, const IPvX &group_address, buffer_t *buffer) |
| int | mld6igmp_membership_report_recv (const IPvX &src, const IPvX &dst, uint8_t message_type, uint16_t max_resp_code, const IPvX &group_address, buffer_t *buffer) |
| int | mld6igmp_leave_group_recv (const IPvX &src, const IPvX &dst, uint8_t message_type, uint16_t max_resp_code, const IPvX &group_address, buffer_t *buffer) |
| int | mld6igmp_ssm_membership_report_recv (const IPvX &src, const IPvX &dst, uint8_t message_type, buffer_t *buffer) |
| int | mld6igmp_query_version_consistency_check (const IPvX &src, const IPvX &dst, uint8_t message_type, int message_version) |
| int | mld6igmp_process (const IPvX &src, const IPvX &dst, int ip_ttl, int ip_tos, bool ip_router_alert, bool ip_internet_control, buffer_t *buffer, string &error_msg) |
| size_t | mld6igmp_constant_minlen () const |
| uint32_t | mld6igmp_constant_timer_scale () const |
| uint8_t | mld6igmp_constant_membership_query () const |
| void | other_querier_timer_timeout () |
| void | query_timer_timeout () |
| void | decode_exp_time_code8 (uint8_t code, TimeVal &timeval, uint32_t timer_scale) |
| void | decode_exp_time_code16 (uint16_t code, TimeVal &timeval, uint32_t timer_scale) |
| void | encode_exp_time_code8 (const TimeVal &timeval, uint8_t &code, uint32_t timer_scale) |
| void | encode_exp_time_code16 (const TimeVal &timeval, uint16_t &code, uint32_t timer_scale) |
Private Attributes | |
| Mld6igmpNode & | _mld6igmp_node |
| buffer_t * | _buffer_send |
| uint32_t | _proto_flags |
| IPvX | _primary_addr |
| IPvX | _querier_addr |
| XorpTimer | _other_querier_timer |
| XorpTimer | _query_timer |
| uint8_t | _startup_query_count |
| Mld6igmpGroupSet | _group_records |
| ConfigParam< bool > | _ip_router_alert_option_check |
| ConfigParam< TimeVal > | _configured_query_interval |
| TimeVal | _effective_query_interval |
| ConfigParam< TimeVal > | _query_last_member_interval |
| ConfigParam< TimeVal > | _query_response_interval |
| ConfigParam< uint32_t > | _configured_robust_count |
| uint32_t | _effective_robustness_variable |
| uint32_t | _last_member_query_count |
| TimeVal | _group_membership_interval |
| TimeVal | _last_member_query_time |
| TimeVal | _older_version_host_present_interval |
|
vector< pair< xorp_module_id, string > > | _notify_routing_protocols |
| bool | _dummy_flag |
| bool | wants_to_be_started |
A class for MLD/IGMP-specific virtual interface.
| Mld6igmpVif::Mld6igmpVif | ( | Mld6igmpNode & | mld6igmp_node, |
| const Vif & | vif | ||
| ) |
Constructor for a given MLD/IGMP node and a generic virtual interface.
Mld6igmpVif::Mld6igmpVif: : The MLD6IGMP node this interface belongs to.
| mld6igmp_node | the Mld6igmpNode this interface belongs to. |
| vif | the generic Vif interface that contains various information. |
: The generic Vif interface that contains various information.
MLD6IGMP protocol vif constructor.
| Mld6igmpVif::~Mld6igmpVif | ( | ) | [virtual] |
| Mld6igmpVif::Mld6igmpVif | ( | Mld6igmpNode & | mld6igmp_node, |
| const Vif & | vif | ||
| ) |
Constructor for a given MLD/IGMP node and a generic virtual interface.
| mld6igmp_node | the Mld6igmpNode this interface belongs to. |
| vif | the generic Vif interface that contains various information. |
| int Mld6igmpVif::add_protocol | ( | xorp_module_id | module_id, |
| const string & | module_instance_name | ||
| ) |
Add a protocol that needs to be notified about multicast membership changes.
Mld6igmpVif::add_protocol: : The #xorp_module_id of the protocol to add.
Add a protocol to the list of entries that would be notified if there is membership change on a particular interface.
| module_instance_name | the module instance name of the protocol to add. |
| module_id | the module ID (xorp_module_id) of the protocol to add. |
: The module instance name of the protocol to add.
Add a protocol to the list of entries that would be notified if there is membership change on this interface.
Return value: XORP_OK on success, otherwise XORP_ERROR.
| int Mld6igmpVif::add_protocol | ( | xorp_module_id | module_id, |
| const string & | module_instance_name | ||
| ) |
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.
| module_instance_name | the module instance name of the protocol to add. |
| module_id | the module ID (xorp_module_id) of the protocol to add. |
| buffer_t* Mld6igmpVif::buffer_send_prepare | ( | ) | [private] |
| buffer_t * Mld6igmpVif::buffer_send_prepare | ( | ) | [private] |
| uint16_t Mld6igmpVif::calculate_ipv6_pseudo_header_checksum | ( | const IPvX & | src, |
| const IPvX & | dst, | ||
| size_t | len, | ||
| uint8_t | protocol | ||
| ) | [private] |
| uint16_t Mld6igmpVif::calculate_ipv6_pseudo_header_checksum | ( | const IPvX & | src, |
| const IPvX & | dst, | ||
| size_t | len, | ||
| uint8_t | protocol | ||
| ) | [private] |
| ConfigParam<TimeVal>& Mld6igmpVif::configured_query_interval | ( | ) | [inline] |
| ConfigParam<TimeVal>& Mld6igmpVif::configured_query_interval | ( | ) | [inline] |
| ConfigParam<uint32_t>& Mld6igmpVif::configured_robust_count | ( | ) | [inline] |
| ConfigParam<uint32_t>& Mld6igmpVif::configured_robust_count | ( | ) | [inline] |
| const XorpTimer& Mld6igmpVif::const_other_querier_timer | ( | ) | const [inline] |
| const XorpTimer& Mld6igmpVif::const_other_querier_timer | ( | ) | const [inline] |
| int Mld6igmpVif::delete_protocol | ( | xorp_module_id | module_id, |
| const string & | module_instance_name | ||
| ) |
Delete a protocol that needs to be notified about multicast membership changes.
Mld6igmpVif::delete_protocol: : The #xorp_module_id of the protocol to delete.
Delete a protocol from the list of entries that would be notified if there is membership change on a particular interface.
| module_instance_name | the module instance name of the protocol to delete. |
| module_id | the module ID (xorp_module_id) of the protocol to delete. |
: The module instance name of the protocol to delete.
Delete a protocol from the list of entries that would be notified if there is membership change on this interface.
Return value: XORP_OK on success, otherwise XORP_ERROR.
| int Mld6igmpVif::delete_protocol | ( | xorp_module_id | module_id, |
| const string & | module_instance_name, | ||
| string & | error_msg | ||
| ) |
Delete a protocol that needs to be notified about multicast membership changes.
Mld6igmpVif::delete_protocol: : The #xorp_module_id of the protocol to delete.
Delete a protocol from the list of entries that would be notified if there is membership change on a particular interface.
| module_instance_name | the module instance name of the protocol to delete. |
| module_id | the module ID (xorp_module_id) of the protocol to delete. |
: The module instance name of the protocol to delete.
Delete a protocol from the list of entries that would be notified if there is membership change on this interface.
Return value: XORP_OK on success, otherwise XORP_ERROR.
| void Mld6igmpVif::disable | ( | ) |
Disable MLD/IGMP 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.
Reimplemented from ProtoState.
| void Mld6igmpVif::disable | ( | ) |
Disable MLD/IGMP 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.
Reimplemented from ProtoState.
| const TimeVal& Mld6igmpVif::effective_query_interval | ( | ) | const [inline] |
| const TimeVal& Mld6igmpVif::effective_query_interval | ( | ) | const [inline] |
| uint32_t Mld6igmpVif::effective_robustness_variable | ( | ) | const [inline] |
| uint32_t Mld6igmpVif::effective_robustness_variable | ( | ) | const [inline] |
| void Mld6igmpVif::enable | ( | ) |
Enable MLD/IGMP on a single virtual interface.
If an unit is not enabled, it cannot be start, or pending-start.
Reimplemented from ProtoState.
| void Mld6igmpVif::enable | ( | ) |
Enable MLD/IGMP on a single virtual interface.
If an unit is not enabled, it cannot be start, or pending-start.
Reimplemented from ProtoState.
| string Mld6igmpVif::flags_string | ( | ) | const |
| string Mld6igmpVif::flags_string | ( | ) | const |
| const TimeVal& Mld6igmpVif::group_membership_interval | ( | ) | const [inline] |
| const TimeVal& Mld6igmpVif::group_membership_interval | ( | ) | const [inline] |
| Mld6igmpGroupSet& Mld6igmpVif::group_records | ( | ) | [inline] |
Get the set with the multicast group records information (Mld6igmpGroupSet).
| const Mld6igmpGroupSet& Mld6igmpVif::group_records | ( | ) | const [inline] |
Get the const set with the multicast group records information (Mld6igmpGroupSet).
| Mld6igmpGroupSet& Mld6igmpVif::group_records | ( | ) | [inline] |
Get the set with the multicast group records information (Mld6igmpGroupSet).
| const Mld6igmpGroupSet& Mld6igmpVif::group_records | ( | ) | const [inline] |
Get the const set with the multicast group records information (Mld6igmpGroupSet).
| bool Mld6igmpVif::i_am_querier | ( | ) | const [private] |
| bool Mld6igmpVif::i_am_querier | ( | ) | const [private] |
| ConfigParam<bool>& Mld6igmpVif::ip_router_alert_option_check | ( | ) | [inline] |
| ConfigParam<bool>& Mld6igmpVif::ip_router_alert_option_check | ( | ) | [inline] |
| bool Mld6igmpVif::is_igmpv1_mode | ( | ) | const |
| bool Mld6igmpVif::is_igmpv1_mode | ( | const Mld6igmpGroupRecord * | group_record | ) | const |
| bool Mld6igmpVif::is_igmpv1_mode | ( | ) | const |
| bool Mld6igmpVif::is_igmpv1_mode | ( | const Mld6igmpGroupRecord * | group_record | ) | const |
| bool Mld6igmpVif::is_igmpv2_mode | ( | ) | const |
| bool Mld6igmpVif::is_igmpv2_mode | ( | const Mld6igmpGroupRecord * | group_record | ) | const |
| bool Mld6igmpVif::is_igmpv2_mode | ( | ) | const |
| bool Mld6igmpVif::is_igmpv2_mode | ( | const Mld6igmpGroupRecord * | group_record | ) | const |
| bool Mld6igmpVif::is_igmpv3_mode | ( | ) | const |
| bool Mld6igmpVif::is_igmpv3_mode | ( | const Mld6igmpGroupRecord * | group_record | ) | const |
| bool Mld6igmpVif::is_igmpv3_mode | ( | ) | const |
| bool Mld6igmpVif::is_igmpv3_mode | ( | const Mld6igmpGroupRecord * | group_record | ) | const |
| bool Mld6igmpVif::is_mldv1_mode | ( | ) | const |
| bool Mld6igmpVif::is_mldv1_mode | ( | const Mld6igmpGroupRecord * | group_record | ) | const |
| bool Mld6igmpVif::is_mldv1_mode | ( | ) | const |
| bool Mld6igmpVif::is_mldv1_mode | ( | const Mld6igmpGroupRecord * | group_record | ) | const |
| bool Mld6igmpVif::is_mldv2_mode | ( | ) | const |
| bool Mld6igmpVif::is_mldv2_mode | ( | const Mld6igmpGroupRecord * | group_record | ) | const |
| bool Mld6igmpVif::is_mldv2_mode | ( | ) | const |
| bool Mld6igmpVif::is_mldv2_mode | ( | const Mld6igmpGroupRecord * | group_record | ) | const |
| int Mld6igmpVif::join_prune_notify_routing | ( | const IPvX & | source, |
| const IPvX & | group, | ||
| action_jp_t | action_jp | ||
| ) | const |
Notify the interested parties that there is membership change among the local members.
| source | the source address of the (S,G) entry that has changed. In case of group-specific membership, it could be IPvX::ZERO(). |
| group | the group address of the (S,G) entry that has changed. |
| action_jp | the membership change: ACTION_JOIN or ACTION_PRUNE. |
| int Mld6igmpVif::join_prune_notify_routing | ( | const IPvX & | source, |
| const IPvX & | group, | ||
| action_jp_t | action_jp | ||
| ) | const |
Notify the interested parties that there is membership change among the local members.
| source | the source address of the (S,G) entry that has changed. In case of group-specific membership, it could be IPvX::ZERO(). |
| group | the group address of the (S,G) entry that has changed. |
| action_jp | the membership change: ACTION_JOIN or ACTION_PRUNE. |
| uint32_t Mld6igmpVif::last_member_query_count | ( | ) | const [inline] |
Get the Last Member Query Count value.
Note: According to the IGMP/MLD spec, the default value for the Last Member Query Count is the Robustness Variable. Hence, the Last Member Query Count itself should be configurable. For simplicity (and for consistency with other router vendors), it is always same as the Robustness Variable.
| uint32_t Mld6igmpVif::last_member_query_count | ( | ) | const [inline] |
Get the Last Member Query Count value.
Note: According to the IGMP/MLD spec, the default value for the Last Member Query Count is the Robustness Variable. Hence, the Last Member Query Count itself should be configurable. For simplicity (and for consistency with other router vendors), it is always same as the Robustness Variable.
| const TimeVal& Mld6igmpVif::last_member_query_time | ( | ) | const [inline] |
| const TimeVal& Mld6igmpVif::last_member_query_time | ( | ) | const [inline] |
| int Mld6igmpVif::mld6igmp_group_query_send | ( | const IPvX & | group_address, |
| string & | error_msg | ||
| ) |
| int Mld6igmpVif::mld6igmp_group_query_send | ( | const IPvX & | group_address, |
| string & | error_msg | ||
| ) |
| int Mld6igmpVif::mld6igmp_group_source_query_send | ( | const IPvX & | group_address, |
| const set< IPvX > & | sources, | ||
| string & | error_msg | ||
| ) |
Send MLDv2 or IGMPv3 Group-and-Source-Specific Query message.
| group_address | the "Multicast Address" or "Group Address" field in the MLD or IGMP headers respectively. |
| sources | the set of source addresses. |
| error_msg | the error message (if error). |
| int Mld6igmpVif::mld6igmp_group_source_query_send | ( | const IPvX & | group_address, |
| const set< IPvX > & | sources, | ||
| string & | error_msg | ||
| ) |
Send MLDv2 or IGMPv3 Group-and-Source-Specific Query message.
| group_address | the "Multicast Address" or "Group Address" field in the MLD or IGMP headers respectively. |
| sources | the set of source addresses. |
| error_msg | the error message (if error). |
| int Mld6igmpVif::mld6igmp_leave_group_recv | ( | const IPvX & | src, |
| const IPvX & | dst, | ||
| uint8_t | message_type, | ||
| uint16_t | max_resp_code, | ||
| const IPvX & | group_address, | ||
| buffer_t * | buffer | ||
| ) | [private] |
Mld6igmpVif::mld6igmp_leave_group_recv: : The message source address.
: The message destination address. : The message type. : The Maximum Response Code from the MLD/IGMP header. : The Group Address from the MLD/IGMP message. : The buffer with the rest of the message.
Receive and process IGMP_V2_LEAVE_GROUP/MLD_LISTENER_DONE message from a host.
Return value: XORP_OK on success, otherwise XORP_ERROR.
| int Mld6igmpVif::mld6igmp_membership_query_recv | ( | const IPvX & | src, |
| const IPvX & | dst, | ||
| uint8_t | message_type, | ||
| uint16_t | max_resp_code, | ||
| const IPvX & | group_address, | ||
| buffer_t * | buffer | ||
| ) | [private] |
Mld6igmpVif::mld6igmp_membership_query_recv: : The message source address.
: The message destination address. : The message type. : The Maximum Response Code from the MLD/IGMP header. : The Group Address from the MLD/IGMP message. : The buffer with the rest of the message.
Receive and process IGMP_MEMBERSHIP_QUERY/MLD_LISTENER_QUERY message from another router.
Return value: XORP_OK on success, otherwise XORP_ERROR.
| int Mld6igmpVif::mld6igmp_membership_report_recv | ( | const IPvX & | src, |
| const IPvX & | dst, | ||
| uint8_t | message_type, | ||
| uint16_t | max_resp_code, | ||
| const IPvX & | group_address, | ||
| buffer_t * | buffer | ||
| ) | [private] |
Mld6igmpVif::mld6igmp_membership_report_recv: : The message source address.
: The message destination address. : The message type. : The Maximum Response Code from the MLD/IGMP header. : The Group Address from the MLD/IGMP message. : The buffer with the rest of the message.
Receive and process (IGMP_V1_MEMBERSHIP_REPORT or IGMP_V2_MEMBERSHIP_REPORT)/MLD_LISTENER_REPORT message from a host.
Return value: XORP_OK on success, otherwise XORP_ERROR.
| Mld6igmpNode& Mld6igmpVif::mld6igmp_node | ( | ) | const [inline] |
Get the MLD6IGMP node (Mld6igmpNode).
| Mld6igmpNode& Mld6igmpVif::mld6igmp_node | ( | ) | const [inline] |
Get the MLD6IGMP node (Mld6igmpNode).
| int Mld6igmpVif::mld6igmp_process | ( | const IPvX & | src, |
| const IPvX & | dst, | ||
| int | ip_ttl, | ||
| int | ip_tos, | ||
| bool | ip_router_alert, | ||
| bool | ip_internet_control, | ||
| buffer_t * | buffer, | ||
| string & | error_msg | ||
| ) | [private] |
Mld6igmpVif::mld6igmp_process: : The message source address.
: The message destination address. : The IP TTL of the message. If it has a negative value, it should be ignored. : The IP TOS of the message. If it has a negative value, it should be ignored. : True if the received IP packet had the Router Alert IP option set. : If true, then this is IP control traffic. : The buffer with the message. : The error message (if error).
Process MLD or IGMP message and pass the control to the type-specific functions.
Return value: XORP_OK on success, otherwise XORP_ERROR.
| int Mld6igmpVif::mld6igmp_query_send | ( | const IPvX & | src, |
| const IPvX & | dst, | ||
| const TimeVal & | max_resp_time, | ||
| const IPvX & | group_address, | ||
| const set< IPvX > & | sources, | ||
| bool | s_flag, | ||
| string & | error_msg | ||
| ) |
Send MLD or IGMP Query message.
| src | the message source address. |
| dst | the message destination address. |
| max_resp_time | the maximum response time. |
| group_address | the "Multicast Address" or "Group Address" field in the MLD or IGMP headers respectively. |
| sources | the set of source addresses (for IGMPv3 or MLDv2 only). |
| s_flag | the "Suppress Router-Side Processing" bit (for IGMPv3 or MLDv2 only; in all other cases it should be set to false). |
| error_msg | the error message (if error). |
| int Mld6igmpVif::mld6igmp_query_send | ( | const IPvX & | src, |
| const IPvX & | dst, | ||
| const TimeVal & | max_resp_time, | ||
| const IPvX & | group_address, | ||
| const set< IPvX > & | sources, | ||
| bool | s_flag, | ||
| string & | error_msg | ||
| ) |
Send MLD or IGMP Query message.
| src | the message source address. |
| dst | the message destination address. |
| max_resp_time | the maximum response time. |
| group_address | the "Multicast Address" or "Group Address" field in the MLD or IGMP headers respectively. |
| sources | the set of source addresses (for IGMPv3 or MLDv2 only). |
| s_flag | the "Suppress Router-Side Processing" bit (for IGMPv3 or MLDv2 only; in all other cases it should be set to false). |
| error_msg | the error message (if error). |
| int Mld6igmpVif::mld6igmp_query_version_consistency_check | ( | const IPvX & | src, |
| const IPvX & | dst, | ||
| uint8_t | message_type, | ||
| int | message_version | ||
| ) | [private] |
mld6igmp_query_version_consistency_check: : The message source address.
: The message destination address. : The type of the MLD/IGMP message. : The protocol version of the received Query message: (IGMP_V1, IGMP_V2, IGMP_V3 for IGMP) or (MLD_V1, MLD_V2 for MLD).
Check for MLD/IGMP protocol version interface configuration consistency. For example, if the received Query message was IGMPv1, a correctly configured local interface must be operating in IGMPv1 mode. Similarly, if the local interface is operating in IGMPv1 mode, all other neighbor routers (for that interface) must be operating in IGMPv1 as well.
Return value: XORP_OK if consistency, otherwise XORP_ERROR.
| int Mld6igmpVif::mld6igmp_recv | ( | const IPvX & | src, |
| const IPvX & | dst, | ||
| int | ip_ttl, | ||
| int | ip_tos, | ||
| bool | ip_router_alert, | ||
| bool | ip_internet_control, | ||
| buffer_t * | buffer, | ||
| string & | error_msg | ||
| ) |
Receive a protocol 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 it should be ignored. |
| ip_ttl | the IP TOS of the message. If it has a negative value, it should be ignored. |
| ip_router_alert | if true, the IP Router Alert option in the IP packet was set (when applicable). |
| ip_internet_control | if true, then this is IP control traffic. |
| buffer | the data buffer with the received message. |
| error_msg | the error message (if error). |
| int Mld6igmpVif::mld6igmp_recv | ( | const IPvX & | src, |
| const IPvX & | dst, | ||
| int | ip_ttl, | ||
| int | ip_tos, | ||
| bool | ip_router_alert, | ||
| bool | ip_internet_control, | ||
| buffer_t * | buffer, | ||
| string & | error_msg | ||
| ) |
Receive a protocol message.
Mld6igmpVif::mld6igmp_recv: : The message source address.
| 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. |
| ip_router_alert | if true, the IP Router Alert option in the IP packet was set (when applicable). |
| ip_internet_control | if true, then this is IP control traffic. |
| buffer | the data buffer with the received message. |
| error_msg | the error message (if error). |
: The message destination address. : The IP TTL of the message. If it has a negative value, it should be ignored. : The IP TOS of the message. If it has a negative value, it should be ignored. : True if the received IP packet had the Router Alert IP option set. : If true, then this is IP control traffic. : The buffer with the received message. : The error message (if error).
Receive MLD or IGMP message and pass it for processing.
Return value: XORP_OK on success, otherwise XORP_ERROR.
| int Mld6igmpVif::mld6igmp_send | ( | const IPvX & | src, |
| const IPvX & | dst, | ||
| uint8_t | message_type, | ||
| uint16_t | max_resp_code, | ||
| const IPvX & | group_address, | ||
| buffer_t * | buffer, | ||
| string & | error_msg | ||
| ) |
Send MLD or IGMP message.
Mld6igmpVif::mld6igmp_send: : The message source address.
| src | the message source address. |
| dst | the message destination address. |
| message_type | the MLD or IGMP type of the message. |
| max_resp_code | the "Maximum Response Code" or "Max Resp Code" field in the MLD or IGMP headers respectively (in the particular protocol resolution). |
| group_address | the "Multicast Address" or "Group Address" field in the MLD or IGMP headers respectively. |
| buffer | the buffer with the rest of the message. |
| error_msg | the error message (if error). |
: The message destination address. : The MLD or IGMP type of the message. : The "Maximum Response Code" or "Max Resp Code" field in the MLD or IGMP headers respectively (in the particular protocol resolution). : The "Multicast Address" or "Group Address" field in the MLD or IGMP headers respectively. : The buffer with the rest of the message. : The error message (if error).
Send MLD or IGMP message.
Return value: XORP_OK on success, otherwise XORP_ERROR.
| int Mld6igmpVif::mld6igmp_send | ( | const IPvX & | src, |
| const IPvX & | dst, | ||
| uint8_t | message_type, | ||
| uint16_t | max_resp_code, | ||
| const IPvX & | group_address, | ||
| buffer_t * | buffer, | ||
| string & | error_msg | ||
| ) |
Send MLD or IGMP message.
| src | the message source address. |
| dst | the message destination address. |
| message_type | the MLD or IGMP type of the message. |
| max_resp_code | the "Maximum Response Code" or "Max Resp Code" field in the MLD or IGMP headers respectively (in the particular protocol resolution). |
| group_address | the "Multicast Address" or "Group Address" field in the MLD or IGMP headers respectively. |
| buffer | the buffer with the rest of the message. |
| error_msg | the error message (if error). |
| int Mld6igmpVif::mld6igmp_ssm_membership_query_recv | ( | const IPvX & | src, |
| const IPvX & | dst, | ||
| uint8_t | message_type, | ||
| uint16_t | max_resp_code, | ||
| const IPvX & | group_address, | ||
| buffer_t * | buffer | ||
| ) | [private] |
Mld6igmpVif::mld6igmp_ssm_membership_query_recv: : The message source address.
: The message destination address. : The message type. : The Maximum Response Code from the MLD/IGMP header. : The Group Address from the MLD/IGMP message. : The buffer with the rest of the message.
Receive and process IGMPv3/MLDv2 IGMP_MEMBERSHIP_QUERY/MLD_LISTENER_QUERY message from another router.
Return value: XORP_OK on success, otherwise XORP_ERROR.
| int Mld6igmpVif::mld6igmp_ssm_membership_report_recv | ( | const IPvX & | src, |
| const IPvX & | dst, | ||
| uint8_t | message_type, | ||
| buffer_t * | buffer | ||
| ) | [private] |
Mld6igmpVif::mld6igmp_ssm_membership_report_recv: : The message source address.
: The message destination address. : The message type. : The buffer with the rest of the message.
Receive and process IGMP_V3_MEMBERSHIP_REPORT/MLDV2_LISTENER_REPORT message from a host.
Return value: XORP_OK on success, otherwise XORP_ERROR.
| void Mld6igmpVif::notifyUpdated | ( | ) |
Attempt deferred start.
System detected some change.
| const TimeVal& Mld6igmpVif::older_version_host_present_interval | ( | ) | const [inline] |
| const TimeVal& Mld6igmpVif::older_version_host_present_interval | ( | ) | const [inline] |
| void Mld6igmpVif::other_querier_timer_timeout | ( | ) | [private] |
Mld6igmpVif::other_querier_timer_timeout:
Timeout: the previous querier has expired. I will become the querier.
| const IPvX& Mld6igmpVif::primary_addr | ( | ) | const [inline] |
Get my primary address on this interface.
| const IPvX& Mld6igmpVif::primary_addr | ( | ) | const [inline] |
Get my primary address on this interface.
| bool Mld6igmpVif::proto_is_ssm | ( | ) | const |
Test if the protocol is Source-Specific Multicast (e.g., IGMPv3 or MLDv2).
Test if the interface is running a source-specific multicast capable protocol version (e.g. IGMPv3 or MLDv2).
Return value: if the protocol version is source-specific multicast capable, otherwise .se
| bool Mld6igmpVif::proto_is_ssm | ( | ) | const |
| const char* Mld6igmpVif::proto_message_type2ascii | ( | uint8_t | message_type | ) | const [private] |
| const char * Mld6igmpVif::proto_message_type2ascii | ( | uint8_t | message_type | ) | const [private] |
| const IPvX& Mld6igmpVif::querier_addr | ( | ) | const [inline] |
| const IPvX& Mld6igmpVif::querier_addr | ( | ) | const [inline] |
| ConfigParam<TimeVal>& Mld6igmpVif::query_last_member_interval | ( | ) | [inline] |
| ConfigParam<TimeVal>& Mld6igmpVif::query_last_member_interval | ( | ) | [inline] |
| ConfigParam<TimeVal>& Mld6igmpVif::query_response_interval | ( | ) | [inline] |
| ConfigParam<TimeVal>& Mld6igmpVif::query_response_interval | ( | ) | [inline] |
| void Mld6igmpVif::query_timer_timeout | ( | ) | [private] |
Mld6igmpVif::query_timer_timeout:
Timeout: time to send a membership query.
| void Mld6igmpVif::set_effective_query_interval | ( | const TimeVal & | v | ) |
| void Mld6igmpVif::set_effective_query_interval | ( | const TimeVal & | v | ) |
| void Mld6igmpVif::set_effective_robustness_variable | ( | uint32_t | v | ) |
| void Mld6igmpVif::set_effective_robustness_variable | ( | uint32_t | v | ) |
| void Mld6igmpVif::set_i_am_querier | ( | bool | v | ) | [private] |
| void Mld6igmpVif::set_i_am_querier | ( | bool | v | ) | [private] |
| void Mld6igmpVif::set_primary_addr | ( | const IPvX & | v | ) | [inline] |
| void Mld6igmpVif::set_primary_addr | ( | const IPvX & | v | ) | [inline] |
| int Mld6igmpVif::set_proto_version | ( | int | proto_version | ) |
Set the current protocol version.
Mld6igmpVif::set_proto_version: : The protocol version to set.
The protocol version must be in the interval [IGMP_VERSION_MIN, IGMP_VERSION_MAX] or [MLD_VERSION_MIN, MLD_VERSION_MAX]
| proto_version | the protocol version to set. |
Set protocol version.
Return value: XORP_OK is is valid, otherwise XORP_ERROR.
Reimplemented from ProtoUnit.
| int Mld6igmpVif::set_proto_version | ( | int | proto_version | ) |
| void Mld6igmpVif::set_querier_addr | ( | const IPvX & | v | ) | [inline] |
| void Mld6igmpVif::set_querier_addr | ( | const IPvX & | v | ) | [inline] |
| int Mld6igmpVif::start | ( | string & | error_msg | ) |
Start MLD/IGMP on a single virtual interface.
| error_msg | the error message (if error). |
| int Mld6igmpVif::start | ( | string & | error_msg | ) |
Start MLD/IGMP on a single virtual interface.
Mld6igmpVif::start: : The error message (if error).
| error_msg | the error message (if error). |
Start MLD or IGMP on a single virtual interface.
Return value: XORP_OK on success, otherwise XORP_ERROR.
| int Mld6igmpVif::stop | ( | string & | error_msg | ) |
Stop MLD/IGMP on a single virtual interface.
Mld6igmpVif::stop: : The error message (if error).
| error_msg | the error message (if error). |
Stop MLD or IGMP on a single virtual interface.
Return value: XORP_OK on success, otherwise XORP_ERROR.
| int Mld6igmpVif::stop | ( | string & | error_msg | ) |
Stop MLD/IGMP on a single virtual interface.
| error_msg | the error message (if error). |
| int Mld6igmpVif::update_primary_address | ( | string & | error_msg | ) |
| int Mld6igmpVif::update_primary_address | ( | string & | error_msg | ) |
Update the primary address.
Mld6igmpVif::update_primary_address: : The error message (if error).
The primary address should be a link-local unicast address, and is used for transmitting the multicast control packets on the LAN.
| error_msg | the error message (if error). |
Update the primary address.
The primary address should be a link-local unicast address, and is used for transmitting the multicast control packets on the LAN.
Return value: XORP_OK on success, otherwise XORP_ERROR.