#pragma namespace ( "\\\\.\\root\\dhcp" ) 

[
    description(""), 
    singleton: DisableOverride ToInstance ToSubClass, 
    dynamic: ToInstance, 
    provider("MS_NT_DHCP_PROVIDER")
]
class DHCP_Server
{
    [
        read, 
        description("This variable indicates the number of\n\t\t\t nacks sent")
    ] 
    uint32 TotalNoOfNacks;

    [
        read, 
        description("This variable indicates the number of\n\t\t\t offers sent")
    ] 
    uint32 TotalNoOfOffers;

    [
        read, 
        description("This variable indicates the number of\n\t\t\t declines received")
    ] 
    uint32 TotalNoOfDeclines;

    [
        read, 
        description("This variable indicates the number of\n\t\t\t releases received")
    ] 
    uint32 TotalNoOfReleases;

    [
        read, 
        description("This variable indicates the number of\n\t\t\t requests received")
    ] 
    uint32 TotalNoOfRequests;

    [
        read, 
        description("This variable indicates the number of\n\t\t\t discovery messages received")
    ] 
    uint32 TotalNoOfDiscovers;

    [
        read, 
        description("This variable indicates the DHCP server start time")
    ] 
    string StartTime;

    [
        read, 
        description("This variable indicates the number of\n\t\t\t acks received")
    ] 
    uint32 TotalNoOfAcks;

    [
        read,
        description("This variable indicates the version of the DHCP server")
    ]
    string ServerVersion;

    [
        read,
        description("This variable indicates the API protocol supported by the DHCP server")
    ]
    uint32 APIProtocol;

    [
        read,write,
        description("This variable indicates the name of the database file")
    ]
    string DatabaseName; 

    [
        read,write,
        description("This variable indicates the path to the database file")
    ]
    string DatabasePath;

    [
        read,write,
        description("This variable indicates the path to the backup database")
    ]
    string BackupPath;

    [
        read,write,
        description("This variable indicates the interval backups are done")
    ]
    uint32 BackupInterval;

    [
        read,write,
        description("This variable indicates the flags controlling the database logging")
    ]
    uint32 DatabaseLoggingFlag;

    [
        read,write,
        description("RestoreFlag")
    ]
    uint32 RestoreFlag;

    [
        read,write,
        description("This variable indicates the interval the database is cleaned up")
    ]
    uint32 DatabaseCleanupInterval;

    [
        read,write,
        description("This variable indicates the flags controlling the debug output levels")
    ]
    uint32 DebugFlag;

    [
        read,write,
        description("This variable indicates the number of ping retries")
    ]
    uint32 PingRetries;

    [
        read,write,
        description("This variable indicates the bootfile table")
    ]
    string BootFileTable;

    [
        read,write,
        description("This variable indicates the activity log state")
    ]
    boolean AuditLog;

    [
        implemented,
        description ( "This method allows setting the APIProtocol parameter" )
    ]
    uint32 SetAPIProtocol ( [in] uint32 APIProtocol);

    [
        implemented,
        description ( "This method allows setting the database file name" )
    ]
    uint32 SetDatabaseName ( [in] string DatabaseName);

    [
        implemented,
        description ( "This method allows setting the path to the database file" )
    ]
    uint32 SetDatabasePath ( [in] string DatabasePath);

    [
        implemented,
        description ( "This method allows setting the path to the backup directory" )
    ]
    uint32 SetBackupPath ( [in] string BackupPath);

    [
        implemented,
        description ( "This method allows setting the backup time interval (in seconds)" )
    ]
    uint32 SetBackupInterval ( [in] uint32 BackupInterval);

    [
        implemented,
        description ( "This method allows setting the database logging flag" )
    ]
    uint32 SetDatabaseLoggingFlag ( [in] uint32 DatabaseLoggingFlag);

    [
        implemented,
        description ( "This method allows setting the restore flag" )
    ]
    uint32 SetRestoreFlag ( [in] uint32 RestoreFlag);

    [
        implemented,
        description ( "This method allows setting the database cleanup interval (in seconds)" )
    ]
    uint32 SetDatabaseCleanupInterval ( [in] uint32 DatabaseCleanupInterval);

    [
        implemented,
        description ( "This method allows setting the debug flag" )
    ]
    uint32 SetDebugFlag ( [in] uint32 DebugFlag);


    [
        implemented,
        description ( "This method allows setting the number of ping retries" )
    ]
    uint32 SetPingRetries ( [in] uint32 PingRetries);


    [
        implemented,
        description ( "This method allows setting the boot file table" )
    ]
    uint32 SetBootFileTable ( [in] string BootFileTable);

    [
        implemented,
        description ( "This method allows turning on/off the audit log" )
    ]
    uint32 SetAuditLog ( [in] boolean AuditLog);
};

[
    dynamic: ToInstance, 
    provider("MS_NT_DHCP_PROVIDER"),
    Description ( "" ) 
]
class DHCP_Subnet
{
    [
        key,
        read,
        Description ( "This variable indicates the subnet's IP network address" ) 
    ]
    string Address;

    [
        read,
        Description ( "This variable indicates the subnet's IP mask" ) 
    ]
    string Mask;

    [
        read, write,
        Description ( "This variable indicates the name of this subnet" ) 
    ]
    string Name;

    [
        read, write,
        Description ( "This variable indicates the comment of this subnet" ) 
    ]
    string Comment;

    [
        Values	 { "0",		  "1" },
        ValueMap { "Enabled", "Disabled"},
        read, write, 
        Description ( "This variable shows the current state of the subnet" ) 
    ]
    uint32 State;

    [
        read,
        Description ( "This variable indicates the number of addresses in use for this subnet" )
    ]
    uint32 NumberOfAddressesInUse;

    [
        read,
        Description ( "This variable indicates the number of addresses free in this subnet" )
    ]
    uint32 NumberOfAddressesFree;

    [
        read,
        Description ( "This variable indicates the number of pending offers given in this subnet" )
    ]
    uint32 NumberOfPendingOffers;
    [
        implemented,
        description ( "This method allows setting the name of the subnet" )
    ]
    uint32 SetName ( [in] string Name);

    [
        implemented,
        description ( "This method allows setting the comment of the subnet" )
    ]
    uint32 SetComment ( [in] string Comment);

    [
        implemented,
        description ( "This method allows enabling(0) / disabling(1) the subnet" )
    ]
    uint32 SetState ( [in] uint32 State);
};

[
    dynamic: ToInstance, 
    provider("MS_NT_DHCP_PROVIDER"),
    Description ( "" ) 
]
class DHCP_Lease 
{
    [
        key,
        read,
        description ( "This key variable indicates the lease's IP Address" )
    ]
    string Subnet;

    [
        key,
        read,
        description ( "This key variable indicates the subnet to which the lease belongs" )
    ]
    string Address;

    [
        read,
        description ( "This variable indicates the mask which applies for the lease" )
    ]
    string SubnetMask;

    [
        read, write,
        description ( "This variable indicates the MAC address of the client associated to the lease" )
    ]
    uint8 UniqueClientIdentifier [];

    [
        read, write,
        description ( "This variable indicates the domain name for the client associated to the lease" )
    ]
    string Name;

    [
        read, write,
        description ( "This variable indicates the comment associated to the lease" )
    ]
    string Comment;

    [
        read,
        description ( "This variable indicates the date the lease expires" )
    ]
    datetime LeaseExpiryDate;

    [
        read, write,
        description ( "This variable shows the type of the client associated to the lease" )
    ]
    uint8 Type;

    [
        read,
        description ( "This variable shows the current state of the lease" )
    ]
    uint8 State;
};

[
    dynamic: ToInstance, 
    provider("MS_NT_DHCP_PROVIDER"),
    Description ( "" ) 
]
class DHCP_Reservation
{
    [
        key,
        read,
        description ( "This key variable indicates the lease's IP Address" )
    ]
    string Subnet;

    [
        key,
        read,
        description ( "This key variable indicates the subnet to which the lease belongs" )
    ]
    string Address;

    [
        read,
        description ( "This variable indicates the mask which applies for the lease" )
    ]
    string SubnetMask;

    [
        read, write,
        description ( "This variable indicates the MAC address of the client associated to the lease" )
    ]
    uint8 UniqueClientIdentifier [];

    [
        read, write,
        description ( "This variable indicates the domain name for the client associated to the lease" )
    ]
    string Name;

    [
        read, write,
        description ( "This variable indicates the comment associated to the lease" )
    ]
    string Comment;

    [
        read,
        description ( "This variable indicates the date the lease expires" )
    ]
    datetime LeaseExpiryDate;

    [
        read, write,
        description ( "This variable shows the type of the client associated to the lease" )
    ]
    uint8 Type;

    [
        read,
        description ( "This variable shows the current state of the lease" )
    ]
    uint8 State;

    [
        read, write,
        description ( "This variable tells which kind of clients can allocate this reservation" ),
        values {  "0",            "1",    "2",        "3",    "100"},
        ValueMap {"Unspecified",  "DHCP", "BOOTP",    "Both", "None"} 
    ]
    uint8 ReservationType;
};

[
    Association: ToInstance,
    dynamic: ToInstance, 
    provider("MS_NT_DHCP_PROVIDER"),
    Description ( "" ) 
]
class DHCP_SubnetLease
{
    [
        key,
        read,
        description ( "This variable references the Subnet involved in the association" )
    ]
    DHCP_Subnet REF Subnet;

    [
        key,
        read,
        description ( "This variable references the Lease involved in the association" )
    ]
    DHCP_Lease REF Lease;
};

[
    Association: ToInstance,
    dynamic: ToInstance, 
    provider("MS_NT_DHCP_PROVIDER"),
    Description ( "" ) 
]
class DHCP_SubnetReservation
{
    [
        key,
        read,
        description ( "This variable references the Subnet involved in the association" )
    ]
    DHCP_Subnet REF Subnet;

    [
        key,
        read,
        description ( "This variable references the Reservation involved in the association" )
    ]
    DHCP_Reservation REF Reservation;
};


[
    dynamic: ToInstance, 
    provider("MS_NT_DHCP_PROVIDER"),
    Description ( "" ) 
]
class DHCP_SuperScope
{
    [
        key,
        read,
        description ( "This variable indicates the name of the superscope" )
    ]
    string Name;
};

[
    Association: ToInstance,
    dynamic: ToInstance, 
    provider("MS_NT_DHCP_PROVIDER"),
    Description ( "" ) 
]
class DHCP_SuperScopeSubnets
{
    [
        key,
        read,
        description ( "This variable references the SuperScope involved in the association" )
    ]
    DHCP_SuperScope REF SuperScope;

    [
        key,
        read,
        description ( "This variable references the Subnet involved in the association" )
    ]
    DHCP_Subnet REF Subnet;
};

[
    dynamic: ToInstance, 
    provider("MS_NT_DHCP_PROVIDER"),
    Description ( "" ) 
]
class DHCP_Range 
{
    [
        key,
        read,
        description ( "This variable points to the Subnet to which this range belongs" )
    ]
    string Subnet;

    [
        key,
        read,
        description ( "This variable indicates the start address of the range" )
    ]
    string StartAddress;

    [
        key,
        read,
        description ( "This variable indicates the end address of the range" )
    ]
    string EndAddress;

    [
        key,
        read,
        description ( "This variable indicates the type of the range (Included vs. Excluded)" )
    ]
    uint32 RangeType;
};

[
    Association: ToInstance,
    dynamic: ToInstance, 
    provider("MS_NT_DHCP_PROVIDER"),
    Description ( "" ) 
]
class DHCP_SubnetIncludedRange 
{
    [
        key,
        read,
        description ( "This variable references the Subnet involved in the association" )
    ]
    DHCP_Subnet REF Subnet;

    [
        key,
        read,
        description ( "This variable references the Included Range involved in the association" )
    ]
    DHCP_Range REF Range;
};

[
    Association: ToInstance,
    dynamic: ToInstance, 
    provider("MS_NT_DHCP_PROVIDER"),
    Description ( "" ) 
]
class DHCP_SubnetExcludedRange 
{
    [
        key,
        read,
        description ( "This variable references the Subnet involved in the association" )
    ]
    DHCP_Subnet REF Subnet;

    [
        key,
        read,
        description ( "This variable references the Excluded Range involved in the association" )
    ]
    DHCP_Range REF Range;
};

[
    Abstract
]
class DHCP_OptionVariant
{
};

class DHCP_OptionVariant_Uint8 : DHCP_OptionVariant
{
    Uint8 Value;
};

class DHCP_OptionVariant_Uint16 : DHCP_OptionVariant
{
    Uint16 Value;
};

class DHCP_OptionVariant_Uint32 : DHCP_OptionVariant
{
    Uint32 Value;
};

class DHCP_OptionVariant_Uint32Uint32 : DHCP_OptionVariant
{
    Uint32 FirstValue;
    Uint32 SecondValue;
};

class DHCP_OptionVariant_IPAddress : DHCP_OptionVariant
{
    Uint32 Value;
};

class DHCP_OptionVariant_String : DHCP_OptionVariant
{
    string Value;
};

class DHCP_OptionVariant_Binary : DHCP_OptionVariant
{
    Uint8 Value [];
};

class DHCP_OptionVariant_Encapsulated : DHCP_OptionVariant
{
    Uint8 Value [];
};

class DHCP_OptionVariant_Array : DHCP_OptionVariant
{
    DHCP_OptionVariant Value [];
};

[
    dynamic: ToInstance, 
    provider("MS_NT_DHCP_PROVIDER"),
    Description("")
]
class DHCP_Option
{
    [
        key,
        read, write,
        description ( "this variable indicates the option's numeric identifier" )
    ]
    uint32 Identifier;

    [
        read, write,
        description ( "this variable indicates the option's name" )
    ]
    string Name;

    [
        read, write,
        description ( "this variable indicates the option's comment" )
    ]
    string Comment;

    [
        read, write,
        description ( "this variable encapsulates the option's default values" )
    ]
    DHCP_OptionVariant Values;
};

/*
[
    Abstract,
    description("")
]
class DHCP_OptionValue
{
    DHCP_OptionVariant Value;
};

[
    description(""), 
    dynamic: ToInstance, 
    provider("MS_NT_DHCP_PROVIDER")
]
class DHCP_ServerOptionValue : DHCP_OptionValue
{
    [key]
    uint32 Identifier;
};

[
    description(""), 
    dynamic: ToInstance, 
    provider("MS_NT_DHCP_PROVIDER")
]
class DHCP_SubnetOptionValue : DHCP_OptionValue
{
    [key]
    string Subnet;

    [key]
    uint32 Identifier;
};

[
    description(""), 
    dynamic: ToInstance, 
    provider("MS_NT_DHCP_PROVIDER")
]
class DHCP_ReservationOptionValue : DHCP_OptionValue
{
    [key]
    string Reservation;

    [key]
    uint32 Identifier;
};

[
    Association: ToInstance,
    dynamic: ToInstance, 
    provider("MS_NT_DHCP_PROVIDER"),
    Description ( "" ) 
]
class DHCP_OptionToOptionValue
{
    [
        Key,
        Read,
        Description ( "" )
    ]
    DHCP_Option REF Option;

    [
        Key,
        Read,
        Description ( "" )
    ]
    DHCP_OptionValue REF OptionValue;
};

[
    dynamic: ToInstance, 
    provider("MS_NT_DHCP_PROVIDER"),
    Description ( "" ) 
]
class DHCP_VendorClass
{
    [key]
    string Name;
};

[
    dynamic: ToInstance, 
    provider("MS_NT_DHCP_PROVIDER"),
    Description ( "" ) 
]
class DHCP_UserClass
{
    [key]
    string Name;
};

[
    Association: ToInstance,
    dynamic: ToInstance, 
    provider("MS_NT_DHCP_PROVIDER"),
    Description ( "" ) 
]
class DHCP_UserClassToOptionValue
{
    [
        Key,
        Read,
        Description ( "" )
    ]
    DHCP_UserClass REF UserClass;

    [
        Key,
        Read,
        Description ( "" )
    ]
    DHCP_OptionValue REF OptionValue;
};

[
    Association: ToInstance,
    dynamic: ToInstance, 
    provider("MS_NT_DHCP_PROVIDER"),
    Description ( "" ) 
]
class DHCP_VendorClassToOptionValue
{
    [
        Key,
        Read,
        Description ( "" )
    ]
    DHCP_VendorClass REF UserClass;

    [
        Key,
        Read,
        Description ( "" )
    ]
    DHCP_OptionValue REF OptionValue;
};
*/