Source: ../../rtrmgr/xorpsh_main.hh


 
LOGO
 Annotated List  Files  Globals  Hierarchy  Index  Top
// -*- 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/rtrmgr/xorpsh_main.hh,v 1.20 2005/03/25 02:54:41 pavlin 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"


class OpCommandList;
class RouterCLI;
class SlaveConfigTree;
class TemplateTree;

class XorpShell {
    typedef XorpCallback2<void, bool, string>::RefPtr CallBack;

public:
    XorpShell(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();
    enum Mode {
	MODE_AUTHENTICATING, 
	MODE_INITIALIZING, 
	MODE_IDLE, 
	MODE_COMMITTING, 
	MODE_LOADING,
	MODE_SHUTDOWN
    };

    void set_mode(Mode mode) { _mode = mode; }
    
    void register_done(const XrlError& e, const string* token,
		       const uint32_t* pid);
    void generic_done(const XrlError& e);
    void request_config();
    void receive_config(const XrlError& e, const bool* ready,
			const string* config);

    typedef XorpCallback1<void, const XrlError&>::RefPtr GENERIC_CALLBACK;
    void enter_config_mode(bool exclusive, GENERIC_CALLBACK cb);

    void leave_config_mode(GENERIC_CALLBACK cb);

    typedef XorpCallback3<void, const XrlError&, 
			  const bool*,
			  const uint32_t*>::RefPtr LOCK_CALLBACK;
    void lock_config(LOCK_CALLBACK cb);

    void commit_changes(const string& deltas, const string& deletions,
			GENERIC_CALLBACK cb,
			CallBack final_cb);
    void commit_done(bool success, const string& errmsg);

    void unlock_config(GENERIC_CALLBACK cb);

    typedef XorpCallback2<void, const XrlError&,
			  const XrlAtomList*>::RefPtr GET_USERS_CALLBACK;
    void get_config_users(GET_USERS_CALLBACK cb);

    void new_config_user(uid_t user_id);

    void save_to_file(const string& filename, GENERIC_CALLBACK cb);

    void 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& modname, 
			      GenericModule::ModuleStatus status);

    typedef XorpCallback2<void, const XrlError&, 
			  const uint32_t*>::RefPtr PID_CALLBACK;
    void get_rtrmgr_pid(PID_CALLBACK cb);

    EventLoop& eventloop()		{ return _eventloop; }
    SlaveConfigTree* config_tree()	{ return _ct; }
    TemplateTree* template_tree()	{ return _tt; }
    OpCommandList* op_cmd_list()	{ return _ocl; }
    XorpClient& xorp_client()		{ return _xclient; }
    const string& xorp_root_dir() const	{ return _xorp_root_dir; }
    bool verbose() const		{ return _verbose; }
    uint32_t rtrmgr_pid() const		{ return _rtrmgr_pid; }

private:
    EventLoop		_eventloop; 
    XrlStdRouter	_xrlrouter;
    XorpClient		_xclient;
    XrlRtrmgrV0p1Client	_rtrmgr_client;
    XrlXorpshInterface	_xorpsh_interface;
    SlaveModuleManager _mmgr;

    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		_done;	// Used to move through the startup process
    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

    uint32_t		_rtrmgr_pid;

    XorpTimer           _repeat_request_timer;
};

#endif // __RTRMGR_XORPSH_MAIN_HH__

Generated by: pavlin on possum.icir.org on Wed Apr 13 21:53:23 2005, using kdoc $.