windows-nt/Source/XPSP1/NT/net/rras/netsh/ipx/ipxmon/ipxhandle.c
2020-09-26 16:20:57 +08:00

1515 lines
31 KiB
C

/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
routing\netsh\ipx\ipxhandle.c
Abstract:
IPX Command handler.
Revision History:
V Raman 12/2/98 Created
--*/
#include "precomp.h"
#pragma hdrstop
DWORD
HandleIpxInterface(
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN IPX_OPERATION ioOP
);
DWORD
HandleIpxStaticRoute(
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN IPX_OPERATION ioOP
);
DWORD
HandleIpxStaticService(
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN IPX_OPERATION ioOP
);
DWORD
HandleIpxTrafficFilters(
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN IPX_OPERATION ioOP
);
//
// Handle static route operations
//
DWORD
HandleIpxAddRoute(
IN LPCWSTR pwszMachineName,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT PBOOL pbDone
)
/*++
Routine Description :
This function handles addition of static IPX routes by
mapping the parameters to those required by the corresp.
routemon routine.
Arguments :
ppwcArguments - list of arguments to the add route command
dwCurrentIndex - index of current argument in the argument table
dwArgCount - Number of arguments in the argument table
pbDone - As yet undetermined
Return Value
NO_ERROR - Success
--*/
{
return HandleIpxStaticRoute(
ppwcArguments, dwCurrentIndex, dwArgCount, IPX_OPERATION_ADD
);
}
DWORD
HandleIpxDelRoute(
IN LPCWSTR pwszMachine,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT BOOL *pbDone
)
/*++
Routine Description :
This function handles deletion of static IPX routes by
mapping the parameters to those required by the corresp.
routemon routine.
Arguments :
ppwcArguments - list of arguments to the add route command
dwCurrentIndex - index of current argument in the argument table
dwArgCount - Number of arguments in the argument table
pbDone - As yet undetermined
Return Value
NO_ERROR - Success
--*/
{
return HandleIpxStaticRoute(
ppwcArguments, dwCurrentIndex, dwArgCount, IPX_OPERATION_DELETE
);
}
DWORD
HandleIpxSetRoute(
IN LPCWSTR pwszMachine,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT BOOL *pbDone
)
/*++
Routine Description :
This function handles update of static IPX routes by
mapping the parameters to those required by the corresp.
routemon routine.
Arguments :
ppwcArguments - list of arguments to the add route command
dwCurrentIndex - index of current argument in the argument table
dwArgCount - Number of arguments in the argument table
pbDone - As yet undetermined
Return Value
NO_ERROR - Success
--*/
{
return HandleIpxStaticRoute(
ppwcArguments, dwCurrentIndex, dwArgCount, IPX_OPERATION_SET
);
}
DWORD
HandleIpxShowRoute(
IN LPCWSTR pwszMachine,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT BOOL *pbDone
)
/*++
Routine Description :
This function handles display of static IPX routes by
mapping the parameters to those required by the corresp.
routemon routine.
Arguments :
ppwcArguments - list of arguments to the add route command
dwCurrentIndex - index of current argument in the argument table
dwArgCount - Number of arguments in the argument table
pbDone - As yet undetermined
Return Value
NO_ERROR - Success
--*/
{
return HandleIpxStaticRoute(
ppwcArguments, dwCurrentIndex, dwArgCount, IPX_OPERATION_SHOW
);
}
DWORD
HandleIpxStaticRoute(
IN OUT LPWSTR *ppwcOldArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwOldArgCount,
IN IPX_OPERATION ioOP
)
/*++
Routine Description :
This routine munges the command line and invokes the appropriate
routemon routine to handle static route operations
Arguments :
ppwcArguments - command line argument array
dwCurrentIndex - current argument under consideration
dwArgCount - Number of arguments in ppwcArguments
bAdd - flag indicating whether IPX is being added or deleted
Return Value :
--*/
{
DWORD dwErr;
BOOL bFreeNewArg = FALSE;
PWCHAR pwszIfName;
DWORD dwArgCount = dwOldArgCount;
PWCHAR *ppwcArguments = NULL;
//
// Check if name= option is specified
//
pwszIfName = TOKEN_INTERFACE_NAME;
if ( pwszIfName == NULL )
{
dwErr = ERROR_NOT_ENOUGH_MEMORY;
DisplayError( g_hModule, dwErr );
return dwErr;
}
do {
// Munge arguments into old format
dwErr = MungeArguments(
ppwcOldArguments, dwOldArgCount, (PBYTE *) &ppwcArguments,
&dwArgCount, &bFreeNewArg
);
if (dwErr)
{
break;
}
if ( ( dwCurrentIndex < dwArgCount ) &&
!_wcsnicmp(
ppwcArguments[ dwCurrentIndex ], pwszIfName, wcslen( pwszIfName )
) )
{
//
// ok name= option tag specified, remove it and the following space
//
wcscpy(
ppwcArguments[ dwCurrentIndex ],
&ppwcArguments[ dwCurrentIndex ][ wcslen( pwszIfName ) + 2 ]
);
}
//
// Now invoke the original routemon routine with what looks
// like an appriate command line
//
switch ( ioOP )
{
case IPX_OPERATION_ADD :
dwErr = CreateStRt(
dwArgCount - dwCurrentIndex,
ppwcArguments + dwCurrentIndex
);
break;
case IPX_OPERATION_DELETE :
dwErr = DeleteStRt(
dwArgCount - dwCurrentIndex,
ppwcArguments + dwCurrentIndex
);
break;
case IPX_OPERATION_SET :
dwErr = SetStRt(
dwArgCount - dwCurrentIndex,
ppwcArguments + dwCurrentIndex
);
break;
case IPX_OPERATION_SHOW :
dwErr = ShowStRt(
dwArgCount - dwCurrentIndex,
ppwcArguments + dwCurrentIndex,
FALSE
);
break;
}
} while (FALSE);
if ( bFreeNewArg )
{
FreeArgTable( dwOldArgCount, ppwcArguments );
}
return dwErr;
}
//
// Handle static service operations
//
DWORD
HandleIpxAddService(
IN LPCWSTR pwszMachine,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT BOOL *pbDone
)
/*++
Routine Description :
This function handles addition of static IPX services by
mapping the parameters to those required by the corresp.
routemon routine.
Arguments :
ppwcArguments - list of arguments to the add route command
dwCurrentIndex - index of current argument in the argument table
dwArgCount - Number of arguments in the argument table
pbDone - As yet undetermined
Return Value
NO_ERROR - Success
--*/
{
return HandleIpxStaticService(
ppwcArguments, dwCurrentIndex, dwArgCount, IPX_OPERATION_ADD
);
}
DWORD
HandleIpxDelService(
IN LPCWSTR pwszMachine,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT BOOL *pbDone
)
/*++
Routine Description :
This function handles deletion of static IPX services by
mapping the parameters to those required by the corresp.
routemon routine.
Arguments :
ppwcArguments - list of arguments to the add route command
dwCurrentIndex - index of current argument in the argument table
dwArgCount - Number of arguments in the argument table
pbDone - As yet undetermined
Return Value
NO_ERROR - Success
--*/
{
return HandleIpxStaticService(
ppwcArguments, dwCurrentIndex, dwArgCount, IPX_OPERATION_DELETE
);
}
DWORD
HandleIpxSetService(
IN LPCWSTR pwszMachine,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT BOOL *pbDone
)
/*++
Routine Description :
This function handles update of static IPX services by
mapping the parameters to those required by the corresp.
routemon routine.
Arguments :
ppwcArguments - list of arguments to the add route command
dwCurrentIndex - index of current argument in the argument table
dwArgCount - Number of arguments in the argument table
pbDone - As yet undetermined
Return Value
NO_ERROR - Success
--*/
{
return HandleIpxStaticService(
ppwcArguments, dwCurrentIndex, dwArgCount, IPX_OPERATION_SET
);
}
DWORD
HandleIpxShowService(
IN LPCWSTR pwszMachine,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT BOOL *pbDone
)
/*++
Routine Description :
This function handles display of static IPX services by
mapping the parameters to those required by the corresp.
routemon routine.
Arguments :
ppwcArguments - list of arguments to the add route command
dwCurrentIndex - index of current argument in the argument table
dwArgCount - Number of arguments in the argument table
pbDone - As yet undetermined
Return Value
NO_ERROR - Success
--*/
{
return HandleIpxStaticService(
ppwcArguments, dwCurrentIndex, dwArgCount, IPX_OPERATION_SHOW
);
}
DWORD
HandleIpxStaticService(
IN OUT LPWSTR *ppwcOldArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwOldArgCount,
IN IPX_OPERATION ioOP
)
/*++
Routine Description :
This routine munges the command line and invokes the appropriate
routemon routine to handle static service operations
Arguments :
ppwcArguments - command line argument array
dwCurrentIndex - current argument under consideration
dwArgCount - Number of arguments in ppwcArguments
bAdd - flag indicating whether IPX is being added or deleted
Return Value :
--*/
{
DWORD dwErr;
BOOL bFreeNewArg = FALSE;
PWCHAR pwszIfName;
DWORD dwArgCount = dwOldArgCount;
PWCHAR *ppwcArguments = NULL;
//
// Check if name= option is specified
//
pwszIfName = TOKEN_INTERFACE_NAME;
if ( pwszIfName == NULL )
{
dwErr = ERROR_NOT_ENOUGH_MEMORY;
DisplayError( g_hModule, dwErr );
return dwErr;
}
do {
// Munge arguments into old format
dwErr = MungeArguments(
ppwcOldArguments, dwOldArgCount, (PBYTE *) &ppwcArguments,
&dwArgCount, &bFreeNewArg
);
if (dwErr)
{
break;
}
if ( ( dwCurrentIndex < dwArgCount ) &&
!_wcsnicmp(
ppwcArguments[ dwCurrentIndex ], pwszIfName, wcslen( pwszIfName )
) )
{
//
// ok name= option tag specified, remove it and the following space
//
wcscpy(
ppwcArguments[ dwCurrentIndex ],
&ppwcArguments[ dwCurrentIndex ][ wcslen( pwszIfName ) + 2 ]
);
}
//
// Now invoke the original routemon routine with what looks
// like an appriate command line
//
switch ( ioOP )
{
case IPX_OPERATION_ADD :
dwErr = CreateStSvc(
dwArgCount - dwCurrentIndex,
ppwcArguments + dwCurrentIndex
);
break;
case IPX_OPERATION_DELETE :
dwErr = DeleteStSvc(
dwArgCount - dwCurrentIndex,
ppwcArguments + dwCurrentIndex
);
break;
case IPX_OPERATION_SET :
dwErr = SetStSvc(
dwArgCount - dwCurrentIndex,
ppwcArguments + dwCurrentIndex
);
break;
case IPX_OPERATION_SHOW :
dwErr = ShowStSvc(
dwArgCount - dwCurrentIndex,
ppwcArguments + dwCurrentIndex,
FALSE
);
break;
}
} while (FALSE);
if ( bFreeNewArg )
{
FreeArgTable( dwOldArgCount, ppwcArguments );
}
return dwErr;
}
//
// Handle packet filter operations
//
DWORD
HandleIpxAddFilter(
IN LPCWSTR pwszMachine,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT BOOL *pbDone
)
/*++
Routine Description :
This function handles addition of IPX traffic filters by
mapping the parameters to those required by the corresp.
routemon routine.
Arguments :
ppwcArguments - list of arguments to the add route command
dwCurrentIndex - index of current argument in the argument table
dwArgCount - Number of arguments in the argument table
pbDone - As yet undetermined
Return Value
NO_ERROR - Success
--*/
{
return HandleIpxTrafficFilters(
ppwcArguments, dwCurrentIndex, dwArgCount, IPX_OPERATION_ADD
);
}
DWORD
HandleIpxDelFilter(
IN LPCWSTR pwszMachine,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT BOOL *pbDone
)
/*++
Routine Description :
This function handles deletion of IPX traffic filters by
mapping the parameters to those required by the corresp.
routemon routine.
Arguments :
ppwcArguments - list of arguments to the add route command
dwCurrentIndex - index of current argument in the argument table
dwArgCount - Number of arguments in the argument table
pbDone - As yet undetermined
Return Value
NO_ERROR - Success
--*/
{
return HandleIpxTrafficFilters(
ppwcArguments, dwCurrentIndex, dwArgCount, IPX_OPERATION_DELETE
);
}
DWORD
HandleIpxSetFilter(
IN LPCWSTR pwszMachine,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT BOOL *pbDone
)
/*++
Routine Description :
This function handles update of IPX traffic filters by
mapping the parameters to those required by the corresp.
routemon routine.
Arguments :
ppwcArguments - list of arguments to the add route command
dwCurrentIndex - index of current argument in the argument table
dwArgCount - Number of arguments in the argument table
pbDone - As yet undetermined
Return Value
NO_ERROR - Success
--*/
{
return HandleIpxTrafficFilters(
ppwcArguments, dwCurrentIndex, dwArgCount, IPX_OPERATION_SET
);
}
DWORD
HandleIpxShowFilter(
IN LPCWSTR pwszMachine,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT BOOL *pbDone
)
/*++
Routine Description :
This function handles display of IPX traffic filters by
mapping the parameters to those required by the corresp.
routemon routine.
Arguments :
ppwcArguments - list of arguments to the add route command
dwCurrentIndex - index of current argument in the argument table
dwArgCount - Number of arguments in the argument table
pbDone - As yet undetermined
Return Value
NO_ERROR - Success
--*/
{
return HandleIpxTrafficFilters(
ppwcArguments, dwCurrentIndex, dwArgCount, IPX_OPERATION_SHOW
);
}
DWORD
HandleIpxTrafficFilters(
IN OUT LPWSTR *ppwcOldArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwOldArgCount,
IN IPX_OPERATION ioOP
)
/*++
Routine Description :
This routine munges the command line and invokes the appropriate
routemon routine to handle traffic filter operations
Arguments :
ppwcArguments - command line argument array
dwCurrentIndex - current argument under consideration
dwArgCount - Number of arguments in ppwcArguments
bAdd - flag indicating whether IPX is being added or deleted
Return Value :
--*/
{
DWORD dwErr;
BOOL bFreeNewArg = FALSE;
PWCHAR pwszIfName;
DWORD dwArgCount = dwOldArgCount;
PWCHAR *ppwcArguments = NULL;
//
// Check if name= option is specified
//
pwszIfName = TOKEN_INTERFACE_NAME;
if ( pwszIfName == NULL )
{
dwErr = ERROR_NOT_ENOUGH_MEMORY;
DisplayError( g_hModule, dwErr );
return dwErr;
}
do {
// Munge arguments into old format
dwErr = MungeArguments(
ppwcOldArguments, dwOldArgCount, (PBYTE *) &ppwcArguments,
&dwArgCount, &bFreeNewArg
);
if (dwErr)
{
break;
}
if ( ( dwCurrentIndex < dwArgCount ) &&
!_wcsnicmp(
ppwcArguments[ dwCurrentIndex ], pwszIfName, wcslen( pwszIfName )
) )
{
//
// ok name= option tag specified, remove it and the following space
//
wcscpy(
ppwcArguments[ dwCurrentIndex ],
&ppwcArguments[ dwCurrentIndex ][ wcslen( pwszIfName ) + 2 ]
);
}
//
// Now invoke the original routemon routine with what looks
// like an appriate command line
//
switch ( ioOP )
{
case IPX_OPERATION_ADD :
dwErr = CreateTfFlt(
dwArgCount - dwCurrentIndex,
ppwcArguments + dwCurrentIndex
);
break;
case IPX_OPERATION_DELETE :
dwErr = DeleteTfFlt(
dwArgCount - dwCurrentIndex,
ppwcArguments + dwCurrentIndex
);
break;
case IPX_OPERATION_SET :
dwErr = SetTfFlt(
dwArgCount - dwCurrentIndex,
ppwcArguments + dwCurrentIndex
);
break;
case IPX_OPERATION_SHOW :
dwErr = ShowTfFlt(
dwArgCount - dwCurrentIndex,
ppwcArguments + dwCurrentIndex,
FALSE
);
break;
}
} while (FALSE);
if ( bFreeNewArg )
{
FreeArgTable( dwOldArgCount, ppwcArguments );
}
return dwErr;
}
//
// Handle interface operations
//
DWORD
HandleIpxAddInterface(
IN LPCWSTR pwszMachine,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT BOOL *pbDone
)
/*++
Routine Description :
This routine munges the command line and invokes the appropriate
routemon routine to handle interface addition
Arguments :
ppwcArguments - command line argument array
dwCurrentIndex - current argument under consideration
dwArgCount - Number of arguments in ppwcArguments
pbDone - Don't know
Return Value :
--*/
{
return HandleIpxInterface(
ppwcArguments, dwCurrentIndex, dwArgCount, IPX_OPERATION_ADD
);
}
DWORD
HandleIpxDelInterface(
IN LPCWSTR pwszMachine,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT BOOL *pbDone
)
/*++
Routine Description :
This routine munges the command line and invokes the appropriate
routemon routine to handle interface addition
Arguments :
ppwcArguments - command line argument array
dwCurrentIndex - current argument under consideration
dwArgCount - Number of arguments in ppwcArguments
pbDone - Don't know
Return Value :
--*/
{
return HandleIpxInterface(
ppwcArguments, dwCurrentIndex, dwArgCount, IPX_OPERATION_DELETE
);
}
DWORD
HandleIpxSetInterface(
IN LPCWSTR pwszMachine,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT BOOL *pbDone
)
/*++
Routine Description :
This routine munges the command line and invokes the appropriate
routemon routine to handle interface addition
Arguments :
ppwcArguments - command line argument array
dwCurrentIndex - current argument under consideration
dwArgCount - Number of arguments in ppwcArguments
pbDone - Don't know
Return Value :
--*/
{
return HandleIpxInterface(
ppwcArguments, dwCurrentIndex, dwArgCount, IPX_OPERATION_SET
);
}
DWORD
HandleIpxShowInterface(
IN LPCWSTR pwszMachine,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT BOOL *pbDone
)
/*++
Routine Description :
This routine munges the command line and invokes the appropriate
routemon routine to handle interface addition
Arguments :
ppwcArguments - command line argument array
dwCurrentIndex - current argument under consideration
dwArgCount - Number of arguments in ppwcArguments
pbDone - Don't know
Return Value :
--*/
{
return HandleIpxInterface(
ppwcArguments, dwCurrentIndex, dwArgCount, IPX_OPERATION_SHOW
);
}
DWORD
HandleIpxInterface(
IN OUT LPWSTR *ppwcOldArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwOldArgCount,
IN IPX_OPERATION ioOP
)
/*++
Routine Description :
This routine munges the command line and invokes the appropriate
routemon routine to handle interface addition
Arguments :
ppwcArguments - command line argument array
dwCurrentIndex - current argument under consideration
dwArgCount - Number of arguments in ppwcArguments
bAdd - flag indicating whether IPX is being added or deleted
Return Value :
--*/
{
DWORD dwErr;
BOOL bFreeNewArg = FALSE;
PWCHAR pwszIfName;
DWORD dwArgCount = dwOldArgCount;
PWCHAR *ppwcArguments = NULL;
//
// Check if name= option is specified
//
pwszIfName = TOKEN_INTERFACE_NAME;
if ( pwszIfName == NULL )
{
dwErr = ERROR_NOT_ENOUGH_MEMORY;
DisplayError( g_hModule, dwErr );
return dwErr;
}
do {
// Munge arguments into old format
dwErr = MungeArguments(
ppwcOldArguments, dwOldArgCount, (PBYTE *) &ppwcArguments,
&dwArgCount, &bFreeNewArg
);
if (dwErr)
{
break;
}
if ( ( dwCurrentIndex < dwArgCount ) &&
!_wcsnicmp(
ppwcArguments[ dwCurrentIndex ], pwszIfName, wcslen( pwszIfName )
) )
{
//
// ok name= option tag specified, remove it and the following space
//
wcscpy(
ppwcArguments[ dwCurrentIndex ],
&ppwcArguments[ dwCurrentIndex ][ wcslen( pwszIfName ) + 2 ]
);
}
//
// Now invoke the original routemon routine with what looks
// like an appriate command line
//
switch ( ioOP )
{
case IPX_OPERATION_ADD :
dwErr = InstallIpx(
dwArgCount - dwCurrentIndex,
ppwcArguments + dwCurrentIndex
);
break;
case IPX_OPERATION_DELETE :
dwErr = RemoveIpx(
dwArgCount - dwCurrentIndex,
ppwcArguments + dwCurrentIndex
);
break;
case IPX_OPERATION_SET :
dwErr = SetIpxIf(
dwArgCount - dwCurrentIndex,
ppwcArguments + dwCurrentIndex
);
break;
case IPX_OPERATION_SHOW :
dwErr = ShowIpxIf(
dwArgCount - dwCurrentIndex,
ppwcArguments + dwCurrentIndex,
FALSE
);
break;
}
} while (FALSE);
if ( bFreeNewArg )
{
FreeArgTable( dwOldArgCount, ppwcArguments );
}
return dwErr;
}
//
// Handle loglevel operations
//
DWORD
HandleIpxSetLoglevel(
IN LPCWSTR pwszMachine,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT BOOL *pbDone
)
{
DWORD dwErr;
BOOL bFreeNewArg = FALSE;
DWORD dwNewArgCount = dwArgCount;
PWCHAR *ppwcNewArguments = NULL;
do {
// Munge arguments into old format
dwErr = MungeArguments(
ppwcArguments, dwArgCount, (PBYTE *) &ppwcNewArguments,
&dwNewArgCount, &bFreeNewArg
);
if (dwErr)
{
break;
}
dwErr= SetIpxGl( dwNewArgCount - dwCurrentIndex,
ppwcNewArguments + dwCurrentIndex );
} while (FALSE);
if ( bFreeNewArg )
{
FreeArgTable( dwArgCount, ppwcNewArguments );
}
return dwErr;
}
DWORD
HandleIpxShowLoglevel(
IN LPCWSTR pwszMachine,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT BOOL *pbDone
)
{
return ShowIpxGl(
dwArgCount - dwCurrentIndex,
ppwcArguments + dwCurrentIndex,
FALSE
);
}
DWORD
HandleIpxUpdate(
IN LPCWSTR pwszMachine,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT BOOL *pbDone
)
{
return NO_ERROR;
}
DWORD
HandleIpxShowRouteTable(
IN LPCWSTR pwszMachine,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT BOOL *pbDone
)
{
return ShowRoute(
dwArgCount - dwCurrentIndex,
ppwcArguments + dwCurrentIndex
);
}
DWORD
HandleIpxShowServiceTable(
IN LPCWSTR pwszMachine,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT BOOL *pbDone
)
{
return ShowService(
dwArgCount - dwCurrentIndex,
ppwcArguments + dwCurrentIndex
);
}
DWORD
IpxDump(
IN LPCWSTR pwszRouter,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwArgCount,
IN LPCVOID pvData
)
{
BOOL bDone;
DWORD dwErr;
dwErr = ConnectToRouter(pwszRouter);
if (dwErr)
{
return dwErr;
}
DisplayIPXMessage (g_hModule, MSG_IPX_DUMP_HEADER );
DisplayMessageT( DMP_IPX_HEADER );
DumpIpxInformation(pwszRouter, ppwcArguments,dwArgCount,g_hMIBServer);
DisplayMessageT( DMP_IPX_FOOTER );
DisplayIPXMessage (g_hModule, MSG_IPX_DUMP_FOOTER );
return NO_ERROR;
}
VOID
DumpIpxInformation(
IN LPCWSTR pwszMachineName,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwArgCount,
IN MIB_SERVER_HANDLE hMibServer
)
{
DWORD dwErr, dwRead = 0, dwTot = 0, i;
PMPR_INTERFACE_0 IfList;
WCHAR IfDisplayName[ MAX_INTERFACE_NAME_LEN + 1 ];
DWORD dwSize = sizeof(IfDisplayName);
PWCHAR argv[1];
//
// dump globals
//
ShowIpxGl( 0, NULL, TRUE );
//
// dump interfaces
//
ShowIpxIf( 0, NULL, TRUE );
//
// enumerate interfaces
//
if ( g_hMprAdmin )
{
dwErr = MprAdminInterfaceEnum(
g_hMprAdmin, 0, (unsigned char **)&IfList, MAXULONG, &dwRead,
&dwTot,NULL
);
}
else
{
dwErr = MprConfigInterfaceEnum(
g_hMprConfig, 0, (unsigned char **)&IfList, MAXULONG, &dwRead,
&dwTot,NULL
);
}
if ( dwErr != NO_ERROR )
{
DisplayError( g_hModule, dwErr);
return;
}
//
// enumerate filters on each interface
//
DisplayIPXMessage (g_hModule, MSG_IPX_DUMP_TRAFFIC_FILTER_HEADER );
for ( i = 0; i < dwRead; i++ )
{
dwErr = IpmontrGetFriendlyNameFromIfName(
IfList[i].wszInterfaceName, IfDisplayName, &dwSize
);
if ( dwErr == NO_ERROR )
{
argv[0] = IfDisplayName;
ShowTfFlt( 1, argv, TRUE );
}
}
//
// Enumerate static routes on each interface
//
DisplayIPXMessage (g_hModule, MSG_IPX_DUMP_STATIC_ROUTE_HEADER );
for ( i = 0; i < dwRead; i++ )
{
dwErr = IpmontrGetFriendlyNameFromIfName(
IfList[i].wszInterfaceName, IfDisplayName, &dwSize
);
if ( dwErr == NO_ERROR )
{
argv[0] = IfDisplayName;
ShowStRt( 1, argv, TRUE );
}
}
//
// Enumerate static services on each interface
//
DisplayIPXMessage (g_hModule, MSG_IPX_DUMP_STATIC_SERVICE_HEADER );
for ( i = 0; i < dwRead; i++ )
{
dwErr = IpmontrGetFriendlyNameFromIfName(
IfList[i].wszInterfaceName, IfDisplayName, &dwSize
);
if ( dwErr == NO_ERROR )
{
argv[0] = IfDisplayName;
ShowStSvc( 1, argv, TRUE );
}
}
if ( g_hMprAdmin )
{
MprAdminBufferFree( IfList );
}
else
{
MprConfigBufferFree( IfList );
}
}