xpmgr/BuildTools/Include/dhcpv6csdk.h

192 lines
6.1 KiB
C

/*++
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
dhcpv6csdk.h
Abstract:
These are the exported dhcpv6 client api function definitions
Author:
Achint Setia (asetia) July-1-2005
Environment:
User Mode - Win32
Revision History:
--*/
#ifndef _DHCPV6CSDK_
#define _DHCPV6CSDK_
#ifdef __cplusplus
extern "C" {
#endif
#ifndef DHCPV6_OPTIONS_DEFINED
#define DHCPV6_OPTIONS_DEFINED
#if _MSC_VER > 1000
#pragma once
#endif
//
// DHCPv6 Standard Options(non-encapsulated).
//
#define DHCPV6_OPTION_CLIENTID 1
#define DHCPV6_OPTION_SERVERID 2
#define DHCPV6_OPTION_IA_NA 3
#define DHCPV6_OPTION_IA_TA 4
#define DHCPV6_OPTION_ORO 6
#define DHCPV6_OPTION_PREFERENCE 7
#define DHCPV6_OPTION_UNICAST 12
#define DHCPV6_OPTION_RAPID_COMMIT 14
#define DHCPV6_OPTION_USER_CLASS 15
#define DHCPV6_OPTION_VENDOR_CLASS 16
#define DHCPV6_OPTION_VENDOR_OPTS 17
#define DHCPV6_OPTION_RECONF_MSG 19
#define DHCPV6_OPTION_SIP_SERVERS_NAMES 21
#define DHCPV6_OPTION_SIP_SERVERS_ADDRS 22
#define DHCPV6_OPTION_DNS_SERVERS 23
#define DHCPV6_OPTION_DOMAIN_LIST 24
#define DHCPV6_OPTION_IA_PD 25
#define DHCPV6_OPTION_NIS_SERVERS 27
#define DHCPV6_OPTION_NISP_SERVERS 28
#define DHCPV6_OPTION_NIS_DOMAIN_NAME 29
#define DHCPV6_OPTION_NISP_DOMAIN_NAME 30
#endif DHCPV6_OPTIONS_DEFINED
#ifndef DHCPV6API_PARAMS_DEFINED
#define DHCPV6API_PARAMS_DEFINED
typedef struct _DHCPV6CAPI_PARAMS { // use this structure to request params
ULONG Flags; // for future use
ULONG OptionId; // what option is this?
BOOL IsVendor; // is this vendor specific?
LPBYTE Data; // the actual data
DWORD nBytesData; // how many bytes of data are there in Data?
} DHCPV6CAPI_PARAMS, *PDHCPV6CAPI_PARAMS, *LPDHCPV6CAPI_PARAMS;
#endif DHCPV6API_PARAMS_DEFINED
typedef struct _DHCPV6CAPI_PARAMS_ARRAY { // array of params..
ULONG nParams; // size of array
LPDHCPV6CAPI_PARAMS Params; // actual array
} DHCPV6CAPI_PARAMS_ARRAY, *PDHCPV6CAPI_PARAMS_ARRAY, *LPDHCPV6CAPI_PARAMS_ARRAY;
typedef struct _DHCPV6CAPI_CLASSID { // defines a client class id.
ULONG Flags; // must be zero currently.
#ifdef __midl
[size_is(nBytesData)] LPBYTE Data;
#else
__field_bcount(nBytesData) LPBYTE Data; // classid binary data.
#endif
ULONG nBytesData; // how many bytes of data are there?
} DHCPV6CAPI_CLASSID, *PDHCPV6CAPI_CLASSID, *LPDHCPV6CAPI_CLASSID;
typedef
enum
{
STATUS_NO_ERROR, //Prefix successfully leased, renewed.
STATUS_UNSPECIFIED_FAILURE, //Some unspecified failure occurred while trying to process the prefix.
STATUS_NO_BINDING = 3, //The server doesn't have binding for the prefix.
STATUS_NOPREFIX_AVAIL = 6 //The server doesn't have prefix to offer to the requesting client.
}StatusCode;
typedef struct _DHCPV6Prefix{
UCHAR prefix[16]; //128 bit prefix
DWORD prefixLength; //(48-64 bits)
DWORD preferredLifeTime; //The Preferred Lifetime of the Prefix returned or requested in seconds
DWORD validLifeTime; //The Valid Lifetime of the Prefix returned or requested in seconds
StatusCode status; //The status code returned by the server for the prefix
}DHCPV6Prefix, *PDHCPV6Prefix, *LPDHCPV6Prefix;
typedef struct _DHCPV6PrefixLeaseInformation {
DWORD nPrefixes; // number of prefixes.
__field_ecount(nPrefixes) LPDHCPV6Prefix prefixArray; // Array of prefixes
DWORD iaid; //The 32 bit Identity Association identifier for the prefix option.
time_t T1; //The absolute renewal time for the prefixes in seconds
time_t T2; //The absolute rebind time for the prefixes in seconds
time_t MaxLeaseExpirationTime; //The absolute maximum lease expiration time of all the prefix leases in this structure.
time_t LastRenewalTime; // The absolute time at which the last renewal for the prefixes happened.
StatusCode status; //The status code returned by the server for the IAPD
__field_bcount(ServerIdLen) LPBYTE ServerId; // The server DUID from which the prefix is received. This is used in subsequent Renews.
DWORD ServerIdLen; // The length of the above DUID data.
} DHCPV6PrefixLeaseInformation, *PDHCPV6PrefixLeaseInformation, *LPDHCPV6PrefixLeaseInformation;
VOID
APIENTRY
Dhcpv6CApiInitialize(
OUT LPDWORD Version
);
VOID
APIENTRY
Dhcpv6CApiCleanup(
VOID
);
DWORD // win32 status
APIENTRY
Dhcpv6RequestParams( // request parameters of client
IN BOOL forceNewInform,
IN LPVOID reserved,
__nullterminated IN LPWSTR adapterName,
IN LPDHCPV6CAPI_CLASSID classId,
IN OUT DHCPV6CAPI_PARAMS_ARRAY recdParams,
IN LPBYTE buffer,
IN OUT LPDWORD pSize
);
DWORD
APIENTRY
Dhcpv6RequestPrefix(
IN __nullterminated LPWSTR adapterName,
IN LPDHCPV6CAPI_CLASSID pclassId,
IN OUT LPDHCPV6PrefixLeaseInformation prefixleaseInfo,
__deref_out OUT DWORD* pdwTimeToWait
);
DWORD
APIENTRY
Dhcpv6RenewPrefix(
IN __nullterminated LPWSTR adapterName,
IN LPDHCPV6CAPI_CLASSID pclassId,
IN OUT LPDHCPV6PrefixLeaseInformation prefixleaseInfo,
__deref_out OUT DWORD* pdwTimeToWait,
IN DWORD bValidatePrefix
);
DWORD
APIENTRY
Dhcpv6ReleasePrefix(
__nullterminated IN LPWSTR adapterName,
IN LPDHCPV6CAPI_CLASSID classId,
IN LPDHCPV6PrefixLeaseInformation leaseInfo
);
#ifdef __cplusplus
}
#endif
//================================================================================
// end of file
//================================================================================
#endif _DHCPV6CSDK_