440 lines
8.4 KiB
C
440 lines
8.4 KiB
C
|
#ifndef _MNLBHOST_H
|
||
|
#define _MNLBHOST_H
|
||
|
//
|
||
|
// Copyright (c) Microsoft. All Rights Reserved
|
||
|
//
|
||
|
// THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF Microsoft.
|
||
|
// The copyright notice above does not evidence any
|
||
|
// actual or intended publication of such source code.
|
||
|
//
|
||
|
// OneLiner : MNLBHost interface.
|
||
|
// DevUnit : wlbstest
|
||
|
// Author : Murtaza Hakim
|
||
|
//
|
||
|
// Description:
|
||
|
// -----------
|
||
|
|
||
|
|
||
|
// Include Files
|
||
|
#include <vector>
|
||
|
#include <wbemidl.h>
|
||
|
#include <comdef.h>
|
||
|
|
||
|
#include "MWmiObject.h"
|
||
|
#include "MWmiInstance.h"
|
||
|
|
||
|
#include "Common.h"
|
||
|
|
||
|
// forward declarations.
|
||
|
//
|
||
|
class MNLBCluster;
|
||
|
|
||
|
class MNLBPortRule;
|
||
|
|
||
|
class MNLBPortRuleLoadBalanced;
|
||
|
|
||
|
class MNLBPortRuleFailover;
|
||
|
|
||
|
class MNLBPortRuleDisabled;
|
||
|
|
||
|
|
||
|
using namespace std;
|
||
|
|
||
|
|
||
|
//
|
||
|
class MNLBHost
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
enum MNLBHost_Error
|
||
|
{
|
||
|
MNLBHost_SUCCESS = 0,
|
||
|
|
||
|
COM_FAILURE = 1,
|
||
|
CONNECT_FAILED = 2,
|
||
|
NO_CLUSTER = 3,
|
||
|
UNCONSTRUCTED = 4,
|
||
|
|
||
|
};
|
||
|
|
||
|
//
|
||
|
// Description:
|
||
|
// -----------
|
||
|
// constructor.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// ----------
|
||
|
// cip IN : cluster ip address of host.
|
||
|
// hID IN : host id.
|
||
|
//
|
||
|
// Returns:
|
||
|
// -------
|
||
|
// none.
|
||
|
|
||
|
MNLBHost( _bstr_t cip,
|
||
|
int hID );
|
||
|
|
||
|
//
|
||
|
// Description:
|
||
|
// -----------
|
||
|
// default constructor.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// ----------
|
||
|
// none.
|
||
|
//
|
||
|
// Returns:
|
||
|
// -------
|
||
|
// none.
|
||
|
|
||
|
MNLBHost();
|
||
|
|
||
|
//
|
||
|
// Description:
|
||
|
// -----------
|
||
|
// copy constructor.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// ----------
|
||
|
// mhost IN : object to copy.
|
||
|
//
|
||
|
// Returns:
|
||
|
// -------
|
||
|
// none.
|
||
|
|
||
|
MNLBHost(const MNLBHost& mhost);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Description:
|
||
|
// -----------
|
||
|
// assignment operator
|
||
|
//
|
||
|
// Parameters:
|
||
|
// ----------
|
||
|
// rhs IN : object to assign.
|
||
|
//
|
||
|
// Returns:
|
||
|
// -------
|
||
|
// self
|
||
|
|
||
|
MNLBHost&
|
||
|
operator=( const MNLBHost& rhs );
|
||
|
|
||
|
|
||
|
//
|
||
|
// Description:
|
||
|
// -----------
|
||
|
// destructor
|
||
|
//
|
||
|
// Parameters:
|
||
|
// ----------
|
||
|
// none
|
||
|
//
|
||
|
// Returns:
|
||
|
// -------
|
||
|
// none.
|
||
|
|
||
|
~MNLBHost();
|
||
|
|
||
|
|
||
|
//
|
||
|
// Description:
|
||
|
// -----------
|
||
|
// refreshes the wmi connection to the host
|
||
|
//
|
||
|
// Parameters:
|
||
|
// ----------
|
||
|
// none
|
||
|
//
|
||
|
// Returns:
|
||
|
// -------
|
||
|
// SUCCESS else error code.
|
||
|
MNLBHost_Error
|
||
|
refreshConnection();
|
||
|
|
||
|
//
|
||
|
// Description:
|
||
|
// -----------
|
||
|
// gets the host properties.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// ----------
|
||
|
// hp OUT : host properties.
|
||
|
//
|
||
|
// Returns:
|
||
|
// -------
|
||
|
// SUCCESS else error code.
|
||
|
|
||
|
MNLBHost_Error
|
||
|
getHostProperties( HostProperties* hp );
|
||
|
|
||
|
//
|
||
|
// Description:
|
||
|
// -----------
|
||
|
// gets the cluster which this host is member of.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// ----------
|
||
|
// cluster OUT : cluster which this host is member of.
|
||
|
//
|
||
|
// Returns:
|
||
|
// -------
|
||
|
// SUCCESS else error code.
|
||
|
|
||
|
MNLBHost_Error
|
||
|
getCluster( MNLBCluster* cluster);
|
||
|
|
||
|
//
|
||
|
// Description:
|
||
|
// -----------
|
||
|
// get the load balanced port rules associated with this host.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// ----------
|
||
|
// portsLB OUT : load balanced port rules associated with this node.
|
||
|
//
|
||
|
// Returns:
|
||
|
// -------
|
||
|
// SUCCESS else error code.
|
||
|
|
||
|
|
||
|
MNLBHost::MNLBHost_Error
|
||
|
MNLBHost::getPortRulesLoadBalanced( vector<MNLBPortRuleLoadBalanced>* portsLB );
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Description:
|
||
|
// -----------
|
||
|
// get the failover port rules associated with this host.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// ----------
|
||
|
// portsF OUT : failover port rules associated with this node.
|
||
|
//
|
||
|
// Returns:
|
||
|
// -------
|
||
|
// SUCCESS else error code.
|
||
|
|
||
|
MNLBHost::MNLBHost_Error
|
||
|
MNLBHost::getPortRulesFailover( vector<MNLBPortRuleFailover>* portsF );
|
||
|
|
||
|
|
||
|
//
|
||
|
// Description:
|
||
|
// -----------
|
||
|
// get the disabled port rules associated with this host.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// ----------
|
||
|
// portsD OUT : failover port rules associated with this node.
|
||
|
//
|
||
|
// Returns:
|
||
|
// -------
|
||
|
// SUCCESS else error code.
|
||
|
|
||
|
MNLBHost::MNLBHost_Error
|
||
|
MNLBHost::getPortRulesDisabled( vector<MNLBPortRuleDisabled>* portsD );
|
||
|
|
||
|
|
||
|
//
|
||
|
// Description:
|
||
|
// -----------
|
||
|
// starts host operations.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// ----------
|
||
|
// retVal OUT : return value of method ran.
|
||
|
//
|
||
|
// Returns:
|
||
|
// -------
|
||
|
// SUCCESS else error code.
|
||
|
|
||
|
MNLBHost_Error
|
||
|
start( unsigned long* retVal );
|
||
|
|
||
|
|
||
|
//
|
||
|
// Description:
|
||
|
// -----------
|
||
|
// stops host operations.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// ----------
|
||
|
// retVal OUT : return value of method ran.
|
||
|
//
|
||
|
// Returns:
|
||
|
// -------
|
||
|
// SUCCESS else error code.
|
||
|
|
||
|
MNLBHost_Error
|
||
|
stop( unsigned long* retVal );
|
||
|
|
||
|
//
|
||
|
// Description:
|
||
|
// -----------
|
||
|
// resume control over host operations.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// ----------
|
||
|
// retVal OUT : return value of method ran.
|
||
|
//
|
||
|
// Returns:
|
||
|
// -------
|
||
|
// SUCCESS else error code.
|
||
|
|
||
|
MNLBHost_Error
|
||
|
resume( unsigned long* retVal );
|
||
|
|
||
|
//
|
||
|
// Description:
|
||
|
// -----------
|
||
|
// suspend control over host operations.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// ----------
|
||
|
// retVal OUT : return value of method ran.
|
||
|
//
|
||
|
// Returns:
|
||
|
// -------
|
||
|
// SUCCESS else error code.
|
||
|
|
||
|
MNLBHost_Error
|
||
|
suspend( unsigned long* retVal );
|
||
|
|
||
|
//
|
||
|
// Description:
|
||
|
// -----------
|
||
|
// finishes all existing connections and
|
||
|
// stops host operations.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// ----------
|
||
|
// retVal OUT : return value of method ran.
|
||
|
//
|
||
|
// Returns:
|
||
|
// -------
|
||
|
// SUCCESS else error code.
|
||
|
|
||
|
MNLBHost_Error
|
||
|
drainstop( unsigned long* retVal );
|
||
|
|
||
|
//
|
||
|
// Description:
|
||
|
// -----------
|
||
|
// enables traffic for port rule.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// ----------
|
||
|
// retVal OUT : return value of method ran.
|
||
|
// port IN : port to affect.
|
||
|
//
|
||
|
// Returns:
|
||
|
// -------
|
||
|
// SUCCESS else error code.
|
||
|
|
||
|
MNLBHost_Error
|
||
|
enable( unsigned long* retVal, unsigned long port = Common::ALL_PORTS );
|
||
|
|
||
|
//
|
||
|
// Description:
|
||
|
// -----------
|
||
|
// disables ALL traffic for port rule.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// ----------
|
||
|
// retVal OUT : return value of method ran.
|
||
|
// port IN : port to affect.
|
||
|
//
|
||
|
// Returns:
|
||
|
// -------
|
||
|
// SUCCESS else error code.
|
||
|
|
||
|
MNLBHost_Error
|
||
|
disable( unsigned long* retVal, unsigned long port = Common::ALL_PORTS );
|
||
|
|
||
|
//
|
||
|
// Description:
|
||
|
// -----------
|
||
|
// drains NEW traffic for port rule.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// ----------
|
||
|
// retVal OUT : return value of method ran.
|
||
|
// port IN : port to affect.
|
||
|
//
|
||
|
// Returns:
|
||
|
// -------
|
||
|
// SUCCESS else error code.
|
||
|
|
||
|
MNLBHost_Error
|
||
|
drain( unsigned long* retVal, unsigned long port = Common::ALL_PORTS );
|
||
|
|
||
|
|
||
|
MNLBHost_Error
|
||
|
getHostIP();
|
||
|
|
||
|
private:
|
||
|
|
||
|
_bstr_t hostIP;
|
||
|
|
||
|
// wchar_t hostIDOfConnectedMachine[100];
|
||
|
|
||
|
_bstr_t clusterIP;
|
||
|
|
||
|
int hostID;
|
||
|
|
||
|
bool connectedToAny;
|
||
|
|
||
|
MNLBHost_Error status;
|
||
|
|
||
|
auto_ptr<MWmiObject> p_machine;
|
||
|
|
||
|
auto_ptr<MWmiInstance> p_host;
|
||
|
|
||
|
MNLBHost_Error
|
||
|
connectToExactHost();
|
||
|
|
||
|
MNLBHost_Error
|
||
|
connectToAnyHost();
|
||
|
|
||
|
|
||
|
MNLBHost::MNLBHost_Error
|
||
|
MNLBHost::getPortRulesLoadBalanced_private( vector<MNLBPortRuleLoadBalanced>* portsLB,
|
||
|
vector<MWmiInstance>* instances );
|
||
|
|
||
|
MNLBHost::MNLBHost_Error
|
||
|
MNLBHost::getPortRulesFailover_private( vector<MNLBPortRuleFailover>* portsF,
|
||
|
vector<MWmiInstance>* instances );
|
||
|
|
||
|
MNLBHost::MNLBHost_Error
|
||
|
MNLBHost::getPortRulesDisabled_private( vector<MNLBPortRuleDisabled>* portsD,
|
||
|
vector<MWmiInstance>* instances );
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
friend MNLBCluster;
|
||
|
|
||
|
friend MNLBPortRule;
|
||
|
|
||
|
friend MNLBPortRuleLoadBalanced;
|
||
|
|
||
|
friend MNLBPortRuleFailover;
|
||
|
|
||
|
friend MNLBPortRuleDisabled;
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
//
|
||
|
// Ensure type safety
|
||
|
|
||
|
typedef class MNLBHost MNLBHost;
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|