Source: ../../rtrmgr/xorpsh_main.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/rtrmgr/xorpsh_main.hh,v 1.38 2009/01/05 18:31:10 jtc Exp $
#ifndef __RTRMGR_XORPSH_MAIN_HH__
#define __RTRMGR_XORPSH_MAIN_HH__
#include "libxorp/eventloop.hh"
#include "libxipc/xrl_std_router.hh"
#include "cli/cli_node.hh"
#include "xrl/interfaces/rtrmgr_xif.hh"
#include "rtrmgr_error.hh"
#include "xorp_client.hh"
#include "xrl_xorpsh_interface.hh"
#include "slave_module_manager.hh"
#include "xorpsh_base.hh"
class OpCommandList;
class RouterCLI;
class SlaveConfigTree;
class TemplateTree;
class XorpShell : public XorpShellBase, XrlStdRouter {
public:
XorpShell(EventLoop& eventloop,
const string& IPCname,
const string& xorp_root_dir,
const string& config_template_dir,
const string& xrl_targets_dir,
bool verbose) throw (InitError);
~XorpShell();
void run(const string& command, bool exit_on_error);
bool done() const;
void set_mode(Mode mode) { _mode = mode; }
void register_done(const XrlError& e, const string* token,
const uint32_t* pid, const uint32_t* clientid);
void generic_done(const XrlError& e);
#if 0
bool request_config();
void receive_config(const XrlError& e, const bool* ready,
const string* config);
#endif
bool enter_config_mode(bool exclusive, GENERIC_CALLBACK cb);
bool leave_config_mode(GENERIC_CALLBACK cb);
bool lock_config(LOCK_CALLBACK cb);
void config_saved_done(bool success, const string& error_msg);
bool commit_changes(const string& deltas, const string& deletions,
GENERIC_CALLBACK cb,
CallBack final_cb);
void commit_done(bool success, const string& error_msg);
bool unlock_config(GENERIC_CALLBACK cb);
bool get_config_users(GET_USERS_CALLBACK cb);
void new_config_user(uid_t user_id);
bool save_to_file(const string& filename, GENERIC_CALLBACK cb,
CallBack final_cb);
void save_lock_achieved(const XrlError& e, const bool* locked,
const uint32_t* lock_holder,
const string filename,
GENERIC_CALLBACK cb);
bool load_from_file(const string& filename, GENERIC_CALLBACK cb,
CallBack final_cb);
void load_lock_achieved(const XrlError& e, const bool* locked,
const uint32_t* lock_holder,
const string filename,
GENERIC_CALLBACK cb);
void config_changed(uid_t user_id, const string& deltas,
const string& deletions);
void module_status_change(const string& module_name,
GenericModule::ModuleStatus status);
bool get_rtrmgr_pid(PID_CALLBACK cb);
EventLoop& eventloop() { return _eventloop; }
OpCommandList* op_cmd_list() { return _ocl; }
SlaveConfigTree* config_tree() { return _ct; }
TemplateTree* template_tree() { return _tt; }
uint32_t clientid() const { return _clientid; }
uint32_t rtrmgr_pid() const { return _rtrmgr_pid; }
XorpClient& xorp_client() { return _xclient; }
const string& xorp_root_dir() const { return _xorp_root_dir; }
bool verbose() const { return _verbose; }
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();
EventLoop& _eventloop;
XrlStdRouter& _xrl_router;
XorpClient _xclient;
XrlRtrmgrV0p1Client _rtrmgr_client;
SlaveModuleManager _mmgr;
bool _is_connected_to_finder;
TemplateTree* _tt;
SlaveConfigTree* _ct;
OpCommandList* _ocl;
CliNode _cli_node;
RouterCLI* _router_cli;
string _xorp_root_dir; // The root of the XORP tree
bool _verbose; // Set to true if output is verbose
string _ipc_name;
string _authfile;
string _authtoken;
bool _got_config;
bool _got_modules;
string _configuration;
bool _xrl_generic_done; // XRL startup/shutdown flag
Mode _mode;
// Used to store the callback during a commit until we get called
// with the response
CallBack _commit_callback;
string _commit_status; // Used for transient storage of error
// messages from commit
// Used to store the callback during saving a file until we get called
// with the response
CallBack _config_save_callback;
string _save_status; // Used for transient storage of error
// messages from saving the config
uint32_t _rtrmgr_pid;
uint32_t _clientid;
XorpTimer _repeat_request_timer;
#ifndef HOST_OS_WINDOWS
XorpFd _fddesc[2];
#endif
// XXX: must be last
XrlXorpshInterface _xorpsh_interface;
};
#endif // __RTRMGR_XORPSH_MAIN_HH__
Generated by: pavlin on kobe.xorp.net on Wed Jan 7 19:11:12 2009, using kdoc 2.0a54+XORP.