Windows-Server-2003/net/dhcp/server/mm/server.h

293 lines
8.6 KiB
C

//========================================================================
// Copyright (C) 1997 Microsoft Corporation
//========================================================================
#ifndef _MM_SERVER_H_
#define _MM_SERVER_H_
#include <dhcp.h>
#include "classdefl.h"
typedef struct _M_SERVER {
DWORD Address;
DWORD State;
DWORD Policy;
ARRAY Subnets;
ARRAY MScopes;
ARRAY_LOCATION Loc; // if RoundRobin on, then we need this to keep track
ARRAY SuperScopes;
M_OPTCLASS Options;
M_OPTCLASSDEFLIST OptDefs;
M_CLASSDEFLIST ClassDefs;
LPWSTR Name;
LPWSTR Comment;
ULONG LastUniqId;
} M_SERVER, *PM_SERVER, *LPM_SERVER;
DWORD
MemServerInit(
OUT PM_SERVER *Server,
IN DWORD Address,
IN DWORD State,
IN DWORD Policy,
IN LPWSTR Name,
IN LPWSTR Comment
) ;
DWORD
MemServerCleanup(
IN OUT PM_SERVER Server
) ;
DWORD
MemServerGetUAddressInfo(
IN PM_SERVER Server,
IN DWORD Address,
OUT PM_SUBNET *Subnet, // OPTIONAL
OUT PM_RANGE *Range, // OPTIONAL
OUT PM_EXCL *Excl, // OPTIONAL
OUT PM_RESERVATION *Reservation // OPTIONAL
) ;
DWORD
MemServerGetMAddressInfo(
IN PM_SERVER Server,
IN DWORD Address,
OUT PM_SUBNET *Subnet, // OPTIONAL
OUT PM_RANGE *Range, // OPTIONAL
OUT PM_EXCL *Excl, // OPTIONAL
OUT PM_RESERVATION *Reservation // OPTIONAL
) ;
DWORD _inline
MemServerGetAddressInfo(
IN PM_SERVER Server,
IN DWORD Address,
OUT PM_SUBNET *Subnet, // OPTIONAL
OUT PM_RANGE *Range, // OPTIONAL
OUT PM_EXCL *Excl, // OPTIONAL
OUT PM_RESERVATION *Reservation // OPTIONAL
) {
if (CLASSD_HOST_ADDR( Address )) {
return MemServerGetMAddressInfo(
Server,
Address,
Subnet,
Range,
Excl,
Reservation
);
} else {
return MemServerGetUAddressInfo(
Server,
Address,
Subnet,
Range,
Excl,
Reservation
);
}
} // MemServerGetAddressInfo()
DWORD
MemServerAddSubnet(
IN OUT PM_SERVER Server,
IN PM_SUBNET Subnet, // completely created subnet, must not
IN ULONG UniqId // be in Server's list tho'
) ;
DWORD
MemServerDelSubnet(
IN OUT PM_SERVER Server,
IN DWORD SubnetAddress,
OUT PM_SUBNET *Subnet
) ;
DWORD
MemServerFindSubnetByName(
IN PM_SERVER Server,
IN LPWSTR Name,
OUT PM_SUBNET *Subnet
) ;
#define INVALID_SSCOPE_ID 0xFFFFFFFF
#define INVALID_SSCOPE_NAME NULL
DWORD
MemServerFindSScope( // find matching with EITHER scopeid ir sscopename
IN OUT PM_SERVER Server,
IN DWORD SScopeId, // 0xFFFFFFFF == invalid scope id, dont use for search
IN LPWSTR SScopeName, // NULL == invalid scope name
OUT PM_SSCOPE *SScope
) ;
DWORD
MemServerAddSScope(
IN OUT PM_SERVER Server,
IN PM_SSCOPE SScope
) ;
DWORD
MemServerDelSScope(
IN OUT PM_SERVER Server,
IN DWORD SScopeId,
OUT PM_SSCOPE *SScope
) ;
#define INVALID_MSCOPE_ID 0x0
#define INVALID_MSCOPE_NAME NULL
DWORD
MemServerFindMScope( // search either based on ScopeId or ScopeName
IN PM_SERVER Server,
IN DWORD MScopeId, // Multicast scope id, or 0 if this is not the key to search on
IN LPWSTR Name, // Multicast scope name or NULL if this is not the key to search on
OUT PM_MSCOPE *MScope
) ;
DWORD
MemServerAddMScope(
IN OUT PM_SERVER Server,
IN OUT PM_MSCOPE MScope,
IN ULONG UniqId
) ;
DWORD
MemServerDelMScope(
IN OUT PM_SERVER Server,
IN DWORD MScopeId,
IN LPWSTR MScopeName,
OUT PM_MSCOPE *MScope
) ;
DWORD _inline
MemServerGetClassDef( // look up a class id def on Key=ClassId or Key=ClassIdBytes
IN PM_SERVER Server,
IN DWORD ClassId, // OPTIONAL, 0 if not used
IN LPWSTR Name, // OPTIONAL, NULL if not used
IN DWORD nClassIdBytes, // OPTIONAL, 0 if not used
IN LPBYTE ClassIdBytes, // OPTIONAL, NULL if not used
OUT PM_CLASSDEF *ClassDef
) {
AssertRet(Server && ClassDef && (0 != ClassId || 0 != nClassIdBytes || Name ), ERROR_INVALID_PARAMETER);
AssertRet( 0 == nClassIdBytes || NULL != ClassIdBytes, ERROR_INVALID_PARAMETER);
AssertRet( 0 != nClassIdBytes || NULL == ClassIdBytes, ERROR_INVALID_PARAMETER);
return MemClassDefListFindOptDef(
&Server->ClassDefs,
ClassId,
Name,
ClassIdBytes,
nClassIdBytes,
ClassDef
);
}
DWORD _inline
MemServerAddClassDef(
IN OUT PM_SERVER Server,
IN DWORD ClassId,
IN BOOL IsVendor,
IN LPWSTR Name,
IN LPWSTR Comment,
IN DWORD nClassIdBytes,
IN LPBYTE ClassIdBytes,
IN ULONG UniqId
)
{
AssertRet(Server, ERROR_INVALID_PARAMETER);
return MemClassDefListAddClassDef(
&Server->ClassDefs,
ClassId,
IsVendor,
0,
Name,
Comment,
ClassIdBytes,
nClassIdBytes,
UniqId
);
} // MemServerAddClassDef()
DWORD _inline
MemServerDelClassDef(
IN OUT PM_SERVER Server,
IN DWORD ClassId,
IN LPWSTR Name,
IN DWORD nClassIdBytes,
IN LPBYTE ClassIdBytes
) {
AssertRet(Server, ERROR_INVALID_PARAMETER);
return MemClassDefListDelClassDef(
&Server->ClassDefs,
ClassId,
Name,
ClassIdBytes,
nClassIdBytes
);
}
DWORD
MemServerGetOptDef(
IN OUT PM_SERVER Server,
IN DWORD ClassId, // required, strict search, no defaulting class to zero
IN DWORD VendorId, // required, strict search, no defaulting vendor to zero
IN DWORD OptId, // OPTIONAL - search by this or following param
IN LPWSTR OptName, // OPTIONAL - search by name or above param
OUT PM_OPTDEF *OptDef // if found return the opt def here
) ;
DWORD
MemServerAddOptDef(
IN OUT PM_SERVER Server,
IN DWORD ClassId,
IN DWORD VendorId,
IN DWORD OptId,
IN LPWSTR OptName,
IN LPWSTR OptComment,
IN DWORD Type,
IN LPBYTE OptVal,
IN DWORD OptValLen,
IN ULONG UniqId
) ;
DWORD
MemServerDelOptDef(
IN OUT PM_SERVER Server,
IN DWORD ClassId,
IN DWORD VendorId,
IN DWORD OptId
) ;
#endif _MM_SERVER_H_
//========================================================================
// end of file
//========================================================================