///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1998, Microsoft Corp. All rights reserved.
//
// FILE
//
//    schema.cpp
//
// SYNOPSIS
//
//    Defines the schema for the PerfMon DLL.
//
// MODIFICATION HISTORY
//
//    09/09/1998    Original version.
//    11/30/1998    "No Record" and "Accounting Reponse" were reversed.
//    09/14/1999    Same as previous for per-client counters.
//    02/18/2000    Added support for proxy counters.
//
///////////////////////////////////////////////////////////////////////////////

#include <ias.h>
#include <iasperf.h>
#include <perflib.h>

//////////
// Callbacks used for populating the performance data.
//////////
VOID WINAPI AuthServerDataSource(PerfObjectType& sink);
VOID WINAPI AuthClientDataSource(PerfObjectType& sink);
VOID WINAPI AcctServerDataSource(PerfObjectType& sink);
VOID WINAPI AcctClientDataSource(PerfObjectType& sink);
VOID WINAPI AuthProxyDataSource(PerfObjectType& sink);
VOID WINAPI AcctProxyDataSource(PerfObjectType& sink);
VOID WINAPI AuthRemoteServerDataSource(PerfObjectType& sink);
VOID WINAPI AcctRemoteServerDataSource(PerfObjectType& sink);

//////////
// Computes the number of elements in an array.
//////////
#define ARRAY_ELEMENTS(a) (sizeof(a)/sizeof((a)[0]))

PerfCounterDef AUTH_SERVER_COUNTERS[] =
{
   {
      RADIUS_SRV_UP_TIME,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_SRV_RESET_TIME,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_SRV_INVALID_CLIENT,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_SRV_INVALID_CLIENT_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_MALFORMED_PACKET,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_BAD_AUTHENTICATOR,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_DROPPED_PACKET,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_UNKNOWN_TYPE,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_AUTH_ACCESS_REQUEST,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_AUTH_DUP_ACCESS_REQUEST,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_AUTH_ACCESS_ACCEPT,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_AUTH_ACCESS_REJECT,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_AUTH_ACCESS_CHALLENGE,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_RECEIVED,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_SENT,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_MALFORMED_PACKET_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_BAD_AUTHENTICATOR_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_DROPPED_PACKET_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_UNKNOWN_TYPE_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_AUTH_ACCESS_REQUEST_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_AUTH_DUP_ACCESS_REQUEST_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_AUTH_ACCESS_ACCEPT_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_AUTH_ACCESS_REJECT_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_AUTH_ACCESS_CHALLENGE_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_RECEIVED_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_SENT_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   }
};

PerfCounterDef AUTH_CLIENT_COUNTERS[] =
{
   {
      RADIUS_MALFORMED_PACKET,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_BAD_AUTHENTICATOR,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_DROPPED_PACKET,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_UNKNOWN_TYPE,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_AUTH_ACCESS_REQUEST,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_AUTH_DUP_ACCESS_REQUEST,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_AUTH_ACCESS_ACCEPT,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_AUTH_ACCESS_REJECT,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_AUTH_ACCESS_CHALLENGE,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_RECEIVED,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_SENT,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_MALFORMED_PACKET_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_BAD_AUTHENTICATOR_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_DROPPED_PACKET_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_UNKNOWN_TYPE_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_AUTH_ACCESS_REQUEST_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_AUTH_DUP_ACCESS_REQUEST_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_AUTH_ACCESS_ACCEPT_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_AUTH_ACCESS_REJECT_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_AUTH_ACCESS_CHALLENGE_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_RECEIVED_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_SENT_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   }
};

PerfCounterDef ACCT_SERVER_COUNTERS[] =
{
   {
      RADIUS_SRV_UP_TIME,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_SRV_RESET_TIME,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_SRV_INVALID_CLIENT,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_SRV_INVALID_CLIENT_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_MALFORMED_PACKET,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_BAD_AUTHENTICATOR,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_DROPPED_PACKET,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_UNKNOWN_TYPE,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_ACCT_REQUEST,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_ACCT_DUP_REQUEST,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_ACCT_NO_RECORD,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_ACCT_RESPONSE,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_RECEIVED,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_SENT,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_MALFORMED_PACKET_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_BAD_AUTHENTICATOR_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_DROPPED_PACKET_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_UNKNOWN_TYPE_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_ACCT_REQUEST_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_ACCT_DUP_REQUEST_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_ACCT_NO_RECORD_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_ACCT_RESPONSE_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_RECEIVED_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_SENT_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   }
};

PerfCounterDef ACCT_CLIENT_COUNTERS[] =
{
   {
      RADIUS_MALFORMED_PACKET,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_BAD_AUTHENTICATOR,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_DROPPED_PACKET,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_UNKNOWN_TYPE,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_ACCT_REQUEST,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_ACCT_DUP_REQUEST,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_ACCT_NO_RECORD,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_ACCT_RESPONSE,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_RECEIVED,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_SENT,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_MALFORMED_PACKET_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_BAD_AUTHENTICATOR_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_DROPPED_PACKET_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_UNKNOWN_TYPE_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_ACCT_REQUEST_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_ACCT_DUP_REQUEST_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_ACCT_NO_RECORD_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_ACCT_RESPONSE_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_RECEIVED_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_SENT_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   }
};

PerfCounterDef AUTH_PROXY_COUNTERS[] =
{
   {
      PROXY_INVALID_ADDRESS,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_INVALID_ADDRESS_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_AUTH_ACCESS_REQUEST,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_RETRANSMISSION,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_AUTH_ACCESS_ACCEPT,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_AUTH_ACCESS_REJECT,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_AUTH_ACCESS_CHALLENGE,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_UNKNOWN_TYPE,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_MALFORMED_PACKET,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_BAD_AUTHENTICATOR,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_DROPPED_PACKET,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_TIMEOUT,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_RECEIVED,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_PENDING,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_AUTH_ACCESS_REQUEST_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_RETRANSMISSION_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_AUTH_ACCESS_ACCEPT_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_AUTH_ACCESS_REJECT_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_AUTH_ACCESS_CHALLENGE_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_UNKNOWN_TYPE_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_MALFORMED_PACKET_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_BAD_AUTHENTICATOR_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_DROPPED_PACKET_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_TIMEOUT_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_RECEIVED_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   }
};

PerfCounterDef ACCT_PROXY_COUNTERS[] =
{
   {
      PROXY_INVALID_ADDRESS,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_INVALID_ADDRESS_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_ACCT_REQUEST,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_RETRANSMISSION,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_ACCT_RESPONSE,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_UNKNOWN_TYPE,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_MALFORMED_PACKET,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_BAD_AUTHENTICATOR,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_DROPPED_PACKET,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_TIMEOUT,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_RECEIVED,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_PENDING,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_ACCT_REQUEST_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_RETRANSMISSION_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_ACCT_RESPONSE_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_UNKNOWN_TYPE_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_MALFORMED_PACKET_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_BAD_AUTHENTICATOR_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_DROPPED_PACKET_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_TIMEOUT_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_RECEIVED_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   }
};

PerfCounterDef REMOTE_AUTH_SRV_COUNTERS[] =
{
   {
      PROXY_REMSRV_PORT,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_REMSRV_ROUND_TRIP,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_AUTH_ACCESS_REQUEST,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_RETRANSMISSION,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_AUTH_ACCESS_ACCEPT,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_AUTH_ACCESS_REJECT,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_AUTH_ACCESS_CHALLENGE,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_UNKNOWN_TYPE,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_MALFORMED_PACKET,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_BAD_AUTHENTICATOR,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_DROPPED_PACKET,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_TIMEOUT,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_RECEIVED,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_PENDING,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_AUTH_ACCESS_REQUEST_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_RETRANSMISSION_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_AUTH_ACCESS_ACCEPT_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_AUTH_ACCESS_REJECT_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_AUTH_ACCESS_CHALLENGE_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_UNKNOWN_TYPE_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_MALFORMED_PACKET_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_BAD_AUTHENTICATOR_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_DROPPED_PACKET_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_TIMEOUT_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_RECEIVED_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   }
};

PerfCounterDef REMOTE_ACCT_SRV_COUNTERS[] =
{
   {
      PROXY_REMSRV_PORT,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_REMSRV_ROUND_TRIP,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_ACCT_REQUEST,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_RETRANSMISSION,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_ACCT_RESPONSE,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_UNKNOWN_TYPE,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_MALFORMED_PACKET,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_BAD_AUTHENTICATOR,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_DROPPED_PACKET,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_TIMEOUT,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_RECEIVED,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_PENDING,
      PERF_COUNTER_RAWCOUNT,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_ACCT_REQUEST_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_RETRANSMISSION_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_ACCT_RESPONSE_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_UNKNOWN_TYPE_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_MALFORMED_PACKET_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_BAD_AUTHENTICATOR_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_DROPPED_PACKET_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      PROXY_TIMEOUT_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   },
   {
      RADIUS_PACKETS_RECEIVED_RATE,
      PERF_COUNTER_COUNTER,
      0,
      PERF_DETAIL_NOVICE
   }
};


PerfObjectTypeDef PERF_OBJECTS[] =
{
   {
      RADIUS_AUTH_SERVER_OBJECT,
      ARRAY_ELEMENTS(AUTH_SERVER_COUNTERS),
      AUTH_SERVER_COUNTERS,
      AuthServerDataSource,
      FALSE,
      -1
   },
   {
      RADIUS_AUTH_CLIENT_OBJECT,
      ARRAY_ELEMENTS(AUTH_CLIENT_COUNTERS),
      AUTH_CLIENT_COUNTERS,
      AuthClientDataSource,
      TRUE,
      -1
   },
   {
      RADIUS_ACCT_SERVER_OBJECT,
      ARRAY_ELEMENTS(ACCT_SERVER_COUNTERS),
      ACCT_SERVER_COUNTERS,
      AcctServerDataSource,
      FALSE,
      -1
   },
   {
      RADIUS_ACCT_CLIENT_OBJECT,
      ARRAY_ELEMENTS(ACCT_CLIENT_COUNTERS),
      ACCT_CLIENT_COUNTERS,
      AcctClientDataSource,
      TRUE,
      -1
   },
   {
      PROXY_AUTH_PROXY_OBJECT,
      ARRAY_ELEMENTS(AUTH_PROXY_COUNTERS),
      AUTH_PROXY_COUNTERS,
      AuthProxyDataSource,
      FALSE,
      -1
   },
   {
      PROXY_AUTH_REMSRV_OBJECT,
      ARRAY_ELEMENTS(REMOTE_AUTH_SRV_COUNTERS),
      REMOTE_AUTH_SRV_COUNTERS,
      AuthRemoteServerDataSource,
      TRUE,
      -1
   },
   {
      PROXY_ACCT_PROXY_OBJECT,
      ARRAY_ELEMENTS(ACCT_PROXY_COUNTERS),
      ACCT_PROXY_COUNTERS,
      AcctProxyDataSource,
      FALSE,
      -1
   },
   {
      PROXY_ACCT_REMSRV_OBJECT,
      ARRAY_ELEMENTS(REMOTE_ACCT_SRV_COUNTERS),
      REMOTE_ACCT_SRV_COUNTERS,
      AcctRemoteServerDataSource,
      TRUE,
      -1
   }
};

PerfCollectorDef PERF_SCHEMA =
{
   L"IAS",
   ARRAY_ELEMENTS(PERF_OBJECTS),
   PERF_OBJECTS
};
