windows-nt/Source/XPSP1/NT/net/dhcp/client/nt/rastest.c
2020-09-26 16:20:57 +08:00

177 lines
3.8 KiB
C

//==================================================================
// Copyright (C) Microsoft 1998.
// Author: RameshV
// Desription: test program to test the lease APIs for RAS.
//===================================================================
#include "precomp.h"
#include <dhcploc.h>
#include <dhcppro.h>
DHCP_OPTION_LIST DhcpOptList;
DWORD AdapterAddress;
DWORD Error;
DHCP_CLIENT_UID ClientUID;
LPDHCP_LEASE_INFO LeaseInfo;
DHCP_LEASE_INFO LeaseInfo2;
LPDHCP_OPTION_INFO OptionInfo;
void
PrintLeaseInfo(
LPDHCP_LEASE_INFO LeaseInfo
)
{
DWORD Address, Mask, ServerAddress;
if( NULL == LeaseInfo ) {
printf("LeaseInfo = NULL\n");
return;
}
Address = htonl(LeaseInfo->IpAddress);
Mask = htonl(LeaseInfo->SubnetMask);
ServerAddress = htonl(LeaseInfo->DhcpServerAddress);
printf("LeaseInfo: \n");
printf("\tIpAddress: %s\n", inet_ntoa(*(struct in_addr *)&Address));
printf("\tSubnetMask: %s\n", inet_ntoa(*(struct in_addr *)&Mask));
printf("\tDhcpServerAddress: %s\n", inet_ntoa(*(struct in_addr *)&ServerAddress));
printf("\tLease: 0x%lx\n", LeaseInfo->Lease);
}
void
AcquireX(LPSTR clientid)
{
ClientUID.ClientUIDLength = strlen(clientid);
ClientUID.ClientUID = clientid;
Error = DhcpLeaseIpAddress(
AdapterAddress,
&ClientUID,
0,
NULL,
&LeaseInfo,
&OptionInfo
);
if( ERROR_SUCCESS != Error ) {
printf("DhcpLeaseIpAddress: 0x%lx (%ld)\n", Error, Error);
return;
}
PrintLeaseInfo(LeaseInfo);
}
void
ReleaseOrRenew(BOOL fRelease, DWORD ipaddr, DWORD servaddr, LPSTR clientid)
{
ClientUID.ClientUIDLength = strlen(clientid);
ClientUID.ClientUID = clientid;
AcquireX(clientid);
if( fRelease ) {
Error = DhcpReleaseIpAddressLease(
AdapterAddress,
LeaseInfo
);
} else {
Error = DhcpRenewIpAddressLease(
AdapterAddress,
LeaseInfo,
NULL,
&OptionInfo
);
}
if( ERROR_SUCCESS != Error ) {
printf("Error; 0x%lx (%ld)\n", Error, Error);
return;
}
printf("After the renew: \n");
PrintLeaseInfo(LeaseInfo);
}
void
ReleaseX(DWORD ipaddr, DWORD servaddr, LPSTR clientid)
{
ReleaseOrRenew(TRUE, ipaddr, servaddr, clientid);
}
void
RenewX(DWORD ipaddr, DWORD servaddr, LPSTR clientid)
{
ReleaseOrRenew(FALSE, ipaddr, servaddr, clientid);
}
void
Release(
int argc,
char *argv[]
)
{
if( argc != 3 ) {
printf("usage: Release ip-address server-address client-id-string\n");
return;
}
ReleaseX(inet_addr(argv[0]), inet_addr(argv[1]), argv[2]);
}
void
Renew(
int argc,
char *argv[]
)
{
if( argc != 3 ) {
printf("usage: Renew ip-address server-address client-id-string\n");
return;
}
RenewX(inet_addr(argv[0]), inet_addr(argv[1]), argv[2]);
}
void
Acquire(
int argc,
char * argv[]
)
{
if( argc != 1 ) {
printf("usage: acquire client-id-string\n");
return;
}
AcquireX(argv[0]);
}
void _cdecl main(int argc, char *argv[]) {
WSADATA WsaData;
WSAStartup( 0x0101, &WsaData );
if( argc < 3 ) {
printf("Usage: %s [adapter-address] cmd <options>"
"\n\t where cmd is one of Release,Acquire,Renew\n", argv[0]);
return;
}
AdapterAddress = htonl(inet_addr(argv[1]));
argv ++; argc --;
if( 0 == _stricmp(argv[1], "Release") ) {
Release(argc-2, &argv[2]);
} else if( 0 == _stricmp(argv[1], "Renew") ) {
Renew(argc-2, &argv[2]);
} else if( 0 == _stricmp(argv[1], "Acquire") ) {
Acquire(argc-2, &argv[2]);
} else {
printf("Usage: %s cmd <options>"
"\n\t where cmd is one of Release,Acquire,Renew\n", argv[0]);
}
}