xorp

xrl_pim_node.hh

00001 // -*- c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t -*-
00002 
00003 // Copyright (c) 2001-2011 XORP, Inc and Others
00004 //
00005 // This program is free software; you can redistribute it and/or modify
00006 // it under the terms of the GNU General Public License, Version 2, June
00007 // 1991 as published by the Free Software Foundation. Redistribution
00008 // and/or modification of this program under the terms of any other
00009 // version of the GNU General Public License is not permitted.
00010 // 
00011 // This program is distributed in the hope that it will be useful, but
00012 // WITHOUT ANY WARRANTY; without even the implied warranty of
00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For more details,
00014 // see the GNU General Public License, Version 2, a copy of which can be
00015 // found in the XORP LICENSE.gpl file.
00016 // 
00017 // XORP Inc, 2953 Bunker Hill Lane, Suite 204, Santa Clara, CA 95054, USA;
00018 // http://xorp.net
00019 
00020 
00021 #ifndef __PIM_XRL_PIM_NODE_HH__
00022 #define __PIM_XRL_PIM_NODE_HH__
00023 
00024 
00025 //
00026 // PIM XRL-aware node definition.
00027 //
00028 
00029 #include "libxorp/transaction.hh"
00030 
00031 #include "libxipc/xrl_std_router.hh"
00032 
00033 #include "libfeaclient/ifmgr_xrl_mirror.hh"
00034 
00035 #include "xrl/interfaces/finder_event_notifier_xif.hh"
00036 #include "xrl/interfaces/fea_rawpkt4_xif.hh"
00037 #ifdef HAVE_IPV6
00038 #include "xrl/interfaces/fea_rawpkt6_xif.hh"
00039 #endif
00040 #include "xrl/interfaces/mfea_xif.hh"
00041 #include "xrl/interfaces/rib_xif.hh"
00042 #include "xrl/interfaces/mld6igmp_xif.hh"
00043 #include "xrl/interfaces/cli_manager_xif.hh"
00044 #include "xrl/targets/pim_base.hh"
00045 
00046 #include "pim_node.hh"
00047 #include "pim_node_cli.hh"
00048 #include "pim_mfc.hh"
00049 
00050 
00051 //
00052 // The top-level class that wraps-up everything together under one roof
00053 //
00054 class XrlPimNode : public PimNode,
00055            public XrlStdRouter,
00056            public XrlPimTargetBase,
00057            public PimNodeCli {
00058 public:
00059     XrlPimNode(int      family,
00060            xorp_module_id   module_id,
00061            EventLoop&   eventloop,
00062            const string&    class_name,
00063            const string&    finder_hostname,
00064            uint16_t     finder_port,
00065            const string&    finder_target,
00066            const string&    fea_target,
00067            const string&    mfea_target,
00068            const string&    rib_target,
00069            const string&    mld6igmp_target);
00070     virtual ~XrlPimNode();
00071 
00073     virtual void destruct_me();
00074 
00080     int startup();
00081 
00087     int shutdown();
00088 
00094     XrlRouter&  xrl_router() { return *this; }
00095 
00101     const XrlRouter& xrl_router() const { return *this; }
00102 
00103     //
00104     // XrlPimNode front-end interface
00105     //
00106     int enable_cli();
00107     int disable_cli();
00108     int start_cli();
00109     int stop_cli();
00110     int enable_pim();
00111     int disable_pim();
00112     int start_pim();
00113     int stop_pim();
00114     int enable_bsr();
00115     int disable_bsr();
00116     int start_bsr();
00117     int stop_bsr();
00118 
00119     // XrlTask relatedMethods that need to be public
00120     void send_register_unregister_interest();
00121     void send_register_unregister_receiver();
00122     void send_register_unregister_protocol();
00123     void send_join_leave_multicast_group();
00124     void send_protocol_message();
00125     void send_add_delete_mfc();
00126     void send_add_delete_dataflow_monitor();
00127 
00128 protected:    
00129     //
00130     // XRL target methods
00131     //
00132 
00136     XrlCmdError common_0_1_get_target_name(
00137     // Output values, 
00138     string& name);
00139 
00143     XrlCmdError common_0_1_get_version(
00144     // Output values, 
00145     string& version);
00146 
00150     XrlCmdError common_0_1_get_status(// Output values,
00151                       uint32_t& status,
00152                       string&   reason);
00153     
00157     XrlCmdError common_0_1_shutdown();
00158 
00159     XrlCmdError common_0_1_startup();
00160 
00168     XrlCmdError finder_event_observer_0_1_xrl_target_birth(
00169     // Input values,
00170     const string&   target_class,
00171     const string&   target_instance);
00172 
00180     XrlCmdError finder_event_observer_0_1_xrl_target_death(
00181     // Input values,
00182     const string&   target_class,
00183     const string&   target_instance);
00184 
00206     XrlCmdError cli_processor_0_1_process_command(
00207     // Input values, 
00208     const string&   processor_name, 
00209     const string&   cli_term_name, 
00210     const uint32_t& cli_session_id,
00211     const string&   command_name, 
00212     const string&   command_args, 
00213     // Output values, 
00214     string& ret_processor_name, 
00215     string& ret_cli_term_name, 
00216     uint32_t& ret_cli_session_id,
00217     string& ret_command_output);
00218 
00243     XrlCmdError raw_packet4_client_0_1_recv(
00244     // Input values,
00245     const string&   if_name,
00246     const string&   vif_name,
00247     const IPv4& src_address,
00248     const IPv4& dst_address,
00249     const uint32_t& ip_protocol,
00250     const int32_t&  ip_ttl,
00251     const int32_t&  ip_tos,
00252     const bool& ip_router_alert,
00253     const bool& ip_internet_control,
00254     const vector<uint8_t>&  payload);
00255     #ifdef HAVE_IPV6
00256 
00287     XrlCmdError raw_packet6_client_0_1_recv(
00288     // Input values,
00289     const string&   if_name,
00290     const string&   vif_name,
00291     const IPv6& src_address,
00292     const IPv6& dst_address,
00293     const uint32_t& ip_protocol,
00294     const int32_t&  ip_ttl,
00295     const int32_t&  ip_tos,
00296     const bool& ip_router_alert,
00297     const bool& ip_internet_control,
00298     const XrlAtomList&  ext_headers_type,
00299     const XrlAtomList&  ext_headers_payload,
00300     const vector<uint8_t>&  payload);
00301     #endif
00302 
00321     XrlCmdError mfea_client_0_1_recv_kernel_signal_message4(
00322     // Input values, 
00323     const string&   xrl_sender_name, 
00324     const uint32_t& message_type, 
00325     const string&   vif_name, 
00326     const uint32_t& vif_index, 
00327     const IPv4& source_address, 
00328     const IPv4& dest_address, 
00329     const vector<uint8_t>&  protocol_message);
00330     #ifdef HAVE_IPV6
00331     XrlCmdError mfea_client_0_1_recv_kernel_signal_message6(
00332     // Input values, 
00333     const string&   xrl_sender_name, 
00334     const uint32_t& message_type, 
00335     const string&   vif_name, 
00336     const uint32_t& vif_index, 
00337     const IPv6& source_address, 
00338     const IPv6& dest_address, 
00339     const vector<uint8_t>&  protocol_message);
00340     #endif
00341 
00382     XrlCmdError mfea_client_0_1_recv_dataflow_signal4(
00383     // Input values, 
00384     const string&   xrl_sender_name, 
00385     const IPv4& source_address, 
00386     const IPv4& group_address, 
00387     const uint32_t& threshold_interval_sec, 
00388     const uint32_t& threshold_interval_usec, 
00389     const uint32_t& measured_interval_sec, 
00390     const uint32_t& measured_interval_usec, 
00391     const uint32_t& threshold_packets, 
00392     const uint32_t& threshold_bytes, 
00393     const uint32_t& measured_packets, 
00394     const uint32_t& measured_bytes, 
00395     const bool& is_threshold_in_packets, 
00396     const bool& is_threshold_in_bytes, 
00397     const bool& is_geq_upcall, 
00398     const bool& is_leq_upcall);
00399     #ifdef HAVE_IPV6
00400     XrlCmdError mfea_client_0_1_recv_dataflow_signal6(
00401     // Input values, 
00402     const string&   xrl_sender_name, 
00403     const IPv6& source_address, 
00404     const IPv6& group_address, 
00405     const uint32_t& threshold_interval_sec, 
00406     const uint32_t& threshold_interval_usec, 
00407     const uint32_t& measured_interval_sec, 
00408     const uint32_t& measured_interval_usec, 
00409     const uint32_t& threshold_packets, 
00410     const uint32_t& threshold_bytes, 
00411     const uint32_t& measured_packets, 
00412     const uint32_t& measured_bytes, 
00413     const bool& is_threshold_in_packets, 
00414     const bool& is_threshold_in_bytes, 
00415     const bool& is_geq_upcall, 
00416     const bool& is_leq_upcall);
00417     #endif
00418 
00423     XrlCmdError redist_transaction4_0_1_start_transaction(
00424     // Output values,
00425     uint32_t&   tid);
00426 
00432     XrlCmdError redist_transaction4_0_1_commit_transaction(
00433     // Input values,
00434     const uint32_t& tid);
00435 
00441     XrlCmdError redist_transaction4_0_1_abort_transaction(
00442     // Input values,
00443     const uint32_t& tid);
00444 
00469     XrlCmdError redist_transaction4_0_1_add_route(
00470     // Input values,
00471     const uint32_t& tid,
00472     const IPv4Net&  dst,
00473     const IPv4& nexthop,
00474     const string&   ifname,
00475     const string&   vifname,
00476     const uint32_t& metric,
00477     const uint32_t& admin_distance,
00478     const string&   cookie,
00479     const string&   protocol_origin);
00480 
00481     XrlCmdError redist_transaction4_0_1_delete_route(
00482     // Input values,
00483     const uint32_t& tid,
00484     const IPv4Net&  dst,
00485     const IPv4& nexthop,
00486     const string&   ifname,
00487     const string&   vifname,
00488     const uint32_t& metric,
00489     const uint32_t& admin_distance,
00490     const string&   cookie,
00491     const string&   protocol_origin);
00492 
00501     XrlCmdError redist_transaction4_0_1_delete_all_routes(
00502     // Input values,
00503     const uint32_t& tid,
00504     const string&   cookie);
00505     #ifdef HAVE_IPV6
00506 
00511     XrlCmdError redist_transaction6_0_1_start_transaction(
00512     // Output values,
00513     uint32_t&   tid);
00514     #endif 
00515 
00520     XrlCmdError redist_transaction6_0_1_commit_transaction(
00521     // Input values,
00522     const uint32_t& tid);
00523 
00529     XrlCmdError redist_transaction6_0_1_abort_transaction(
00530     // Input values,
00531     const uint32_t& tid);
00532 
00557     XrlCmdError redist_transaction6_0_1_add_route(
00558     // Input values,
00559     const uint32_t& tid,
00560     const IPv6Net&  dst,
00561     const IPv6& nexthop,
00562     const string&   ifname,
00563     const string&   vifname,
00564     const uint32_t& metric,
00565     const uint32_t& admin_distance,
00566     const string&   cookie,
00567     const string&   protocol_origin);
00568 
00569     XrlCmdError redist_transaction6_0_1_delete_route(
00570     // Input values,
00571     const uint32_t& tid,
00572     const IPv6Net&  dst,
00573     const IPv6& nexthop,
00574     const string&   ifname,
00575     const string&   vifname,
00576     const uint32_t& metric,
00577     const uint32_t& admin_distance,
00578     const string&   cookie,
00579     const string&   protocol_origin);
00580 
00589     XrlCmdError redist_transaction6_0_1_delete_all_routes(
00590     // Input values,
00591     const uint32_t& tid,
00592     const string&   cookie);
00593 
00607     XrlCmdError mld6igmp_client_0_1_add_membership4(
00608     // Input values, 
00609     const string&   xrl_sender_name, 
00610     const string&   vif_name, 
00611     const uint32_t& vif_index, 
00612     const IPv4& source, 
00613     const IPv4& group);
00614 
00615     XrlCmdError mld6igmp_client_0_1_add_membership6(
00616     // Input values, 
00617     const string&   xrl_sender_name, 
00618     const string&   vif_name, 
00619     const uint32_t& vif_index, 
00620     const IPv6& source, 
00621     const IPv6& group);
00622 
00623     XrlCmdError mld6igmp_client_0_1_delete_membership4(
00624     // Input values, 
00625     const string&   xrl_sender_name, 
00626     const string&   vif_name, 
00627     const uint32_t& vif_index, 
00628     const IPv4& source, 
00629     const IPv4& group);
00630 
00631     XrlCmdError mld6igmp_client_0_1_delete_membership6(
00632     // Input values, 
00633     const string&   xrl_sender_name, 
00634     const string&   vif_name, 
00635     const uint32_t& vif_index, 
00636     const IPv6& source, 
00637     const IPv6& group);
00638 
00646     XrlCmdError pim_0_1_enable_vif(
00647     // Input values,
00648     const string&   vif_name,
00649     const bool& enable);
00650 
00651     XrlCmdError pim_0_1_start_vif(
00652     // Input values,
00653     const string&   vif_name);
00654 
00655     XrlCmdError pim_0_1_stop_vif(
00656     // Input values,
00657     const string&   vif_name);
00658 
00664     XrlCmdError pim_0_1_enable_all_vifs(
00665     // Input values,
00666     const bool& enable);
00667 
00668     XrlCmdError pim_0_1_disable_all_vifs();
00669 
00670     XrlCmdError pim_0_1_start_all_vifs();
00671 
00672     XrlCmdError pim_0_1_stop_all_vifs();
00673 
00680     XrlCmdError pim_0_1_enable_pim(
00681     // Input values,
00682     const bool& enable);
00683 
00684     XrlCmdError pim_0_1_start_pim();
00685 
00686     XrlCmdError pim_0_1_stop_pim();
00687 
00694     XrlCmdError pim_0_1_enable_cli(
00695     // Input values,
00696     const bool& enable);
00697 
00698     XrlCmdError pim_0_1_start_cli();
00699 
00700     XrlCmdError pim_0_1_stop_cli();
00701 
00707     XrlCmdError pim_0_1_enable_bsr(
00708     // Input values,
00709     const bool& enable);
00710 
00711     XrlCmdError pim_0_1_start_bsr();
00712 
00713     XrlCmdError pim_0_1_stop_bsr();
00714 
00718     XrlCmdError pim_0_1_apply_bsr_changes();
00719 
00728     XrlCmdError pim_0_1_add_config_scope_zone_by_vif_name4(
00729     // Input values, 
00730     const IPv4Net&  scope_zone_id, 
00731     const string&   vif_name);
00732 
00733     XrlCmdError pim_0_1_add_config_scope_zone_by_vif_name6(
00734     // Input values, 
00735     const IPv6Net&  scope_zone_id, 
00736     const string&   vif_name);
00737 
00738     XrlCmdError pim_0_1_add_config_scope_zone_by_vif_addr4(
00739     // Input values, 
00740     const IPv4Net&  scope_zone_id, 
00741     const IPv4& vif_addr);
00742 
00743     XrlCmdError pim_0_1_add_config_scope_zone_by_vif_addr6(
00744     // Input values, 
00745     const IPv6Net&  scope_zone_id, 
00746     const IPv6& vif_addr);
00747 
00748     XrlCmdError pim_0_1_delete_config_scope_zone_by_vif_name4(
00749     // Input values, 
00750     const IPv4Net&  scope_zone_id, 
00751     const string&   vif_name);
00752 
00753     XrlCmdError pim_0_1_delete_config_scope_zone_by_vif_name6(
00754     // Input values, 
00755     const IPv6Net&  scope_zone_id, 
00756     const string&   vif_name);
00757 
00758     XrlCmdError pim_0_1_delete_config_scope_zone_by_vif_addr4(
00759     // Input values, 
00760     const IPv4Net&  scope_zone_id, 
00761     const IPv4& vif_addr);
00762 
00763     XrlCmdError pim_0_1_delete_config_scope_zone_by_vif_addr6(
00764     // Input values, 
00765     const IPv6Net&  scope_zone_id, 
00766     const IPv6& vif_addr);
00767 
00784     XrlCmdError pim_0_1_add_config_cand_bsr4(
00785     // Input values, 
00786     const IPv4Net&  scope_zone_id, 
00787     const bool& is_scope_zone, 
00788     const string&   vif_name, 
00789     const IPv4& vif_addr, 
00790     const uint32_t& bsr_priority, 
00791     const uint32_t& hash_mask_len);
00792 
00793     XrlCmdError pim_0_1_add_config_cand_bsr6(
00794     // Input values, 
00795     const IPv6Net&  scope_zone_id, 
00796     const bool& is_scope_zone, 
00797     const string&   vif_name, 
00798     const IPv6& vif_addr, 
00799     const uint32_t& bsr_priority, 
00800     const uint32_t& hash_mask_len);
00801 
00802     XrlCmdError pim_0_1_delete_config_cand_bsr4(
00803     // Input values, 
00804     const IPv4Net&  scope_zone_id, 
00805     const bool& is_scope_zone);
00806 
00807     XrlCmdError pim_0_1_delete_config_cand_bsr6(
00808     // Input values, 
00809     const IPv6Net&  scope_zone_id, 
00810     const bool& is_scope_zone);
00811 
00828     XrlCmdError pim_0_1_add_config_cand_rp4(
00829     // Input values, 
00830     const IPv4Net&  group_prefix, 
00831     const bool& is_scope_zone, 
00832     const string&   vif_name, 
00833     const IPv4& vif_addr, 
00834     const uint32_t& rp_priority, 
00835     const uint32_t& rp_holdtime);
00836 
00837     XrlCmdError pim_0_1_add_config_cand_rp6(
00838     // Input values, 
00839     const IPv6Net&  group_prefix, 
00840     const bool& is_scope_zone, 
00841     const string&   vif_name, 
00842     const IPv6& vif_addr, 
00843     const uint32_t& rp_priority, 
00844     const uint32_t& rp_holdtime);
00845 
00846     XrlCmdError pim_0_1_delete_config_cand_rp4(
00847     // Input values, 
00848     const IPv4Net&  group_prefix, 
00849     const bool& is_scope_zone, 
00850     const string&   vif_name, 
00851     const IPv4& vif_addr);
00852 
00853     XrlCmdError pim_0_1_delete_config_cand_rp6(
00854     // Input values, 
00855     const IPv6Net&  group_prefix, 
00856     const bool& is_scope_zone, 
00857     const string&   vif_name, 
00858     const IPv6& vif_addr);
00859 
00873     XrlCmdError pim_0_1_add_config_static_rp4(
00874     // Input values, 
00875     const IPv4Net&  group_prefix, 
00876     const IPv4& rp_addr, 
00877     const uint32_t& rp_priority, 
00878     const uint32_t& hash_mask_len);
00879 
00880     XrlCmdError pim_0_1_add_config_static_rp6(
00881     // Input values, 
00882     const IPv6Net&  group_prefix, 
00883     const IPv6& rp_addr, 
00884     const uint32_t& rp_priority, 
00885     const uint32_t& hash_mask_len);
00886 
00887     XrlCmdError pim_0_1_delete_config_static_rp4(
00888     // Input values, 
00889     const IPv4Net&  group_prefix, 
00890     const IPv4& rp_addr);
00891 
00892     XrlCmdError pim_0_1_delete_config_static_rp6(
00893     // Input values, 
00894     const IPv6Net&  group_prefix, 
00895     const IPv6& rp_addr);
00896 
00897     XrlCmdError pim_0_1_delete_config_all_static_group_prefixes_rp4(
00898     // Input values, 
00899     const IPv4& rp_addr);
00900 
00901     XrlCmdError pim_0_1_delete_config_all_static_group_prefixes_rp6(
00902     // Input values, 
00903     const IPv6& rp_addr);
00904 
00905     XrlCmdError pim_0_1_delete_config_all_static_rps();
00906 
00907     XrlCmdError pim_0_1_config_static_rp_done();
00908 
00916     XrlCmdError pim_0_1_get_vif_proto_version(
00917     // Input values, 
00918     const string&   vif_name, 
00919     // Output values, 
00920     uint32_t&   proto_version);
00921 
00929     XrlCmdError pim_0_1_set_vif_proto_version(
00930     // Input values, 
00931     const string&   vif_name, 
00932     const uint32_t& proto_version);
00933 
00939     XrlCmdError pim_0_1_reset_vif_proto_version(
00940     // Input values, 
00941     const string&   vif_name);
00942 
00952     XrlCmdError pim_0_1_get_vif_hello_triggered_delay(
00953     // Input values, 
00954     const string&   vif_name, 
00955     // Output values, 
00956     uint32_t&   hello_triggered_delay);
00957 
00958     XrlCmdError pim_0_1_set_vif_hello_triggered_delay(
00959     // Input values, 
00960     const string&   vif_name, 
00961     const uint32_t& hello_triggered_delay);
00962 
00963     XrlCmdError pim_0_1_reset_vif_hello_triggered_delay(
00964     // Input values, 
00965     const string&   vif_name);
00966 
00967     XrlCmdError pim_0_1_get_vif_hello_period(
00968     // Input values, 
00969     const string&   vif_name, 
00970     // Output values, 
00971     uint32_t&   hello_period);
00972 
00973     XrlCmdError pim_0_1_set_vif_hello_period(
00974     // Input values, 
00975     const string&   vif_name, 
00976     const uint32_t& hello_period);
00977 
00978     XrlCmdError pim_0_1_reset_vif_hello_period(
00979     // Input values, 
00980     const string&   vif_name);
00981 
00982     XrlCmdError pim_0_1_get_vif_hello_holdtime(
00983     // Input values, 
00984     const string&   vif_name, 
00985     // Output values, 
00986     uint32_t&   hello_holdtime);
00987 
00988     XrlCmdError pim_0_1_set_vif_hello_holdtime(
00989     // Input values, 
00990     const string&   vif_name, 
00991     const uint32_t& hello_holdtime);
00992 
00993     XrlCmdError pim_0_1_reset_vif_hello_holdtime(
00994     // Input values, 
00995     const string&   vif_name);
00996 
00997     XrlCmdError pim_0_1_get_vif_dr_priority(
00998     // Input values, 
00999     const string&   vif_name, 
01000     // Output values, 
01001     uint32_t&   dr_priority);
01002 
01003     XrlCmdError pim_0_1_set_vif_dr_priority(
01004     // Input values, 
01005     const string&   vif_name, 
01006     const uint32_t& dr_priority);
01007 
01008     XrlCmdError pim_0_1_reset_vif_dr_priority(
01009     // Input values, 
01010     const string&   vif_name);
01011 
01012     XrlCmdError pim_0_1_get_vif_propagation_delay(
01013     // Input values, 
01014     const string&   vif_name, 
01015     // Output values, 
01016     uint32_t&   propagation_delay);
01017 
01018     XrlCmdError pim_0_1_set_vif_propagation_delay(
01019     // Input values, 
01020     const string&   vif_name, 
01021     const uint32_t& propagation_delay);
01022 
01023     XrlCmdError pim_0_1_reset_vif_propagation_delay(
01024     // Input values, 
01025     const string&   vif_name);
01026 
01027     XrlCmdError pim_0_1_get_vif_override_interval(
01028     // Input values, 
01029     const string&   vif_name, 
01030     // Output values, 
01031     uint32_t&   override_interval);
01032 
01033     XrlCmdError pim_0_1_set_vif_override_interval(
01034     // Input values, 
01035     const string&   vif_name, 
01036     const uint32_t& override_interval);
01037 
01038     XrlCmdError pim_0_1_reset_vif_override_interval(
01039     // Input values, 
01040     const string&   vif_name);
01041 
01042     XrlCmdError pim_0_1_get_vif_is_tracking_support_disabled(
01043     // Input values, 
01044     const string&   vif_name, 
01045     // Output values, 
01046     bool&   is_tracking_support_disabled);
01047 
01048     XrlCmdError pim_0_1_set_vif_is_tracking_support_disabled(
01049     // Input values, 
01050     const string&   vif_name, 
01051     const bool& is_tracking_support_disabled);
01052 
01053     XrlCmdError pim_0_1_reset_vif_is_tracking_support_disabled(
01054     // Input values, 
01055     const string&   vif_name);
01056 
01057     XrlCmdError pim_0_1_get_vif_accept_nohello_neighbors(
01058     // Input values, 
01059     const string&   vif_name, 
01060     // Output values, 
01061     bool&   accept_nohello_neighbors);
01062 
01063     XrlCmdError pim_0_1_set_vif_accept_nohello_neighbors(
01064     // Input values, 
01065     const string&   vif_name, 
01066     const bool& accept_nohello_neighbors);
01067 
01068     XrlCmdError pim_0_1_reset_vif_accept_nohello_neighbors(
01069     // Input values, 
01070     const string&   vif_name);
01071 
01081     XrlCmdError pim_0_1_get_vif_join_prune_period(
01082     // Input values, 
01083     const string&   vif_name, 
01084     // Output values, 
01085     uint32_t&   join_prune_period);
01086 
01087     XrlCmdError pim_0_1_set_vif_join_prune_period(
01088     // Input values, 
01089     const string&   vif_name, 
01090     const uint32_t& join_prune_period);
01091 
01092     XrlCmdError pim_0_1_reset_vif_join_prune_period(
01093     // Input values, 
01094     const string&   vif_name);
01095 
01106     XrlCmdError pim_0_1_get_switch_to_spt_threshold(
01107     // Output values, 
01108     bool&       is_enabled, 
01109     uint32_t&   interval_sec, 
01110     uint32_t&   bytes);
01111 
01112     XrlCmdError pim_0_1_set_switch_to_spt_threshold(
01113     // Input values, 
01114     const bool& is_enabled, 
01115     const uint32_t& interval_sec, 
01116     const uint32_t& bytes);
01117 
01118     XrlCmdError pim_0_1_reset_switch_to_spt_threshold();
01119 
01131     XrlCmdError pim_0_1_add_alternative_subnet4(
01132     // Input values,
01133     const string&   vif_name,
01134     const IPv4Net&  subnet);
01135 
01136     XrlCmdError pim_0_1_add_alternative_subnet6(
01137     // Input values,
01138     const string&   vif_name,
01139     const IPv6Net&  subnet);
01140 
01141     XrlCmdError pim_0_1_delete_alternative_subnet4(
01142     // Input values,
01143     const string&   vif_name,
01144     const IPv4Net&  subnet);
01145 
01146     XrlCmdError pim_0_1_delete_alternative_subnet6(
01147     // Input values,
01148     const string&   vif_name,
01149     const IPv6Net&  subnet);
01150 
01151     XrlCmdError pim_0_1_remove_all_alternative_subnets(
01152     // Input values,
01153     const string&   vif_name);
01154 
01160     XrlCmdError pim_0_1_log_trace_all(
01161     // Input values,
01162     const bool& enable);
01163 
01168     XrlCmdError pim_0_1_add_test_jp_entry4(
01169     // Input values, 
01170     const IPv4& source_addr, 
01171     const IPv4& group_addr, 
01172     const uint32_t& group_mask_len, 
01173     const string&   mrt_entry_type, 
01174     const string&   action_jp, 
01175     const uint32_t& holdtime, 
01176     const bool& is_new_group);
01177 
01178     XrlCmdError pim_0_1_add_test_jp_entry6(
01179     // Input values, 
01180     const IPv6& source_addr, 
01181     const IPv6& group_addr, 
01182     const uint32_t& group_mask_len, 
01183     const string&   mrt_entry_type, 
01184     const string&   action_jp, 
01185     const uint32_t& holdtime, 
01186     const bool& is_new_group);
01187 
01188     XrlCmdError pim_0_1_send_test_jp_entry4(
01189     // Input values, 
01190     const string&   vif_name, 
01191     const IPv4& nbr_addr);
01192 
01193     XrlCmdError pim_0_1_send_test_jp_entry6(
01194     // Input values, 
01195     const string&   vif_name, 
01196     const IPv6& nbr_addr);
01197 
01214     XrlCmdError pim_0_1_send_test_assert4(
01215     // Input values, 
01216     const string&   vif_name, 
01217     const IPv4& source_addr, 
01218     const IPv4& group_addr, 
01219     const bool& rpt_bit, 
01220     const uint32_t& metric_preference, 
01221     const uint32_t& metric);
01222 
01223     XrlCmdError pim_0_1_send_test_assert6(
01224     // Input values, 
01225     const string&   vif_name, 
01226     const IPv6& source_addr, 
01227     const IPv6& group_addr, 
01228     const bool& rpt_bit, 
01229     const uint32_t& metric_preference, 
01230     const uint32_t& metric);
01231 
01248     XrlCmdError pim_0_1_add_test_bsr_zone4(
01249     // Input values, 
01250     const IPv4Net&  zone_id_scope_zone_prefix, 
01251     const bool& zone_id_is_scope_zone, 
01252     const IPv4& bsr_addr, 
01253     const uint32_t& bsr_priority, 
01254     const uint32_t& hash_mask_len, 
01255     const uint32_t& fragment_tag);
01256 
01257     XrlCmdError pim_0_1_add_test_bsr_zone6(
01258     // Input values, 
01259     const IPv6Net&  zone_id_scope_zone_prefix, 
01260     const bool& zone_id_is_scope_zone, 
01261     const IPv6& bsr_addr, 
01262     const uint32_t& bsr_priority, 
01263     const uint32_t& hash_mask_len, 
01264     const uint32_t& fragment_tag);
01265 
01266     XrlCmdError pim_0_1_add_test_bsr_group_prefix4(
01267     // Input values, 
01268     const IPv4Net&  zone_id_scope_zone_prefix, 
01269     const bool& zone_id_is_scope_zone, 
01270     const IPv4Net&  group_prefix, 
01271     const bool& is_scope_zone, 
01272     const uint32_t& expected_rp_count);
01273 
01274     XrlCmdError pim_0_1_add_test_bsr_group_prefix6(
01275     // Input values, 
01276     const IPv6Net&  zone_id_scope_zone_prefix, 
01277     const bool& zone_id_is_scope_zone, 
01278     const IPv6Net&  group_prefix, 
01279     const bool& is_scope_zone, 
01280     const uint32_t& expected_rp_count);
01281 
01282     XrlCmdError pim_0_1_add_test_bsr_rp4(
01283     // Input values, 
01284     const IPv4Net&  zone_id_scope_zone_prefix, 
01285     const bool& zone_id_is_scope_zone, 
01286     const IPv4Net&  group_prefix, 
01287     const IPv4& rp_addr, 
01288     const uint32_t& rp_priority, 
01289     const uint32_t& rp_holdtime);
01290 
01291     XrlCmdError pim_0_1_add_test_bsr_rp6(
01292     // Input values, 
01293     const IPv6Net&  zone_id_scope_zone_prefix, 
01294     const bool& zone_id_is_scope_zone, 
01295     const IPv6Net&  group_prefix, 
01296     const IPv6& rp_addr, 
01297     const uint32_t& rp_priority, 
01298     const uint32_t& rp_holdtime);
01299 
01300     XrlCmdError pim_0_1_send_test_bootstrap(
01301     // Input values, 
01302     const string&   vif_name);
01303 
01304     XrlCmdError pim_0_1_send_test_bootstrap_by_dest4(
01305     // Input values, 
01306     const string&   vif_name, 
01307     const IPv4& dest_addr);
01308 
01309     XrlCmdError pim_0_1_send_test_bootstrap_by_dest6(
01310     // Input values, 
01311     const string&   vif_name, 
01312     const IPv6& dest_addr);
01313 
01314     XrlCmdError pim_0_1_send_test_cand_rp_adv();
01315 
01339     XrlCmdError pim_0_1_pimstat_neighbors4(
01340     // Output values, 
01341     uint32_t&   nbrs_number, 
01342     XrlAtomList&    vifs, 
01343     XrlAtomList&    addresses, 
01344     XrlAtomList&    pim_versions, 
01345     XrlAtomList&    dr_priorities, 
01346     XrlAtomList&    holdtimes, 
01347     XrlAtomList&    timeouts, 
01348     XrlAtomList&    uptimes);
01349 
01350     XrlCmdError pim_0_1_pimstat_neighbors6(
01351     // Output values, 
01352     uint32_t&   nbrs_number, 
01353     XrlAtomList&    vifs, 
01354     XrlAtomList&    addresses, 
01355     XrlAtomList&    pim_versions, 
01356     XrlAtomList&    dr_priorities, 
01357     XrlAtomList&    holdtimes, 
01358     XrlAtomList&    timeouts, 
01359     XrlAtomList&    uptimes);
01360 
01379     XrlCmdError pim_0_1_pimstat_interface4(
01380     // Input values, 
01381     const string&   vif_name, 
01382     // Output values, 
01383     uint32_t&   pim_version, 
01384     bool&       is_dr, 
01385     uint32_t&   dr_priority, 
01386     IPv4&       dr_address, 
01387     uint32_t&   pim_nbrs_number);
01388 
01389     XrlCmdError pim_0_1_pimstat_interface6(
01390     // Input values, 
01391     const string&   vif_name, 
01392     // Output values, 
01393     uint32_t&   pim_version, 
01394     bool&       is_dr, 
01395     uint32_t&   dr_priority, 
01396     IPv6&       dr_address, 
01397     uint32_t&   pim_nbrs_number);
01398 
01424     XrlCmdError pim_0_1_pimstat_rps4(
01425     // Output values, 
01426     uint32_t&   rps_number, 
01427     XrlAtomList&    addresses, 
01428     XrlAtomList&    types, 
01429     XrlAtomList&    priorities, 
01430     XrlAtomList&    holdtimes, 
01431     XrlAtomList&    timeouts, 
01432     XrlAtomList&    group_prefixes);
01433 
01434     XrlCmdError pim_0_1_pimstat_rps6(
01435     // Output values, 
01436     uint32_t&   rps_number, 
01437     XrlAtomList&    addresses, 
01438     XrlAtomList&    types, 
01439     XrlAtomList&    priorities, 
01440     XrlAtomList&    holdtimes, 
01441     XrlAtomList&    timeouts, 
01442     XrlAtomList&    group_prefixes);
01443 
01447     XrlCmdError pim_0_1_clear_pim_statistics();
01448 
01454     XrlCmdError pim_0_1_clear_pim_statistics_per_vif(
01455     // Input values, 
01456     const string&   vif_name);
01457 
01461     XrlCmdError pim_0_1_pimstat_hello_messages_received(
01462     // Output values, 
01463     uint32_t&   value);
01464 
01465     XrlCmdError pim_0_1_pimstat_hello_messages_sent(
01466     // Output values, 
01467     uint32_t&   value);
01468 
01469     XrlCmdError pim_0_1_pimstat_hello_messages_rx_errors(
01470     // Output values, 
01471     uint32_t&   value);
01472 
01473     XrlCmdError pim_0_1_pimstat_register_messages_received(
01474     // Output values, 
01475     uint32_t&   value);
01476 
01477     XrlCmdError pim_0_1_pimstat_register_messages_sent(
01478     // Output values, 
01479     uint32_t&   value);
01480 
01481     XrlCmdError pim_0_1_pimstat_register_messages_rx_errors(
01482     // Output values, 
01483     uint32_t&   value);
01484 
01485     XrlCmdError pim_0_1_pimstat_register_stop_messages_received(
01486     // Output values, 
01487     uint32_t&   value);
01488 
01489     XrlCmdError pim_0_1_pimstat_register_stop_messages_sent(
01490     // Output values, 
01491     uint32_t&   value);
01492 
01493     XrlCmdError pim_0_1_pimstat_register_stop_messages_rx_errors(
01494     // Output values, 
01495     uint32_t&   value);
01496 
01497     XrlCmdError pim_0_1_pimstat_join_prune_messages_received(
01498     // Output values, 
01499     uint32_t&   value);
01500 
01501     XrlCmdError pim_0_1_pimstat_join_prune_messages_sent(
01502     // Output values, 
01503     uint32_t&   value);
01504 
01505     XrlCmdError pim_0_1_pimstat_join_prune_messages_rx_errors(
01506     // Output values, 
01507     uint32_t&   value);
01508 
01509     XrlCmdError pim_0_1_pimstat_bootstrap_messages_received(
01510     // Output values, 
01511     uint32_t&   value);
01512 
01513     XrlCmdError pim_0_1_pimstat_bootstrap_messages_sent(
01514     // Output values, 
01515     uint32_t&   value);
01516 
01517     XrlCmdError pim_0_1_pimstat_bootstrap_messages_rx_errors(
01518     // Output values, 
01519     uint32_t&   value);
01520 
01521     XrlCmdError pim_0_1_pimstat_assert_messages_received(
01522     // Output values, 
01523     uint32_t&   value);
01524 
01525     XrlCmdError pim_0_1_pimstat_assert_messages_sent(
01526     // Output values, 
01527     uint32_t&   value);
01528 
01529     XrlCmdError pim_0_1_pimstat_assert_messages_rx_errors(
01530     // Output values, 
01531     uint32_t&   value);
01532 
01533     XrlCmdError pim_0_1_pimstat_graft_messages_received(
01534     // Output values, 
01535     uint32_t&   value);
01536 
01537     XrlCmdError pim_0_1_pimstat_graft_messages_sent(
01538     // Output values, 
01539     uint32_t&   value);
01540 
01541     XrlCmdError pim_0_1_pimstat_graft_messages_rx_errors(
01542     // Output values, 
01543     uint32_t&   value);
01544 
01545     XrlCmdError pim_0_1_pimstat_graft_ack_messages_received(
01546     // Output values, 
01547     uint32_t&   value);
01548 
01549     XrlCmdError pim_0_1_pimstat_graft_ack_messages_sent(
01550     // Output values, 
01551     uint32_t&   value);
01552 
01553     XrlCmdError pim_0_1_pimstat_graft_ack_messages_rx_errors(
01554     // Output values, 
01555     uint32_t&   value);
01556 
01557     XrlCmdError pim_0_1_pimstat_candidate_rp_messages_received(
01558     // Output values, 
01559     uint32_t&   value);
01560 
01561     XrlCmdError pim_0_1_pimstat_candidate_rp_messages_sent(
01562     // Output values, 
01563     uint32_t&   value);
01564 
01565     XrlCmdError pim_0_1_pimstat_candidate_rp_messages_rx_errors(
01566     // Output values, 
01567     uint32_t&   value);
01568 
01569     XrlCmdError pim_0_1_pimstat_unknown_type_messages(
01570     // Output values, 
01571     uint32_t&   value);
01572 
01573     XrlCmdError pim_0_1_pimstat_unknown_version_messages(
01574     // Output values, 
01575     uint32_t&   value);
01576 
01577     XrlCmdError pim_0_1_pimstat_neighbor_unknown_messages(
01578     // Output values, 
01579     uint32_t&   value);
01580 
01581     XrlCmdError pim_0_1_pimstat_bad_length_messages(
01582     // Output values, 
01583     uint32_t&   value);
01584 
01585     XrlCmdError pim_0_1_pimstat_bad_checksum_messages(
01586     // Output values, 
01587     uint32_t&   value);
01588 
01589     XrlCmdError pim_0_1_pimstat_bad_receive_interface_messages(
01590     // Output values, 
01591     uint32_t&   value);
01592 
01593     XrlCmdError pim_0_1_pimstat_rx_interface_disabled_messages(
01594     // Output values, 
01595     uint32_t&   value);
01596 
01597     XrlCmdError pim_0_1_pimstat_rx_register_not_rp(
01598     // Output values, 
01599     uint32_t&   value);
01600 
01601     XrlCmdError pim_0_1_pimstat_rp_filtered_source(
01602     // Output values, 
01603     uint32_t&   value);
01604 
01605     XrlCmdError pim_0_1_pimstat_unknown_register_stop(
01606     // Output values, 
01607     uint32_t&   value);
01608 
01609     XrlCmdError pim_0_1_pimstat_rx_join_prune_no_state(
01610     // Output values, 
01611     uint32_t&   value);
01612 
01613     XrlCmdError pim_0_1_pimstat_rx_graft_graft_ack_no_state(
01614     // Output values, 
01615     uint32_t&   value);
01616 
01617     XrlCmdError pim_0_1_pimstat_rx_graft_on_upstream_interface(
01618     // Output values, 
01619     uint32_t&   value);
01620 
01621     XrlCmdError pim_0_1_pimstat_rx_candidate_rp_not_bsr(
01622     // Output values, 
01623     uint32_t&   value);
01624 
01625     XrlCmdError pim_0_1_pimstat_rx_bsr_when_bsr(
01626     // Output values, 
01627     uint32_t&   value);
01628 
01629     XrlCmdError pim_0_1_pimstat_rx_bsr_not_rpf_interface(
01630     // Output values, 
01631     uint32_t&   value);
01632 
01633     XrlCmdError pim_0_1_pimstat_rx_unknown_hello_option(
01634     // Output values, 
01635     uint32_t&   value);
01636 
01637     XrlCmdError pim_0_1_pimstat_rx_data_no_state(
01638     // Output values, 
01639     uint32_t&   value);
01640 
01641     XrlCmdError pim_0_1_pimstat_rx_rp_no_state(
01642     // Output values, 
01643     uint32_t&   value);
01644 
01645     XrlCmdError pim_0_1_pimstat_rx_aggregate(
01646     // Output values, 
01647     uint32_t&   value);
01648 
01649     XrlCmdError pim_0_1_pimstat_rx_malformed_packet(
01650     // Output values, 
01651     uint32_t&   value);
01652 
01653     XrlCmdError pim_0_1_pimstat_no_rp(
01654     // Output values, 
01655     uint32_t&   value);
01656 
01657     XrlCmdError pim_0_1_pimstat_no_route_upstream(
01658     // Output values, 
01659     uint32_t&   value);
01660 
01661     XrlCmdError pim_0_1_pimstat_rp_mismatch(
01662     // Output values, 
01663     uint32_t&   value);
01664 
01665     XrlCmdError pim_0_1_pimstat_rpf_neighbor_unknown(
01666     // Output values, 
01667     uint32_t&   value);
01668 
01669     XrlCmdError pim_0_1_pimstat_rx_join_rp(
01670     // Output values, 
01671     uint32_t&   value);
01672 
01673     XrlCmdError pim_0_1_pimstat_rx_prune_rp(
01674     // Output values, 
01675     uint32_t&   value);
01676 
01677     XrlCmdError pim_0_1_pimstat_rx_join_wc(
01678     // Output values, 
01679     uint32_t&   value);
01680 
01681     XrlCmdError pim_0_1_pimstat_rx_prune_wc(
01682     // Output values, 
01683     uint32_t&   value);
01684 
01685     XrlCmdError pim_0_1_pimstat_rx_join_sg(
01686     // Output values, 
01687     uint32_t&   value);
01688 
01689     XrlCmdError pim_0_1_pimstat_rx_prune_sg(
01690     // Output values, 
01691     uint32_t&   value);
01692 
01693     XrlCmdError pim_0_1_pimstat_rx_join_sg_rpt(
01694     // Output values, 
01695     uint32_t&   value);
01696 
01697     XrlCmdError pim_0_1_pimstat_rx_prune_sg_rpt(
01698     // Output values, 
01699     uint32_t&   value);
01700 
01701     XrlCmdError pim_0_1_pimstat_hello_messages_received_per_vif(
01702     // Input values, 
01703     const string&   vif_name, 
01704     // Output values, 
01705     uint32_t&   value);
01706 
01707     XrlCmdError pim_0_1_pimstat_hello_messages_sent_per_vif(
01708     // Input values, 
01709     const string&   vif_name, 
01710     // Output values, 
01711     uint32_t&   value);
01712 
01713     XrlCmdError pim_0_1_pimstat_hello_messages_rx_errors_per_vif(
01714     // Input values, 
01715     const string&   vif_name, 
01716     // Output values, 
01717     uint32_t&   value);
01718 
01719     XrlCmdError pim_0_1_pimstat_register_messages_received_per_vif(
01720     // Input values, 
01721     const string&   vif_name, 
01722     // Output values, 
01723     uint32_t&   value);
01724 
01725     XrlCmdError pim_0_1_pimstat_register_messages_sent_per_vif(
01726     // Input values, 
01727     const string&   vif_name, 
01728     // Output values, 
01729     uint32_t&   value);
01730 
01731     XrlCmdError pim_0_1_pimstat_register_messages_rx_errors_per_vif(
01732     // Input values, 
01733     const string&   vif_name, 
01734     // Output values, 
01735     uint32_t&   value);
01736 
01737     XrlCmdError pim_0_1_pimstat_register_stop_messages_received_per_vif(
01738     // Input values, 
01739     const string&   vif_name, 
01740     // Output values, 
01741     uint32_t&   value);
01742 
01743     XrlCmdError pim_0_1_pimstat_register_stop_messages_sent_per_vif(
01744     // Input values, 
01745     const string&   vif_name, 
01746     // Output values, 
01747     uint32_t&   value);
01748 
01749     XrlCmdError pim_0_1_pimstat_register_stop_messages_rx_errors_per_vif(
01750     // Input values, 
01751     const string&   vif_name, 
01752     // Output values, 
01753     uint32_t&   value);
01754 
01755     XrlCmdError pim_0_1_pimstat_join_prune_messages_received_per_vif(
01756     // Input values, 
01757     const string&   vif_name, 
01758     // Output values, 
01759     uint32_t&   value);
01760 
01761     XrlCmdError pim_0_1_pimstat_join_prune_messages_sent_per_vif(
01762     // Input values, 
01763     const string&   vif_name, 
01764     // Output values, 
01765     uint32_t&   value);
01766 
01767     XrlCmdError pim_0_1_pimstat_join_prune_messages_rx_errors_per_vif(
01768     // Input values, 
01769     const string&   vif_name, 
01770     // Output values, 
01771     uint32_t&   value);
01772 
01773     XrlCmdError pim_0_1_pimstat_bootstrap_messages_received_per_vif(
01774     // Input values, 
01775     const string&   vif_name, 
01776     // Output values, 
01777     uint32_t&   value);
01778 
01779     XrlCmdError pim_0_1_pimstat_bootstrap_messages_sent_per_vif(
01780     // Input values, 
01781     const string&   vif_name, 
01782     // Output values, 
01783     uint32_t&   value);
01784 
01785     XrlCmdError pim_0_1_pimstat_bootstrap_messages_rx_errors_per_vif(
01786     // Input values, 
01787     const string&   vif_name, 
01788     // Output values, 
01789     uint32_t&   value);
01790 
01791     XrlCmdError pim_0_1_pimstat_assert_messages_received_per_vif(
01792     // Input values, 
01793     const string&   vif_name, 
01794     // Output values, 
01795     uint32_t&   value);
01796 
01797     XrlCmdError pim_0_1_pimstat_assert_messages_sent_per_vif(
01798     // Input values, 
01799     const string&   vif_name, 
01800     // Output values, 
01801     uint32_t&   value);
01802 
01803     XrlCmdError pim_0_1_pimstat_assert_messages_rx_errors_per_vif(
01804     // Input values, 
01805     const string&   vif_name, 
01806     // Output values, 
01807     uint32_t&   value);
01808 
01809     XrlCmdError pim_0_1_pimstat_graft_messages_received_per_vif(
01810     // Input values, 
01811     const string&   vif_name, 
01812     // Output values, 
01813     uint32_t&   value);
01814 
01815     XrlCmdError pim_0_1_pimstat_graft_messages_sent_per_vif(
01816     // Input values, 
01817     const string&   vif_name, 
01818     // Output values, 
01819     uint32_t&   value);
01820 
01821     XrlCmdError pim_0_1_pimstat_graft_messages_rx_errors_per_vif(
01822     // Input values, 
01823     const string&   vif_name, 
01824     // Output values, 
01825     uint32_t&   value);
01826 
01827     XrlCmdError pim_0_1_pimstat_graft_ack_messages_received_per_vif(
01828     // Input values, 
01829     const string&   vif_name, 
01830     // Output values, 
01831     uint32_t&   value);
01832 
01833     XrlCmdError pim_0_1_pimstat_graft_ack_messages_sent_per_vif(
01834     // Input values, 
01835     const string&   vif_name, 
01836     // Output values, 
01837     uint32_t&   value);
01838 
01839     XrlCmdError pim_0_1_pimstat_graft_ack_messages_rx_errors_per_vif(
01840     // Input values, 
01841     const string&   vif_name, 
01842     // Output values, 
01843     uint32_t&   value);
01844 
01845     XrlCmdError pim_0_1_pimstat_candidate_rp_messages_received_per_vif(
01846     // Input values, 
01847     const string&   vif_name, 
01848     // Output values, 
01849     uint32_t&   value);
01850 
01851     XrlCmdError pim_0_1_pimstat_candidate_rp_messages_sent_per_vif(
01852     // Input values, 
01853     const string&   vif_name, 
01854     // Output values, 
01855     uint32_t&   value);
01856 
01857     XrlCmdError pim_0_1_pimstat_candidate_rp_messages_rx_errors_per_vif(
01858     // Input values, 
01859     const string&   vif_name, 
01860     // Output values, 
01861     uint32_t&   value);
01862 
01863     XrlCmdError pim_0_1_pimstat_unknown_type_messages_per_vif(
01864     // Input values, 
01865     const string&   vif_name, 
01866     // Output values, 
01867     uint32_t&   value);
01868 
01869     XrlCmdError pim_0_1_pimstat_unknown_version_messages_per_vif(
01870     // Input values, 
01871     const string&   vif_name, 
01872     // Output values, 
01873     uint32_t&   value);
01874 
01875     XrlCmdError pim_0_1_pimstat_neighbor_unknown_messages_per_vif(
01876     // Input values, 
01877     const string&   vif_name, 
01878     // Output values, 
01879     uint32_t&   value);
01880 
01881     XrlCmdError pim_0_1_pimstat_bad_length_messages_per_vif(
01882     // Input values, 
01883     const string&   vif_name, 
01884     // Output values, 
01885     uint32_t&   value);
01886 
01887     XrlCmdError pim_0_1_pimstat_bad_checksum_messages_per_vif(
01888     // Input values, 
01889     const string&   vif_name, 
01890     // Output values, 
01891     uint32_t&   value);
01892 
01893     XrlCmdError pim_0_1_pimstat_bad_receive_interface_messages_per_vif(
01894     // Input values, 
01895     const string&   vif_name, 
01896     // Output values, 
01897     uint32_t&   value);
01898 
01899     XrlCmdError pim_0_1_pimstat_rx_interface_disabled_messages_per_vif(
01900     // Input values, 
01901     const string&   vif_name, 
01902     // Output values, 
01903     uint32_t&   value);
01904 
01905     XrlCmdError pim_0_1_pimstat_rx_register_not_rp_per_vif(
01906     // Input values, 
01907     const string&   vif_name, 
01908     // Output values, 
01909     uint32_t&   value);
01910 
01911     XrlCmdError pim_0_1_pimstat_rp_filtered_source_per_vif(
01912     // Input values, 
01913     const string&   vif_name, 
01914     // Output values, 
01915     uint32_t&   value);
01916 
01917     XrlCmdError pim_0_1_pimstat_unknown_register_stop_per_vif(
01918     // Input values, 
01919     const string&   vif_name, 
01920     // Output values, 
01921     uint32_t&   value);
01922 
01923     XrlCmdError pim_0_1_pimstat_rx_join_prune_no_state_per_vif(
01924     // Input values, 
01925     const string&   vif_name, 
01926     // Output values, 
01927     uint32_t&   value);
01928 
01929     XrlCmdError pim_0_1_pimstat_rx_graft_graft_ack_no_state_per_vif(
01930     // Input values, 
01931     const string&   vif_name, 
01932     // Output values, 
01933     uint32_t&   value);
01934 
01935     XrlCmdError pim_0_1_pimstat_rx_graft_on_upstream_interface_per_vif(
01936     // Input values, 
01937     const string&   vif_name, 
01938     // Output values, 
01939     uint32_t&   value);
01940 
01941     XrlCmdError pim_0_1_pimstat_rx_candidate_rp_not_bsr_per_vif(
01942     // Input values, 
01943     const string&   vif_name, 
01944     // Output values, 
01945     uint32_t&   value);
01946 
01947     XrlCmdError pim_0_1_pimstat_rx_bsr_when_bsr_per_vif(
01948     // Input values, 
01949     const string&   vif_name, 
01950     // Output values, 
01951     uint32_t&   value);
01952 
01953     XrlCmdError pim_0_1_pimstat_rx_bsr_not_rpf_interface_per_vif(
01954     // Input values, 
01955     const string&   vif_name, 
01956     // Output values, 
01957     uint32_t&   value);
01958 
01959     XrlCmdError pim_0_1_pimstat_rx_unknown_hello_option_per_vif(
01960     // Input values, 
01961     const string&   vif_name, 
01962     // Output values, 
01963     uint32_t&   value);
01964 
01965     XrlCmdError pim_0_1_pimstat_rx_data_no_state_per_vif(
01966     // Input values, 
01967     const string&   vif_name, 
01968     // Output values, 
01969     uint32_t&   value);
01970 
01971     XrlCmdError pim_0_1_pimstat_rx_rp_no_state_per_vif(
01972     // Input values, 
01973     const string&   vif_name, 
01974     // Output values, 
01975     uint32_t&   value);
01976 
01977     XrlCmdError pim_0_1_pimstat_rx_aggregate_per_vif(
01978     // Input values, 
01979     const string&   vif_name, 
01980     // Output values, 
01981     uint32_t&   value);
01982 
01983     XrlCmdError pim_0_1_pimstat_rx_malformed_packet_per_vif(
01984     // Input values, 
01985     const string&   vif_name, 
01986     // Output values, 
01987     uint32_t&   value);
01988 
01989     XrlCmdError pim_0_1_pimstat_no_rp_per_vif(
01990     // Input values, 
01991     const string&   vif_name, 
01992     // Output values, 
01993     uint32_t&   value);
01994 
01995     XrlCmdError pim_0_1_pimstat_no_route_upstream_per_vif(
01996     // Input values, 
01997     const string&   vif_name, 
01998     // Output values, 
01999     uint32_t&   value);
02000 
02001     XrlCmdError pim_0_1_pimstat_rp_mismatch_per_vif(
02002     // Input values, 
02003     const string&   vif_name, 
02004     // Output values, 
02005     uint32_t&   value);
02006 
02007     XrlCmdError pim_0_1_pimstat_rpf_neighbor_unknown_per_vif(
02008     // Input values, 
02009     const string&   vif_name, 
02010     // Output values, 
02011     uint32_t&   value);
02012 
02013     XrlCmdError pim_0_1_pimstat_rx_join_rp_per_vif(
02014     // Input values, 
02015     const string&   vif_name, 
02016     // Output values, 
02017     uint32_t&   value);
02018 
02019     XrlCmdError pim_0_1_pimstat_rx_prune_rp_per_vif(
02020     // Input values, 
02021     const string&   vif_name, 
02022     // Output values, 
02023     uint32_t&   value);
02024 
02025     XrlCmdError pim_0_1_pimstat_rx_join_wc_per_vif(
02026     // Input values, 
02027     const string&   vif_name, 
02028     // Output values, 
02029     uint32_t&   value);
02030 
02031     XrlCmdError pim_0_1_pimstat_rx_prune_wc_per_vif(
02032     // Input values, 
02033     const string&   vif_name, 
02034     // Output values, 
02035     uint32_t&   value);
02036 
02037     XrlCmdError pim_0_1_pimstat_rx_join_sg_per_vif(
02038     // Input values, 
02039     const string&   vif_name, 
02040     // Output values, 
02041     uint32_t&   value);
02042 
02043     XrlCmdError pim_0_1_pimstat_rx_prune_sg_per_vif(
02044     // Input values, 
02045     const string&   vif_name, 
02046     // Output values, 
02047     uint32_t&   value);
02048 
02049     XrlCmdError pim_0_1_pimstat_rx_join_sg_rpt_per_vif(
02050     // Input values, 
02051     const string&   vif_name, 
02052     // Output values, 
02053     uint32_t&   value);
02054 
02055     XrlCmdError pim_0_1_pimstat_rx_prune_sg_rpt_per_vif(
02056     // Input values, 
02057     const string&   vif_name, 
02058     // Output values, 
02059     uint32_t&   value);
02060 
02061 private:
02062     class XrlTaskBase;
02063 
02064     const ServiceBase* ifmgr_mirror_service_base() const {
02065     return dynamic_cast<const ServiceBase*>(&_ifmgr);
02066     }
02067     const IfMgrIfTree& ifmgr_iftree() const { return _ifmgr.iftree(); }
02068 
02074     virtual void finder_connect_event();
02075 
02081     virtual void finder_disconnect_event();
02082 
02083     //
02084     // Methods to handle the XRL tasks
02085     //
02086     void add_task(XrlTaskBase* xrl_task);
02087     void send_xrl_task();
02088     void pop_xrl_task();
02089     void retry_xrl_task();
02090 
02091     void fea_register_startup();
02092     void mfea_register_startup();
02093     void fea_register_shutdown();
02094     void mfea_register_shutdown();
02095     void finder_send_register_unregister_interest_cb(const XrlError& xrl_error);
02096 
02097     void rib_register_startup();
02098     void finder_register_interest_rib_cb(const XrlError& xrl_error);
02099     void rib_register_shutdown();
02100     void finder_deregister_interest_rib_cb(const XrlError& xrl_error);
02101 
02102     void send_rib_redist_transaction_enable();
02103     void rib_client_send_redist_transaction_enable_cb(const XrlError& xrl_error);
02104     void send_rib_redist_transaction_disable();
02105     void rib_client_send_redist_transaction_disable_cb(const XrlError& xrl_error);
02106 
02107     //
02108     // Protocol node methods
02109     //
02110     int register_receiver(const string& if_name, const string& vif_name,
02111               uint8_t ip_protocol,
02112               bool enable_multicast_loopback);
02113     int unregister_receiver(const string& if_name, const string& vif_name,
02114                 uint8_t ip_protocol);
02115     void fea_client_send_register_unregister_receiver_cb(const XrlError& xrl_error);
02116 
02117     int register_protocol(const string& if_name, const string& vif_name,
02118               uint8_t ip_protocol);
02119     int unregister_protocol(const string& if_name, const string& vif_name);
02120     void mfea_client_send_register_unregister_protocol_cb(const XrlError& xrl_error);
02121 
02122     int join_multicast_group(const string& if_name, const string& vif_name,
02123                  uint8_t ip_protocol, const IPvX& group_address);
02124     int leave_multicast_group(const string& if_name, const string& vif_name,
02125                   uint8_t ip_protocol, const IPvX& group_address);
02126     void fea_client_send_join_leave_multicast_group_cb(const XrlError& xrl_error);
02127 
02128     int proto_send(const string& if_name,
02129            const string& vif_name,
02130            const IPvX& src_address,
02131            const IPvX& dst_address,
02132            uint8_t ip_protocol,
02133            int32_t ip_ttl,
02134            int32_t ip_tos,
02135            bool ip_router_alert,
02136            bool ip_internet_control,
02137            const uint8_t* sndbuf,
02138            size_t sndlen,
02139            string& error_msg);
02140     void fea_client_send_protocol_message_cb(const XrlError& xrl_error);
02141 
02142     int add_mfc_to_kernel(const PimMfc& pim_mfc);
02143     int delete_mfc_from_kernel(const PimMfc& pim_mfc);
02144     void mfea_client_send_add_delete_mfc_cb(const XrlError& xrl_error);
02145 
02146     int add_dataflow_monitor(const IPvX& source_addr,
02147                  const IPvX& group_addr,
02148                  uint32_t threshold_interval_sec,
02149                  uint32_t threshold_interval_usec,
02150                  uint32_t threshold_packets,
02151                  uint32_t threshold_bytes,
02152                  bool is_threshold_in_packets,
02153                  bool is_threshold_in_bytes,
02154                  bool is_geq_upcall,
02155                  bool is_leq_upcall);
02156     int delete_dataflow_monitor(const IPvX& source_addr,
02157                 const IPvX& group_addr,
02158                 uint32_t threshold_interval_sec,
02159                 uint32_t threshold_interval_usec,
02160                 uint32_t threshold_packets,
02161                 uint32_t threshold_bytes,
02162                 bool is_threshold_in_packets,
02163                 bool is_threshold_in_bytes,
02164                 bool is_geq_upcall,
02165                 bool is_leq_upcall);
02166     int delete_all_dataflow_monitor(const IPvX& source_addr,
02167                     const IPvX& group_addr);
02168     void mfea_client_send_add_delete_dataflow_monitor_cb(const XrlError& xrl_error);
02169 
02170     int add_protocol_mld6igmp(uint32_t vif_index);
02171     int delete_protocol_mld6igmp(uint32_t vif_index);
02172     void send_add_delete_protocol_mld6igmp();
02173     void mld6igmp_client_send_add_delete_protocol_mld6igmp_cb(const XrlError& xrl_error);
02174     void schedule_add_protocol_mld6igmp();
02175 
02176     //
02177     // Protocol node CLI methods
02178     //
02179     int add_cli_command_to_cli_manager(const char *command_name,
02180                        const char *command_help,
02181                        bool is_command_cd,
02182                        const char *command_cd_prompt,
02183                        bool is_command_processor);
02184     void cli_manager_client_send_add_cli_command_cb(const XrlError& xrl_error);
02185     int delete_cli_command_from_cli_manager(const char *command_name);
02186     void cli_manager_client_send_delete_cli_command_cb(const XrlError& xrl_error);
02187     
02188     int family() const { return PimNode::family(); }
02189 
02190 
02194     class XrlTaskBase {
02195     public:
02196     XrlTaskBase(XrlPimNode& xrl_pim_node)
02197         : _xrl_pim_node(xrl_pim_node) {}
02198     virtual ~XrlTaskBase() {}
02199 
02200     virtual void dispatch() = 0;
02201     virtual const char* operation_name() const = 0;
02202 
02203     protected:
02204     XrlPimNode& _xrl_pim_node;
02205     private:
02206     };
02207 
02212     class RegisterUnregisterInterest : public XrlTaskBase {
02213     public:
02214     RegisterUnregisterInterest(XrlPimNode&      xrl_pim_node,
02215                    const string&    target_name,
02216                    bool         is_register)
02217         : XrlTaskBase(xrl_pim_node),
02218           _target_name(target_name),
02219           _is_register(is_register) {}
02220 
02221     void        dispatch() {
02222         _xrl_pim_node.send_register_unregister_interest();
02223     }
02224     const char* operation_name() const {
02225         return ((_is_register)? "register" : "unregister");
02226     }
02227     const string&   target_name() const { return _target_name; }
02228     bool        is_register() const { return _is_register; }
02229 
02230     private:
02231     string      _target_name;
02232     bool        _is_register;
02233     };
02234 
02239     class RegisterUnregisterReceiver : public XrlTaskBase {
02240     public:
02241     RegisterUnregisterReceiver(XrlPimNode&      xrl_pim_node,
02242                    const string&    if_name,
02243                    const string&    vif_name,
02244                    uint8_t      ip_protocol,
02245                    bool         enable_multicast_loopback,
02246                    bool         is_register)
02247         : XrlTaskBase(xrl_pim_node),
02248           _if_name(if_name),
02249           _vif_name(vif_name),
02250           _ip_protocol(ip_protocol),
02251           _enable_multicast_loopback(enable_multicast_loopback),
02252           _is_register(is_register) {}
02253 
02254     void        dispatch() {
02255         _xrl_pim_node.send_register_unregister_receiver();
02256     }
02257     const char* operation_name() const {
02258         return ((_is_register)? "register" : "unregister");
02259     }
02260     const string&   if_name() const { return _if_name; }
02261     const string&   vif_name() const { return _vif_name; }
02262     uint8_t     ip_protocol() const { return _ip_protocol; }
02263     bool        enable_multicast_loopback() const {
02264         return _enable_multicast_loopback;
02265     }
02266     bool        is_register() const { return _is_register; }
02267 
02268     private:
02269     string      _if_name;
02270     string      _vif_name;
02271     uint8_t     _ip_protocol;
02272     bool        _enable_multicast_loopback;
02273     bool        _is_register;
02274     };
02275 
02280     class RegisterUnregisterProtocol : public XrlTaskBase {
02281     public:
02282     RegisterUnregisterProtocol(XrlPimNode&      xrl_pim_node,
02283                    const string&    if_name,
02284                    const string&    vif_name,
02285                    uint8_t      ip_protocol,
02286                    bool         is_register)
02287         : XrlTaskBase(xrl_pim_node),
02288           _if_name(if_name),
02289           _vif_name(vif_name),
02290           _ip_protocol(ip_protocol),
02291           _is_register(is_register) {}
02292 
02293     void        dispatch() {
02294         _xrl_pim_node.send_register_unregister_protocol();
02295     }
02296     const char* operation_name() const {
02297         return ((_is_register)? "register" : "unregister");
02298     }
02299     const string&   if_name() const { return _if_name; }
02300     const string&   vif_name() const { return _vif_name; }
02301     uint8_t     ip_protocol() const { return _ip_protocol; }
02302     bool        is_register() const { return _is_register; }
02303 
02304     private:
02305     string      _if_name;
02306     string      _vif_name;
02307     uint8_t     _ip_protocol;
02308     bool        _is_register;
02309     };
02310 
02314     class JoinLeaveMulticastGroup : public XrlTaskBase {
02315     public:
02316     JoinLeaveMulticastGroup(XrlPimNode&     xrl_pim_node,
02317                 const string&       if_name,
02318                 const string&       vif_name,
02319                 uint8_t         ip_protocol,
02320                 const IPvX&     group_address,
02321                 bool            is_join)
02322         : XrlTaskBase(xrl_pim_node),
02323           _if_name(if_name),
02324           _vif_name(vif_name),
02325           _ip_protocol(ip_protocol),
02326           _group_address(group_address),
02327           _is_join(is_join) {}
02328 
02329     void        dispatch() {
02330         _xrl_pim_node.send_join_leave_multicast_group();
02331     }
02332     const char* operation_name() const {
02333         return ((_is_join)? "join" : "leave");
02334     }
02335     const string&   if_name() const { return _if_name; }
02336     const string&   vif_name() const { return _vif_name; }
02337     uint8_t     ip_protocol() const { return _ip_protocol; }
02338     const IPvX& group_address() const { return _group_address; }
02339     bool        is_join() const { return _is_join; }
02340 
02341     private:
02342     string      _if_name;
02343     string      _vif_name;
02344     uint8_t     _ip_protocol;
02345     IPvX        _group_address;
02346     bool        _is_join;
02347     };
02348 
02352     class SendProtocolMessage : public XrlTaskBase {
02353     public:
02354     SendProtocolMessage(XrlPimNode&     xrl_pim_node,
02355                 const string&   if_name,
02356                 const string&   vif_name,
02357                 const IPvX&     src_address,
02358                 const IPvX&     dst_address,
02359                 uint8_t     ip_protocol,
02360                 int32_t     ip_ttl,
02361                 int32_t     ip_tos,
02362                 bool        ip_router_alert,
02363                 bool        ip_internet_control,
02364                 const uint8_t*  sndbuf,
02365                 size_t      sndlen)
02366         : XrlTaskBase(xrl_pim_node),
02367           _if_name(if_name),
02368           _vif_name(vif_name),
02369           _src_address(src_address),
02370           _dst_address(dst_address),
02371           _ip_protocol(ip_protocol),
02372           _ip_ttl(ip_ttl),
02373           _ip_tos(ip_tos),
02374           _ip_router_alert(ip_router_alert),
02375           _ip_internet_control(ip_internet_control) {
02376         _payload.resize(sndlen);
02377         for (size_t i = 0; i < sndlen; i++)
02378         _payload[i] = sndbuf[i];
02379     }
02380 
02381     void        dispatch() {
02382         _xrl_pim_node.send_protocol_message();
02383     }
02384     const char* operation_name() const {
02385         return ("send");
02386     }
02387     const string&   if_name() const { return _if_name; }
02388     const string&   vif_name() const { return _vif_name; }
02389     const IPvX& src_address() const { return _src_address; }
02390     const IPvX& dst_address() const { return _dst_address; }
02391     uint8_t     ip_protocol() const { return _ip_protocol; }
02392     int32_t     ip_ttl() const { return _ip_ttl; }
02393     int32_t     ip_tos() const { return _ip_tos; }
02394     bool        ip_router_alert() const { return _ip_router_alert; }
02395     bool        ip_internet_control() const { return _ip_internet_control; }
02396     const vector<uint8_t>& payload() const { return _payload; }
02397 
02398     private:
02399     string      _if_name;
02400     string      _vif_name;
02401     IPvX        _src_address;
02402     IPvX        _dst_address;
02403     uint8_t     _ip_protocol;
02404     int32_t     _ip_ttl;
02405     int32_t     _ip_tos;
02406     bool        _ip_router_alert;
02407     bool        _ip_internet_control;
02408     vector<uint8_t> _payload;
02409     };
02410 
02414     class AddDeleteMfc : public XrlTaskBase {
02415     public:
02416     AddDeleteMfc(XrlPimNode&    xrl_pim_node,
02417              const PimMfc&  pim_mfc,
02418              bool       is_add)
02419         : XrlTaskBase(xrl_pim_node),
02420           _source_addr(pim_mfc.source_addr()),
02421           _group_addr(pim_mfc.group_addr()),
02422           _rp_addr(pim_mfc.rp_addr()),
02423           _iif_vif_index(pim_mfc.iif_vif_index()),
02424           _olist(pim_mfc.olist()),
02425           _olist_disable_wrongvif(pim_mfc.olist_disable_wrongvif()),
02426           _is_add(is_add) {}
02427 
02428     void        dispatch() {
02429         _xrl_pim_node.send_add_delete_mfc();
02430     }
02431     const char* operation_name() const {
02432         return ((_is_add)? "add" : "delete");
02433     }
02434     const IPvX& source_addr() const { return _source_addr; }
02435     const IPvX& group_addr() const { return _group_addr; }
02436     const IPvX& rp_addr() const { return _rp_addr; }
02437     uint32_t    iif_vif_index() const { return _iif_vif_index; }
02438     const Mifset&   olist() const { return _olist; }
02439     const Mifset&   olist_disable_wrongvif() const { return _olist_disable_wrongvif; }
02440     bool is_add()   const { return _is_add; }
02441 
02442     private:
02443     IPvX        _source_addr;
02444     IPvX        _group_addr;
02445     IPvX        _rp_addr;
02446     uint32_t    _iif_vif_index;
02447     Mifset      _olist;
02448     Mifset      _olist_disable_wrongvif;
02449     bool        _is_add;
02450     };
02451 
02455     class AddDeleteDataflowMonitor : public XrlTaskBase {
02456     public:
02457     AddDeleteDataflowMonitor(XrlPimNode&    xrl_pim_node,
02458                  const IPvX&    source_addr,
02459                  const IPvX&    group_addr,
02460                  uint32_t   threshold_interval_sec,
02461                  uint32_t   threshold_interval_usec,
02462                  uint32_t   threshold_packets,
02463                  uint32_t   threshold_bytes,
02464                  bool       is_threshold_in_packets,
02465                  bool       is_threshold_in_bytes,
02466                  bool       is_geq_upcall,
02467                  bool       is_leq_upcall,
02468                  bool       is_add)
02469         : XrlTaskBase(xrl_pim_node),
02470           _source_addr(source_addr),
02471           _group_addr(group_addr),
02472           _threshold_interval_sec(threshold_interval_sec),
02473           _threshold_interval_usec(threshold_interval_usec),
02474           _threshold_packets(threshold_packets),
02475           _threshold_bytes(threshold_bytes),
02476           _is_threshold_in_packets(is_threshold_in_packets),
02477           _is_threshold_in_bytes(is_threshold_in_bytes),
02478           _is_geq_upcall(is_geq_upcall),
02479           _is_leq_upcall(is_leq_upcall),
02480           _is_add(is_add),
02481           _is_delete_all(false) {}
02482     AddDeleteDataflowMonitor(XrlPimNode&    xrl_pim_node,
02483                  const IPvX&    source_addr,
02484                  const IPvX&    group_addr)
02485         : XrlTaskBase(xrl_pim_node),
02486           _source_addr(source_addr),
02487           _group_addr(group_addr),
02488           _threshold_interval_sec(0),
02489           _threshold_interval_usec(0),
02490           _threshold_packets(0),
02491           _threshold_bytes(0),
02492           _is_threshold_in_packets(false),
02493           _is_threshold_in_bytes(false),
02494           _is_geq_upcall(false),
02495           _is_leq_upcall(false),
02496           _is_add(false),
02497           _is_delete_all(true) {}
02498 
02499     void        dispatch() {
02500         _xrl_pim_node.send_add_delete_dataflow_monitor();
02501     }
02502     const char* operation_name() const {
02503         return ((_is_delete_all)? "delete all" : (_is_add)? "add" : "delete");
02504     }
02505 
02506     const IPvX& source_addr() const { return _source_addr; }
02507     const IPvX& group_addr() const { return _group_addr; }
02508     uint32_t    threshold_interval_sec() const { return _threshold_interval_sec; }
02509     uint32_t    threshold_interval_usec() const { return _threshold_interval_usec; }
02510     uint32_t    threshold_packets() const { return _threshold_packets; }
02511     uint32_t    threshold_bytes() const { return _threshold_bytes; }
02512     bool        is_threshold_in_packets() const { return _is_threshold_in_packets; }
02513     bool        is_threshold_in_bytes() const { return _is_threshold_in_bytes; }
02514     bool        is_geq_upcall() const { return _is_geq_upcall; }
02515     bool        is_leq_upcall() const { return _is_leq_upcall; }
02516     bool        is_add() const { return _is_add; }
02517     bool        is_delete_all() const { return _is_delete_all; }
02518 
02519     private:
02520     IPvX        _source_addr;
02521     IPvX        _group_addr;
02522     uint32_t    _threshold_interval_sec;
02523     uint32_t    _threshold_interval_usec;
02524     uint32_t    _threshold_packets;
02525     uint32_t    _threshold_bytes;
02526     bool        _is_threshold_in_packets;
02527     bool        _is_threshold_in_bytes;
02528     bool        _is_geq_upcall;
02529     bool        _is_leq_upcall;
02530     bool        _is_add;
02531     bool        _is_delete_all;
02532     };
02533 
02534     EventLoop&          _eventloop;
02535     const string        _finder_target;
02536     const string        _fea_target;
02537     const string        _mfea_target;
02538     const string        _rib_target;
02539     const string        _mld6igmp_target;
02540 
02541     IfMgrXrlMirror      _ifmgr;
02542 
02543     TransactionManager      _mrib_transaction_manager;
02544     XrlRawPacket4V0p1Client _xrl_fea_client4;
02545 #ifdef HAVE_IPV6
02546     XrlRawPacket6V0p1Client _xrl_fea_client6;
02547 #endif
02548     XrlMfeaV0p1Client       _xrl_mfea_client;
02549     XrlRibV0p1Client        _xrl_rib_client;
02550     XrlMld6igmpV0p1Client   _xrl_mld6igmp_client;
02551     XrlCliManagerV0p1Client _xrl_cli_manager_client;
02552     XrlFinderEventNotifierV0p1Client    _xrl_finder_client;
02553 
02554     static const TimeVal    RETRY_TIMEVAL;
02555 
02556     bool            _is_finder_alive;
02557 
02558     bool            _is_fea_alive;
02559     bool            _is_fea_registered;
02560 
02561     bool            _is_mfea_alive;
02562     bool            _is_mfea_registered;
02563 
02564     bool            _is_rib_alive;
02565     bool            _is_rib_registered;
02566     bool            _is_rib_registering;
02567     bool            _is_rib_deregistering;
02568     XorpTimer           _rib_register_startup_timer;
02569     XorpTimer           _rib_register_shutdown_timer;
02570     bool            _is_rib_redist_transaction_enabled;
02571     XorpTimer           _rib_redist_transaction_enable_timer;
02572 
02573     bool            _is_mld6igmp_alive;
02574     bool            _is_mld6igmp_registered;
02575     bool            _is_mld6igmp_registering;
02576     bool            _is_mld6igmp_deregistering;
02577     XorpTimer           _mld6igmp_register_startup_timer;
02578     XorpTimer           _mld6igmp_register_shutdown_timer;
02579 
02580     list<XrlTaskBase* >     _xrl_tasks_queue;
02581     XorpTimer           _xrl_tasks_queue_timer;
02582     list<pair<uint32_t, bool> > _add_delete_protocol_mld6igmp_queue;
02583     XorpTimer           _add_delete_protocol_mld6igmp_queue_timer;
02584 
02585     // The set of vifs to add to MLD6IGMP if it goes away and comes back
02586     set<uint32_t>       _add_protocol_mld6igmp_vif_index_set;
02587 };
02588 
02589 #endif // __PIM_XRL_PIM_NODE_HH__
 All Classes Namespaces Functions Variables Typedefs Enumerations