windows-nt/Source/XPSP1/NT/net/diagnostics/netdiag/autonet.c

168 lines
4.9 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
//++
//
// 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)
{
}