|
|
//++
//
// Copyright (C) Microsoft Corporation, 1987 - 1999
//
// Module Name:
//
// defgw.c
//
// Abstract:
//
// Queries into network drivers
//
// Author:
//
// Anilth - 4-20-1998
//
// Environment:
//
// User mode only.
// Contains NT-specific code.
//
// Revision History:
//
// NSun 08/30/98
//
//--
#include "precomp.h"
//-------------------------------------------------------------------------//
//###### D e f G w T e s t () ###########################################//
//-------------------------------------------------------------------------//
HRESULT DefGwTest(NETDIAG_PARAMS* pParams, NETDIAG_RESULT* pResults) //++
//
// Routine Description:
//
// Tests that the default gateway can be pinged. This doesn't really
// confirms forwarding on that IP address but it's a start.
//
// Arguments:
//
// None.
//
// Return Value:
//
// TRUE: Test suceeded.
// FALSE: Test failed
//
//--
{ DWORD nReplyCnt; IPAddr GwAddress; int nGwsReachable = 0; int i;
PIP_ADAPTER_INFO pIpAdapterInfo; IP_ADDR_STRING Gateway;
PrintStatusMessage(pParams, 4, IDS_DEFGW_STATUS_MSG);
//
// try to ping all gateways on all adapters
//
for( i = 0; i < pResults->cNumInterfaces; i++) { pIpAdapterInfo = pResults->pArrayInterface[i].IpConfig.pAdapterInfo;
InitializeListHead( &pResults->pArrayInterface[i].DefGw.lmsgOutput ); if (!pResults->pArrayInterface[i].IpConfig.fActive || NETCARD_DISCONNECTED == pResults->pArrayInterface[i].dwNetCardStatus) continue; pResults->pArrayInterface[i].DefGw.dwNumReachable = 0;
Gateway = pIpAdapterInfo->GatewayList; if ( Gateway.IpAddress.String[0] == 0 ) { //No default gateway configured
pResults->pArrayInterface[i].DefGw.dwNumReachable = -1; continue; } while ( TRUE ) { AddMessageToList(&pResults->pArrayInterface[i].DefGw.lmsgOutput, Nd_ReallyVerbose, IDS_DEFGW_12003, Gateway.IpAddress.String ); //IDS_DEFGW_12003 " Pinging gateway %s "
if ( IsIcmpResponseA(Gateway.IpAddress.String) ) { AddMessageToListId(&pResults->pArrayInterface[i].DefGw.lmsgOutput, Nd_ReallyVerbose, IDS_DEFGW_12004 ); //IDS_DEFGW_12004 "- reachable\n"
nGwsReachable++; pResults->pArrayInterface[i].DefGw.dwNumReachable ++; } else { AddMessageToListId(&pResults->pArrayInterface[i].DefGw.lmsgOutput, Nd_ReallyVerbose, IDS_DEFGW_12005 ); //IDS_DEFGW_12005 "- not reachable\n"
} if ( Gateway.Next == NULL ) { break; } Gateway = *(Gateway.Next); } }
//
// No gateway is reachable - fatal.
//
if ( nGwsReachable == 0 ) { PrintStatusMessage(pParams, 0, IDS_GLOBAL_FAIL_NL); pResults->DefGw.hrReachable = S_FALSE; } else { PrintStatusMessage(pParams, 0, IDS_GLOBAL_PASS_NL); pResults->DefGw.hrReachable = S_OK; }
return pResults->DefGw.hrReachable; } /* END OF DefGwTest() */
//----------------------------------------------------------------
//
// DefGwGlobalPrint
//
// Author NSun
//
//------------------------------------------------------------------
void DefGwGlobalPrint(NETDIAG_PARAMS *pParams, NETDIAG_RESULT *pResults) { if (!pResults->IpConfig.fEnabled) { return; } if (pParams->fVerbose || !FHrOK(pResults->DefGw.hrReachable)) { PrintNewLine(pParams, 2); PrintTestTitleResult(pParams, IDS_DEFGW_LONG, IDS_DEFGW_SHORT, TRUE, pResults->DefGw.hrReachable, 0); }
if(FHrOK(pResults->DefGw.hrReachable)) { if (pParams->fReallyVerbose) PrintMessage(pParams, IDS_DEFGW_12011 ); //IDS_DEFGW_12011 "\n PASS - you have at least one reachable gateway.\n"
} else { //IDS_DEFGW_12006 "\n"
PrintMessage(pParams, IDS_DEFGW_12006 ); //IDS_DEFGW_12007 " [FATAL] NO GATEWAYS ARE REACHABLE.\n"
PrintMessage(pParams, IDS_DEFGW_12007 ); //IDS_DEFGW_12008 " You have no connectivity to other network segments.\n"
PrintMessage(pParams, IDS_DEFGW_12008 ); //IDS_DEFGW_12009 " If you configured the IP protocol manually then\n"
PrintMessage(pParams, IDS_DEFGW_12009 ); //IDS_DEFGW_12010 " you need to add at least one valid gateway.\n"
PrintMessage(pParams, IDS_DEFGW_12010 ); }
}
//----------------------------------------------------------------
//
// DefGwPerInterfacePrint
//
// Author NSun
//
//------------------------------------------------------------------
void DefGwPerInterfacePrint(NETDIAG_PARAMS *pParams, NETDIAG_RESULT *pResults, INTERFACE_RESULT *pInterfaceResults) { if (!pInterfaceResults->fActive || !pInterfaceResults->IpConfig.fActive || NETCARD_DISCONNECTED == pInterfaceResults->dwNetCardStatus) return; if (pParams->fVerbose) { PrintNewLine(pParams, 1); if(-1 == pInterfaceResults->DefGw.dwNumReachable) //test skipped on this interface
PrintTestTitleResult(pParams, IDS_DEFGW_LONG, IDS_DEFGW_SHORT, FALSE, S_FALSE, 8); else if(pInterfaceResults->DefGw.dwNumReachable == 0) PrintTestTitleResult(pParams, IDS_DEFGW_LONG, IDS_DEFGW_SHORT, TRUE, S_FALSE, 8); else PrintTestTitleResult(pParams, IDS_DEFGW_LONG, IDS_DEFGW_SHORT, TRUE, S_OK, 8); }
PrintMessageList(pParams, &pInterfaceResults->DefGw.lmsgOutput); if(pParams->fVerbose) { if(-1 == pInterfaceResults->DefGw.dwNumReachable) PrintMessage(pParams, IDS_DEFGW_12002 ); //IDS_DEFGW_12002 " There is no gateway defined for this adapter.\n"
else if( 0 == pInterfaceResults->DefGw.dwNumReachable) PrintMessage(pParams, IDS_DEFGW_12001); //IDS_DEFGW_12001 " No gateway reachable for this adapter. \n"
else if (pParams->fReallyVerbose) PrintMessage(pParams, IDS_DEFGW_12012); //IDS_DEFGW_12012 " At least one gateway for this adapter is reachable. \n"
PrintNewLine(pParams, 1); } }
//----------------------------------------------------------------
//
// DefGwCleanup
//
// Author NSun
//
//------------------------------------------------------------------
void DefGwCleanup(IN NETDIAG_PARAMS *pParams, IN OUT NETDIAG_RESULT *pResults) { int i; for(i = 0; i < pResults->cNumInterfaces; i++) { MessageListCleanUp(&pResults->pArrayInterface[i].DefGw.lmsgOutput); } }
|