168 lines
4.9 KiB
C
168 lines
4.9 KiB
C
|
//++
|
||
|
//
|
||
|
// Copyright (C) Microsoft Corporation, 1987 - 1999
|
||
|
//
|
||
|
// Module Name:
|
||
|
//
|
||
|
// autonet.c
|
||
|
//
|
||
|
// Abstract:
|
||
|
//
|
||
|
// Queries into network drivers
|
||
|
//
|
||
|
// Author:
|
||
|
//
|
||
|
// Anilth - 4-20-1998
|
||
|
//
|
||
|
// Environment:
|
||
|
//
|
||
|
// User mode only.
|
||
|
// Contains NT-specific code.
|
||
|
//
|
||
|
// Revision History:
|
||
|
//
|
||
|
//--
|
||
|
#include "precomp.h"
|
||
|
#include "dhcptest.h"
|
||
|
|
||
|
|
||
|
//$Review (nsun) Now we just print "Autonet address is in use" if autonet.
|
||
|
// we don't send Dhcp broadcast.
|
||
|
// Maybe later we should send the Dhcp broadcast to see if the Dhcp server works or not
|
||
|
// for all DHCP enabled card
|
||
|
//-------------------------------------------------------------------------//
|
||
|
//###### A u t o n e t T e s t () #######################################//
|
||
|
//-------------------------------------------------------------------------//
|
||
|
HRESULT
|
||
|
AutonetTest(NETDIAG_PARAMS* pParams, NETDIAG_RESULT* pResults)
|
||
|
//++
|
||
|
//
|
||
|
// Routine Description:
|
||
|
//
|
||
|
// Checks if we have autonet addresses on all adapters. If we do than
|
||
|
// the workstation couldn't reach a DHCP server on any adapters.
|
||
|
// Potential HW or NDIS issue.
|
||
|
//
|
||
|
// Arguments:
|
||
|
//
|
||
|
// None.
|
||
|
//
|
||
|
// Return Value:
|
||
|
//
|
||
|
// S_FALSE : Test failed, all adapters are autoconfigure.
|
||
|
// S_OK : Test succeeded, we found at least one non-autoconfigure.
|
||
|
// other : error codes
|
||
|
//
|
||
|
//--
|
||
|
{
|
||
|
PIP_ADAPTER_INFO pIpAdapterInfo;
|
||
|
HRESULT hr = S_FALSE; // Assume that this will fail
|
||
|
|
||
|
int i;
|
||
|
|
||
|
PrintStatusMessage(pParams, 4, IDS_AUTONET_STATUS_MSG);
|
||
|
|
||
|
//
|
||
|
// scan all adapters for a non-autonet address
|
||
|
//
|
||
|
|
||
|
for( i = 0; i < pResults->cNumInterfaces; i++)
|
||
|
{
|
||
|
pIpAdapterInfo = pResults->pArrayInterface[i].IpConfig.pAdapterInfo;
|
||
|
//if this is not an active connection, skip it.
|
||
|
|
||
|
if (!pResults->pArrayInterface[i].IpConfig.fActive ||
|
||
|
NETCARD_DISCONNECTED == pResults->pArrayInterface[i].dwNetCardStatus)
|
||
|
continue;
|
||
|
|
||
|
if ( !pResults->pArrayInterface[i].IpConfig.fAutoconfigActive )
|
||
|
{
|
||
|
//$REVIEW (nsun) maybe we need to DhcpBroadcast(pIpAdapterInfo) here instead
|
||
|
// of for the AutoNet adapters
|
||
|
pResults->pArrayInterface[i].AutoNet.fAutoNet = FALSE;
|
||
|
hr = S_OK;
|
||
|
continue;
|
||
|
}
|
||
|
// Skip WAN Cards
|
||
|
if ( ! strstr(pIpAdapterInfo->AdapterName,"NdisWan") )
|
||
|
pResults->pArrayInterface[i].AutoNet.fAutoNet = TRUE;
|
||
|
}
|
||
|
|
||
|
if ( FHrOK(hr) )
|
||
|
{
|
||
|
PrintStatusMessage(pParams, 0, IDS_GLOBAL_PASS_NL);
|
||
|
pResults->AutoNet.fAllAutoConfig = FALSE;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
PrintStatusMessage(pParams, 0, IDS_GLOBAL_FAIL_NL);
|
||
|
pResults->AutoNet.fAllAutoConfig = TRUE;
|
||
|
}
|
||
|
|
||
|
return hr;
|
||
|
} /* END OF AutonetTest() */
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
void AutonetGlobalPrint(NETDIAG_PARAMS *pParams, NETDIAG_RESULT *pResults)
|
||
|
{
|
||
|
if (pParams->fVerbose || pResults->AutoNet.fAllAutoConfig)
|
||
|
{
|
||
|
PrintNewLine(pParams, 2);
|
||
|
PrintTestTitleResult(pParams,
|
||
|
IDS_AUTONET_LONG,
|
||
|
IDS_AUTONET_SHORT,
|
||
|
TRUE,
|
||
|
pResults->AutoNet.fAllAutoConfig ?
|
||
|
S_FALSE : S_OK, 0);
|
||
|
}
|
||
|
|
||
|
if(pResults->AutoNet.fAllAutoConfig)
|
||
|
{
|
||
|
//IDS_AUTONET_11601 " [FATAL] All adapters are autoconfigured!\n"
|
||
|
PrintMessage(pParams, IDS_AUTONET_11601 );
|
||
|
//IDS_AUTONET_11602 " The DHCP servers are unreachable. Please check cables, hubs, and taps!\n\n"
|
||
|
PrintMessage(pParams, IDS_AUTONET_11602 );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (pParams->fReallyVerbose)
|
||
|
//IDS_AUTONET_11603 " PASS - you have at least one non-autoconfigured IP address\n"
|
||
|
PrintMessage(pParams, IDS_AUTONET_11603 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void AutonetPerInterfacePrint(NETDIAG_PARAMS *pParams,
|
||
|
NETDIAG_RESULT *pResults,
|
||
|
INTERFACE_RESULT *pInterfaceResults)
|
||
|
{
|
||
|
if (!pInterfaceResults->IpConfig.fActive ||
|
||
|
NETCARD_DISCONNECTED == pInterfaceResults->dwNetCardStatus)
|
||
|
return;
|
||
|
|
||
|
if (pParams->fVerbose)
|
||
|
{
|
||
|
//IDS_AUTONET_11604 " Autonet results : "
|
||
|
PrintMessage(pParams, IDS_AUTONET_11604);
|
||
|
if(pInterfaceResults->AutoNet.fAutoNet)
|
||
|
{
|
||
|
PrintMessage(pParams, IDS_GLOBAL_FAIL_NL);
|
||
|
//IDS_AUTONET_11605 " [WARNING] AutoNet is in use. DHCP not available!\n"
|
||
|
PrintMessage(pParams, IDS_AUTONET_11605);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
PrintMessage(pParams, IDS_GLOBAL_PASS_NL);
|
||
|
if(pParams->fReallyVerbose)
|
||
|
//IDS_AUTONET_11606 " AutoNet is not in use. \n"
|
||
|
PrintMessage(pParams, IDS_AUTONET_11606);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void AutonetCleanup(IN NETDIAG_PARAMS *pParams, IN OUT NETDIAG_RESULT *pResults)
|
||
|
{
|
||
|
}
|