Source: ../../cli/xrl_cli_node.hh
|
|
|
|
// -*- c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t -*-
// Copyright (c) 2001-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/cli/xrl_cli_node.hh,v 1.26 2009/01/05 18:30:45 jtc Exp $
#ifndef __CLI_XRL_CLI_NODE_HH__
#define __CLI_XRL_CLI_NODE_HH__
#include <string>
#include "libxorp/xlog.h"
#include "libxipc/xrl_std_router.hh"
#include "xrl/targets/cli_base.hh"
#include "xrl/interfaces/cli_processor_xif.hh"
#include "cli_node.hh"
//
// TODO: XrlCliProcessorV1p0Client should NOT be a base class. Temp. solution..
//
class XrlCliNode : public XrlStdRouter,
public XrlCliTargetBase {
public:
XrlCliNode(EventLoop& eventloop,
const string& class_name,
const string& finder_hostname,
uint16_t finder_port,
const string& finder_target,
CliNode& cli_node);
virtual ~XrlCliNode() {}
//
// XrlCliNode front-end interface
//
int enable_cli();
int disable_cli();
int start_cli();
int stop_cli();
/**
* Get a reference to the XrlRouter instance.
*
* @return a reference to the XrlRouter (@ref XrlRouter) instance.
*/
XrlRouter& xrl_router() { return *this; }
/**
* Get a const reference to the XrlRouter instance.
*
* @return a const reference to the XrlRouter (@ref XrlRouter) instance.
*/
const XrlRouter& xrl_router() const { return *this; }
protected:
//
// Methods to be implemented by derived classes supporting this interface.
//
/**
* Get name of Xrl Target
*/
virtual XrlCmdError common_0_1_get_target_name(
// Output values,
string& name);
/**
* Get version string from Xrl Target
*/
virtual XrlCmdError common_0_1_get_version(
// Output values,
string& version);
/**
* Get status from Xrl Target
*/
virtual XrlCmdError common_0_1_get_status(
// Output values,
uint32_t& status,
string& reason);
/**
* Shutdown cleanly
*/
virtual XrlCmdError common_0_1_shutdown();
/**
* Enable/disable/start/stop the CLI.
*
* @param enable if true, then enable the CLI, otherwise disable it.
*/
virtual XrlCmdError cli_manager_0_1_enable_cli(
// Input values,
const bool& enable);
virtual XrlCmdError cli_manager_0_1_start_cli();
virtual XrlCmdError cli_manager_0_1_stop_cli();
/**
* Add a subnet address to the list of subnet addresses enabled for CLI
* access. This method can be called more than once to add a number of
* subnet addresses.
*
* @param subnet_addr the subnet address to add.
*/
virtual XrlCmdError cli_manager_0_1_add_enable_cli_access_from_subnet4(
// Input values,
const IPv4Net& subnet_addr);
virtual XrlCmdError cli_manager_0_1_add_enable_cli_access_from_subnet6(
// Input values,
const IPv6Net& subnet_addr);
/**
* Delete a subnet address from the list of subnet addresses enabled for
* CLI access.
*
* @param subnet_addr the subnet address to delete.
*/
virtual XrlCmdError cli_manager_0_1_delete_enable_cli_access_from_subnet4(
// Input values,
const IPv4Net& subnet_addr);
virtual XrlCmdError cli_manager_0_1_delete_enable_cli_access_from_subnet6(
// Input values,
const IPv6Net& subnet_addr);
/**
* Add a subnet address to the list of subnet addresses disabled for CLI
* access. This method can be called more than once to add a number of
* subnet addresses.
*
* @param subnet_addr the subnet address to add.
*/
virtual XrlCmdError cli_manager_0_1_add_disable_cli_access_from_subnet4(
// Input values,
const IPv4Net& subnet_addr);
virtual XrlCmdError cli_manager_0_1_add_disable_cli_access_from_subnet6(
// Input values,
const IPv6Net& subnet_addr);
/**
* Delete a subnet address from the list of subnet addresses disabled for
* CLI access.
*
* @param subnet_addr the subnet address to delete.
*/
virtual XrlCmdError cli_manager_0_1_delete_disable_cli_access_from_subnet4(
// Input values,
const IPv4Net& subnet_addr);
virtual XrlCmdError cli_manager_0_1_delete_disable_cli_access_from_subnet6(
// Input values,
const IPv6Net& subnet_addr);
/**
* Add a CLI command to the CLI manager
*
* @param processor_name the name of the module that will process that
* command.
*
* @param command_name the name of the command to add.
*
* @param command_help the help for the command to add.
*
* @param is_command_cd is true, the string that will replace the CLI
* prompt after we "cd" to that level of the CLI command-tree.
*
* @param command_cd_prompt if
*
* @param is_command_processor if true, this is a processing command that
* would be performed by processor_name.
*/
virtual XrlCmdError cli_manager_0_1_add_cli_command(
// Input values,
const string& processor_name,
const string& command_name,
const string& command_help,
const bool& is_command_cd,
const string& command_cd_prompt,
const bool& is_command_processor);
/**
* Delete a CLI command from the CLI manager
*
* @param processor_name the name of the module that sends the request.
*
* @param command_name the name of the command to delete.
*/
virtual XrlCmdError cli_manager_0_1_delete_cli_command(
// Input values,
const string& processor_name,
const string& command_name);
//
// The CLI client-side (i.e., the CLI sending XRLs)
//
void send_process_command(const string& target,
const string& processor_name,
const string& cli_term_name,
uint32_t cli_session_id,
const vector<string>& command_global_name,
const vector<string>& command_argv);
void recv_process_command_output(const XrlError& xrl_error,
const string *processor_name,
const string *cli_term_name,
const uint32_t *cli_session_id,
const string *command_output);
private:
/**
* 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();
CliNode& cli_node() const { return (_cli_node); }
EventLoop& _eventloop;
CliNode& _cli_node;
XrlCliProcessorV0p1Client _xrl_cli_processor_client;
bool _is_finder_alive;
};
#endif // __CLI_XRL_CLI_NODE_HH__
Generated by: pavlin on kobe.xorp.net on Wed Jan 7 19:10:53 2009, using kdoc 2.0a54+XORP.