Source: ../../fib2mrib/xrl_fib2mrib_node.hh
|
|
|
|
// -*- c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t -*-
// Copyright (c) 2001-2005 International Computer Science Institute
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software")
// to deal in the Software without restriction, subject to the conditions
// listed in the XORP LICENSE file. These conditions include: you must
// preserve this copyright notice, and you cannot mention the copyright
// holders in advertising related to the Software without their permission.
// The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
// notice is a summary of the XORP LICENSE file; the license in that file is
// legally binding.
// $XORP: xorp/fib2mrib/xrl_fib2mrib_node.hh,v 1.16 2005/03/25 02:53:21 pavlin Exp $
#ifndef __FIB2MRIB_XRL_FIB2MRIB_NODE_HH__
#define __FIB2MRIB_XRL_FIB2MRIB_NODE_HH__
//
// Fib2mrib XRL-aware node definition.
//
#include "libxipc/xrl_std_router.hh"
#include "libfeaclient/ifmgr_xrl_mirror.hh"
#include "xrl/interfaces/finder_event_notifier_xif.hh"
#include "xrl/interfaces/fti_xif.hh"
#include "xrl/interfaces/fea_fib_xif.hh"
#include "xrl/interfaces/rib_xif.hh"
#include "xrl/targets/fib2mrib_base.hh"
#include "fib2mrib_node.hh"
//
// The top-level class that wraps-up everything together under one roof
//
class XrlFib2mribNode : public Fib2mribNode,
public XrlStdRouter,
public XrlFib2mribTargetBase {
public:
XrlFib2mribNode(EventLoop& eventloop,
const string& class_name,
const string& finder_hostname,
uint16_t finder_port,
const string& finder_target,
const string& fea_target,
const string& rib_target);
~XrlFib2mribNode();
/**
* Startup the node operation.
*
* @return true on success, false on failure.
*/
bool startup();
/**
* Shutdown the node operation.
*
* @return true on success, false on failure.
*/
bool shutdown();
/**
* Get a reference to the XrlRouter instance.
*
* @return a reference to the XrlRouter (@ref XrlRouter) instance.
*/
XrlRouter& xrl_router() { return *this; }
protected:
//
// XRL target methods
//
/**
* Get name of Xrl Target
*/
XrlCmdError common_0_1_get_target_name(
// Output values,
string& name);
/**
* Get version string from Xrl Target
*/
XrlCmdError common_0_1_get_version(
// Output values,
string& version);
/**
* Get status of Xrl Target
*/
XrlCmdError common_0_1_get_status(
// Output values,
uint32_t& status,
string& reason);
/**
* Request clean shutdown of Xrl Target
*/
XrlCmdError common_0_1_shutdown();
/**
* Announce target birth to observer.
*
* @param target_class the target class name.
*
* @param target_instance the target instance name.
*/
XrlCmdError finder_event_observer_0_1_xrl_target_birth(
// Input values,
const string& target_class,
const string& target_instance);
/**
* Announce target death to observer.
*
* @param target_class the target class name.
*
* @param target_instance the target instance name.
*/
XrlCmdError finder_event_observer_0_1_xrl_target_death(
// Input values,
const string& target_class,
const string& target_instance);
/**
* Add a route.
*
* @param network the network address prefix of the route to add.
*
* @param nexthop the address of the next-hop router toward the
* destination.
*
* @param ifname the name of the physical interface toward the
* destination.
*
* @param vifname the name of the virtual interface toward the
* destination.
*
* @param metric the routing metric toward the destination.
*
* @param admin_distance the administratively defined distance toward the
* destination.
*
* @param protocol_origin the name of the protocol that originated this
* route.
*
* @param xorp_route true if this route was installed by XORP.
*/
XrlCmdError fea_fib_client_0_1_add_route4(
// Input values,
const IPv4Net& network,
const IPv4& nexthop,
const string& ifname,
const string& vifname,
const uint32_t& metric,
const uint32_t& admin_distance,
const string& protocol_origin,
const bool& xorp_route);
XrlCmdError fea_fib_client_0_1_add_route6(
// Input values,
const IPv6Net& network,
const IPv6& nexthop,
const string& ifname,
const string& vifname,
const uint32_t& metric,
const uint32_t& admin_distance,
const string& protocol_origin,
const bool& xorp_route);
/**
* Replace a route.
*
* @param network the network address prefix of the route to replace.
*
* @param nexthop the address of the next-hop router toward the
* destination.
*
* @param ifname the name of the physical interface toward the
* destination.
*
* @param vifname the name of the virtual interface toward the
* destination.
*
* @param metric the routing metric toward the destination.
*
* @param admin_distance the administratively defined distance toward the
* destination.
*
* @param protocol_origin the name of the protocol that originated this
* route.
*
* @param xorp_route true if this route was installed by XORP.
*/
XrlCmdError fea_fib_client_0_1_replace_route4(
// Input values,
const IPv4Net& network,
const IPv4& nexthop,
const string& ifname,
const string& vifname,
const uint32_t& metric,
const uint32_t& admin_distance,
const string& protocol_origin,
const bool& xorp_route);
XrlCmdError fea_fib_client_0_1_replace_route6(
// Input values,
const IPv6Net& network,
const IPv6& nexthop,
const string& ifname,
const string& vifname,
const uint32_t& metric,
const uint32_t& admin_distance,
const string& protocol_origin,
const bool& xorp_route);
/**
* Delete a route.
*
* @param network the network address prefix of the route to delete.
*
* @param ifname the name of the physical interface toward the
* destination.
*
* @param vifname the name of the virtual interface toward the
*/
XrlCmdError fea_fib_client_0_1_delete_route4(
// Input values,
const IPv4Net& network,
const string& ifname,
const string& vifname);
XrlCmdError fea_fib_client_0_1_delete_route6(
// Input values,
const IPv6Net& network,
const string& ifname,
const string& vifname);
/**
* Route resolve notification.
*
* @param network the network address prefix of the lookup
* which failed or for which upper layer intervention is
* requested from the FIB.
*/
XrlCmdError fea_fib_client_0_1_resolve_route4(
// Input values,
const IPv4Net& network);
XrlCmdError fea_fib_client_0_1_resolve_route6(
// Input values,
const IPv6Net& network);
/**
* Enable/disable/start/stop Fib2mrib.
*
* @param enable if true, then enable Fib2mrib, otherwise disable it.
*/
XrlCmdError fib2mrib_0_1_enable_fib2mrib(
// Input values,
const bool& enable);
XrlCmdError fib2mrib_0_1_start_fib2mrib();
XrlCmdError fib2mrib_0_1_stop_fib2mrib();
/**
* Enable/disable the Fib2mrib trace log for all operations.
*
* @param enable if true, then enable the trace log, otherwise disable it.
*/
XrlCmdError fib2mrib_0_1_enable_log_trace_all(
// Input values,
const bool& enable);
/**
* Configure a policy filter.
*
* @param filter Id of filter to configure.
* @param conf Configuration of filter.
*/
XrlCmdError policy_backend_0_1_configure(
// Input values,
const uint32_t& filter,
const string& conf);
/**
* Reset a policy filter.
*
* @param filter Id of filter to reset.
*/
XrlCmdError policy_backend_0_1_reset(
// Input values,
const uint32_t& filter);
/**
* Push routes through policy filters for re-filtering.
*/
XrlCmdError policy_backend_0_1_push_routes();
private:
const ServiceBase* ifmgr_mirror_service_base() const {
return dynamic_cast<const ServiceBase*>(&_ifmgr);
}
const IfMgrIfTree& ifmgr_iftree() const { return _ifmgr.iftree(); }
/**
* Called when Finder connection is established.
*
* Note that this method overwrites an XrlRouter virtual method.
*/
virtual void finder_connect_event();
/**
* Called when Finder disconnect occurs.
*
* Note that this method overwrites an XrlRouter virtual method.
*/
virtual void finder_disconnect_event();
void fea_register_startup();
void finder_register_interest_fea_cb(const XrlError& xrl_error);
void fea_register_shutdown();
void finder_deregister_interest_fea_cb(const XrlError& xrl_error);
void send_fea_add_fib_client();
void fea_fti_client_send_have_ipv4_cb(const XrlError& xrl_error,
const bool* result);
void fea_fti_client_send_have_ipv6_cb(const XrlError& xrl_error,
const bool* result);
void fea_fib_client_send_add_fib_client4_cb(const XrlError& xrl_error);
void fea_fib_client_send_add_fib_client6_cb(const XrlError& xrl_error);
void send_fea_delete_fib_client();
void fea_fib_client_send_delete_fib_client4_cb(const XrlError& xrl_error);
void fea_fib_client_send_delete_fib_client6_cb(const XrlError& xrl_error);
void rib_register_startup();
void finder_register_interest_rib_cb(const XrlError& xrl_error);
void rib_register_shutdown();
void finder_deregister_interest_rib_cb(const XrlError& xrl_error);
void send_rib_add_tables();
void rib_client_send_add_igp_table4_cb(const XrlError& xrl_error);
void rib_client_send_add_igp_table6_cb(const XrlError& xrl_error);
void send_rib_delete_tables();
void rib_client_send_delete_igp_table4_cb(const XrlError& xrl_error);
void rib_client_send_delete_igp_table6_cb(const XrlError& xrl_error);
/**
* Inform the RIB about a route change.
*
* @param fib2mrib_route the route with the information about the change.
*/
void inform_rib_route_change(const Fib2mribRoute& fib2mrib_route);
/**
* Cancel a pending request to inform the RIB about a route change.
*
* @param fib2mrib_route the route with the request that would be canceled.
*/
void cancel_rib_route_change(const Fib2mribRoute& fib2mrib_route);
void send_rib_route_change();
void send_rib_route_change_cb(const XrlError& xrl_error);
const string& my_xrl_target_name() {
return XrlFib2mribTargetBase::name();
}
EventLoop& _eventloop;
const string _class_name;
const string _instance_name;
XrlFtiV0p2Client _xrl_fea_fti_client;
XrlFeaFibV0p1Client _xrl_fea_fib_client;
XrlRibV0p1Client _xrl_rib_client;
const string _finder_target;
const string _fea_target;
const string _rib_target;
IfMgrXrlMirror _ifmgr;
list<Fib2mribRoute> _inform_rib_queue;
XorpTimer _inform_rib_queue_timer;
XrlFinderEventNotifierV0p1Client _xrl_finder_client;
static const TimeVal RETRY_TIMEVAL;
bool _is_finder_alive;
bool _is_fea_alive;
bool _is_fea_registered;
bool _is_fea_registering;
bool _is_fea_deregistering;
XorpTimer _fea_register_startup_timer;
XorpTimer _fea_register_shutdown_timer;
bool _is_fea_have_ipv4_tested;
bool _is_fea_have_ipv6_tested;
bool _fea_have_ipv4;
bool _fea_have_ipv6;
bool _is_fea_fib_client4_registered;
bool _is_fea_fib_client6_registered;
XorpTimer _fea_fib_client_registration_timer;
bool _is_rib_alive;
bool _is_rib_registered;
bool _is_rib_registering;
bool _is_rib_deregistering;
bool _is_rib_igp_table4_registered;
bool _is_rib_igp_table6_registered;
XorpTimer _rib_register_startup_timer;
XorpTimer _rib_register_shutdown_timer;
XorpTimer _rib_igp_table_registration_timer;
};
#endif // __FIB2MRIB_XRL_FIB2MRIB_NODE_HH__
Generated by: pavlin on possum.icir.org on Thu Mar 9 04:43:38 2006, using kdoc $.