Source: ../../fea/fea_node.hh
|
|
|
|
// -*- c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t -*-
// Copyright (c) 2007-2009 XORP, Inc.
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License, Version 2, June
// 1991 as published by the Free Software Foundation. Redistribution
// and/or modification of this program under the terms of any other
// version of the GNU General Public License is not permitted.
//
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For more details,
// see the GNU General Public License, Version 2, a copy of which can be
// found in the XORP LICENSE.gpl file.
//
// XORP Inc, 2953 Bunker Hill Lane, Suite 204, Santa Clara, CA 95054, USA;
// http://xorp.net
// $XORP: xorp/fea/fea_node.hh,v 1.18 2009/01/05 18:30:49 jtc Exp $
#ifndef __FEA_FEA_NODE_HH__
#define __FEA_FEA_NODE_HH__
//
// FEA (Forwarding Engine Abstraction) node implementation.
//
#include "libxorp/profile.hh"
#include "fibconfig.hh"
#include "firewall_manager.hh"
#include "ifconfig.hh"
#include "io_link_manager.hh"
#include "io_ip_manager.hh"
#include "io_tcpudp_manager.hh"
#include "nexthop_port_mapper.hh"
class EventLoop;
class FeaIo;
/**
* @short The FEA (Forwarding Engine Abstraction) node class.
*
* There should be one node per FEA instance.
*/
class FeaNode {
public:
/**
* Constructor for a given event loop.
*
* @param eventloop the event loop to use.
* @param fea_io the FeaIo instance to use.
* @param is_dummy if true, then run the FEA in dummy mode.
*/
FeaNode(EventLoop& eventloop, FeaIo& fea_io, bool is_dummy);
/**
* Destructor
*/
virtual ~FeaNode();
/**
* Startup the service operation.
*
* @return XORP_OK on success, otherwise XORP_ERROR.
*/
int startup();
/**
* Shutdown the service operation.
*
* Gracefully shutdown the FEA.
*
* @return XORP_OK on success, otherwise XORP_ERROR.
*/
int shutdown();
/**
* Test whether the service is running.
*
* @return true if the service is still running, otherwise false.
*/
bool is_running() const;
/**
* Return true if the underlying system supports IPv4.
*
* @return true if the underlying system supports IPv4, otherwise false.
*/
bool have_ipv4() const;
/**
* Return true if the underlying system supports IPv6.
*
* @return true if the underlying system supports IPv6, otherwise false.
*/
bool have_ipv6() const;
/**
* Test if running in dummy mode.
*
* @return true if running in dummy mode, otherwise false.
*/
bool is_dummy() const { return _is_dummy; }
/**
* Get the event loop this service is added to.
*
* @return the event loop this service is added to.
*/
EventLoop& eventloop() { return (_eventloop); }
/**
* Get the Profile instance.
*
* @return a reference to the Profile instance.
* @see Profile.
*/
Profile& profile() { return (_profile); }
/**
* Get the NexthopPortMapper instance.
*
* @return a reference to the NexthopPortMapper instance.
* @see NexthopPortMapper.
*/
NexthopPortMapper& nexthop_port_mapper() { return (_nexthop_port_mapper); }
/**
* Get the IfConfig instance.
*
* @return a reference to the IfConfig instance.
* @see IfConfig.
*/
IfConfig& ifconfig() { return (_ifconfig); }
/**
* Get the FirewallManager instance.
*
* @return a reference to the FirewallManager instance.
* @see FirewallManager.
*/
FirewallManager& firewall_manager() { return (_firewall_manager); }
/**
* Get the FibConfig instance.
*
* @return a reference to the FibConfig instance.
* @see FibConfig.
*/
FibConfig& fibconfig() { return (_fibconfig); }
/**
* Get the IoLinkManager instance.
*
* @return a reference to the IoLinkManager instance.
* @see IoLinkManager.
*/
IoLinkManager& io_link_manager() { return (_io_link_manager); }
/**
* Get the IoIpManager instance.
*
* @return a reference to the IoIpManager instance.
* @see IoIpManager.
*/
IoIpManager& io_ip_manager() { return (_io_ip_manager); }
/**
* Get the IoTcpUdpManager instance.
*
* @return a reference to the IoTcpUdpManager instance.
* @see IoTcpUdpManager.
*/
IoTcpUdpManager& io_tcpudp_manager() { return (_io_tcpudp_manager); }
/**
* Register @ref FeaDataPlaneManager data plane manager.
*
* @param fea_data_plane_manager the data plane manager to register.
* @param is_exclusive if true, the manager is registered as the
* exclusive manager, otherwise is added to the list of managers.
* @return XORP_OK on success, otherwise XORP_ERROR.
*/
int register_data_plane_manager(FeaDataPlaneManager* fea_data_plane_manager,
bool is_exclusive);
/**
* Unregister @ref FeaDataPlaneManager data plane manager.
*
* @param fea_data_plane_manager the data plane manager to unregister.
* @return XORP_OK on success, otherwise XORP_ERROR.
*/
int unregister_data_plane_manager(FeaDataPlaneManager* fea_data_plane_manager);
/**
* Get the FEA I/O instance.
*
* @return reference to the FEA I/O instance.
*/
FeaIo& fea_io() { return (_fea_io); }
private:
/**
* Load the data plane managers.
*
* @param error_msg the error message (if error).
* @return XORP_OK on success, otherwise XORP_ERROR.
*/
int load_data_plane_managers(string& error_msg);
/**
* Unload the data plane managers.
*
* @param error_msg the error message (if error).
* @return XORP_OK on success, otherwise XORP_ERROR.
*/
int unload_data_plane_managers(string& error_msg);
EventLoop& _eventloop; // The event loop to use
bool _is_running; // True if the service is running
bool _is_dummy; // True if running in dummy node
Profile _profile; // Profile entity
NexthopPortMapper _nexthop_port_mapper; // Next-hop port mapper
IfConfig _ifconfig;
FirewallManager _firewall_manager;
FibConfig _fibconfig;
IoLinkManager _io_link_manager;
IoIpManager _io_ip_manager;
IoTcpUdpManager _io_tcpudp_manager;
list<FeaDataPlaneManager*> _fea_data_plane_managers;
FeaIo& _fea_io; // The FeaIo entry to use
};
#endif // __FEA_FEA_NODE_HH__
Generated by: pavlin on kobe.xorp.net on Wed Jan 7 19:10:56 2009, using kdoc 2.0a54+XORP.