1303 lines
35 KiB
C
1303 lines
35 KiB
C
/*++
|
|
|
|
Copyright (c) 1995 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
nbifs.c
|
|
|
|
Abstract:
|
|
|
|
IPX Router Console Monitoring and Configuration tool.
|
|
NBIPX Interface configuration and monitoring.
|
|
|
|
Author:
|
|
|
|
Vadim Eydelman 06/07/1996
|
|
|
|
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
#pragma hdrstop
|
|
|
|
|
|
DWORD
|
|
MIBGetNbIpxIf(
|
|
PWCHAR InterfaceNameW,
|
|
HANDLE hFile
|
|
);
|
|
|
|
DWORD
|
|
CfgGetNbIpxIf (
|
|
LPWSTR InterfaceNameW,
|
|
HANDLE hFile
|
|
);
|
|
|
|
DWORD
|
|
MIBEnumNbIpxIfs (
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
CfgEnumNbIpxIfs (
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
CfgSetNbIpxIf (
|
|
LPWSTR InterfaceNameW,
|
|
PULONG pAccept OPTIONAL,
|
|
PULONG pDeliver OPTIONAL
|
|
);
|
|
|
|
DWORD
|
|
AdmSetNbIpxIf (
|
|
LPWSTR InterfaceNameW,
|
|
PULONG pAccept OPTIONAL,
|
|
PULONG pDeliver OPTIONAL
|
|
);
|
|
|
|
DWORD
|
|
GetNbIpxClientIf (
|
|
PWCHAR InterfaceNameW,
|
|
UINT msg,
|
|
HANDLE hFile
|
|
);
|
|
|
|
|
|
|
|
DWORD
|
|
APIENTRY
|
|
HelpNbIf (
|
|
IN int argc,
|
|
IN WCHAR *argv[]
|
|
)
|
|
{
|
|
DisplayMessage (g_hModule, HLP_IPX_NBIF);
|
|
return 0;
|
|
}
|
|
|
|
|
|
DWORD
|
|
APIENTRY
|
|
ShowNbIf (
|
|
IN int argc,
|
|
IN WCHAR *argv[],
|
|
IN HANDLE hFile
|
|
)
|
|
{
|
|
WCHAR IfName[ MAX_INTERFACE_NAME_LEN ];
|
|
DWORD rc, dwSize = sizeof(IfName);
|
|
|
|
|
|
if (argc < 1)
|
|
{
|
|
if (g_hMIBServer)
|
|
{
|
|
rc = MIBEnumNbIpxIfs ();
|
|
|
|
if (rc == NO_ERROR)
|
|
{
|
|
rc = GetNbIpxClientIf (
|
|
VAL_DIALINCLIENT,
|
|
MSG_CLIENT_NBIF_MIB_TABLE_FMT,
|
|
NULL
|
|
);
|
|
}
|
|
else
|
|
{
|
|
if ( !hFile ) { DisplayIPXMessage (g_hModule, MSG_REGISTRY_FALLBACK); }
|
|
goto EnumerateThroughCfg;
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
EnumerateThroughCfg:
|
|
|
|
rc = CfgEnumNbIpxIfs ();
|
|
|
|
if (rc == NO_ERROR)
|
|
{
|
|
rc = GetNbIpxClientIf (
|
|
VAL_DIALINCLIENT,
|
|
MSG_CLIENT_NBIF_CFG_TABLE_FMT,
|
|
NULL
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
unsigned count;
|
|
|
|
#define InterfaceNameW argv[0]
|
|
count = wcslen( InterfaceNameW );
|
|
|
|
if ( !_wcsicmp( argv[0], VAL_DIALINCLIENT ) )
|
|
{
|
|
rc = GetNbIpxClientIf(
|
|
VAL_DIALINCLIENT, MSG_CLIENT_NBIF_CFG_SCREEN_FMT, hFile
|
|
);
|
|
}
|
|
|
|
else if ((count > 0) && (count <= MAX_INTERFACE_NAME_LEN))
|
|
{
|
|
if (g_hMIBServer)
|
|
{
|
|
//======================================
|
|
// Translate the Interface Name
|
|
//======================================
|
|
|
|
rc = IpmontrGetIfNameFromFriendlyName(
|
|
InterfaceNameW, IfName, &dwSize
|
|
);
|
|
|
|
if ( rc == NO_ERROR )
|
|
{
|
|
rc = MIBGetNbIpxIf ( IfName, hFile );
|
|
|
|
if (rc != NO_ERROR)
|
|
{
|
|
if ( !hFile ) { DisplayIPXMessage (g_hModule, MSG_REGISTRY_FALLBACK); }
|
|
goto GetIfFromCfg;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ( !hFile ) { DisplayError( g_hModule, rc ); }
|
|
}
|
|
}
|
|
else
|
|
{
|
|
GetIfFromCfg:
|
|
//======================================
|
|
// Translate the Interface Name
|
|
//======================================
|
|
|
|
rc = IpmontrGetIfNameFromFriendlyName(
|
|
InterfaceNameW, IfName, &dwSize
|
|
);
|
|
|
|
if ( rc == NO_ERROR )
|
|
{
|
|
rc = CfgGetNbIpxIf ( IfName, hFile );
|
|
}
|
|
|
|
else
|
|
{
|
|
if ( !hFile ) { DisplayError( g_hModule, rc ); }
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ( !hFile ) { DisplayIPXMessage (g_hModule, MSG_INVALID_INTERFACE_NAME); }
|
|
rc = ERROR_INVALID_PARAMETER;
|
|
}
|
|
}
|
|
|
|
return rc;
|
|
|
|
#undef InterfaceNameW
|
|
}
|
|
|
|
|
|
DWORD
|
|
APIENTRY
|
|
SetNbIf (
|
|
IN int argc,
|
|
IN WCHAR *argv[]
|
|
)
|
|
{
|
|
LPWSTR InterfaceNameW;
|
|
WCHAR IfName[ MAX_INTERFACE_NAME_LEN + 1 ];
|
|
DWORD rc, dwSize = sizeof(IfName);
|
|
|
|
|
|
if (argc >= 1)
|
|
{
|
|
unsigned count;
|
|
BOOLEAN client = FALSE;
|
|
|
|
|
|
#define InterfaceNameW argv[0]
|
|
|
|
if ( !_wcsicmp( argv[0],VAL_DIALINCLIENT ) )
|
|
{
|
|
client = TRUE;
|
|
}
|
|
else
|
|
{
|
|
count = wcslen (InterfaceNameW);
|
|
}
|
|
|
|
if (client || ((count > 0) && (count <= MAX_INTERFACE_NAME_LEN)))
|
|
{
|
|
int i;
|
|
ULONG accept, deliver;
|
|
PULONG pAccept = NULL, pDeliver = NULL;
|
|
|
|
|
|
for ( i = 1; i < argc; i++ )
|
|
{
|
|
if ( !_wcsicmp( argv[i], TOKEN_BCASTACCEPT ) )
|
|
{
|
|
if ( (pAccept == NULL) && (i < argc - 1) &&
|
|
!MatchEnumTag(
|
|
g_hModule, argv[i+1], NUM_TOKENS_IN_TABLE( AdminStates ),
|
|
AdminStates, &accept
|
|
) )
|
|
{
|
|
i += 1;
|
|
pAccept = &accept;
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( !_wcsicmp( argv[i], TOKEN_BCASTDELIVER ) )
|
|
{
|
|
if ( (pDeliver == NULL) && (i < argc - 1) &&
|
|
!MatchEnumTag (g_hModule, argv[i+1],
|
|
NUM_TOKENS_IN_TABLE( NbDeliverStates ),
|
|
NbDeliverStates, &deliver) )
|
|
{
|
|
i += 1;
|
|
pDeliver = &deliver;
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (pAccept == NULL)
|
|
{
|
|
if ( !MatchEnumTag(
|
|
g_hModule, argv[ i ], NUM_TOKENS_IN_TABLE( AdminStates ),
|
|
AdminStates, &accept
|
|
))
|
|
{
|
|
pAccept = &accept;
|
|
}
|
|
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
else if (pDeliver == NULL)
|
|
{
|
|
if ( !MatchEnumTag(
|
|
g_hModule, argv[i], NUM_TOKENS_IN_TABLE( NbDeliverStates ),
|
|
NbDeliverStates, &deliver
|
|
) )
|
|
{
|
|
pDeliver = &deliver;
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
if (i == argc)
|
|
{
|
|
if (!client)
|
|
{
|
|
DWORD rc2;
|
|
|
|
//======================================
|
|
// Translate the Interface Name
|
|
//======================================
|
|
|
|
rc = IpmontrGetIfNameFromFriendlyName(
|
|
InterfaceNameW, IfName, &dwSize
|
|
);
|
|
|
|
if ( rc == NO_ERROR )
|
|
{
|
|
rc2 = CfgSetNbIpxIf( IfName, pAccept, pDeliver);
|
|
|
|
if (rc2 == NO_ERROR)
|
|
{
|
|
if (g_hMprAdmin)
|
|
{
|
|
rc = AdmSetNbIpxIf( IfName, pAccept, pDeliver );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
rc = rc2;
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
DisplayError( g_hModule, rc );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
rc = CfgSetNbIpxIf (NULL, pAccept, pDeliver);
|
|
|
|
if (rc == NO_ERROR)
|
|
{
|
|
if (g_hMprAdmin)
|
|
{
|
|
rc = AdmSetNbIpxIf (NULL, pAccept, pDeliver);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
DisplayMessage (g_hModule, HLP_IPX_NBIF);
|
|
rc = ERROR_INVALID_PARAMETER;
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
DisplayIPXMessage (g_hModule, MSG_INVALID_INTERFACE_NAME);
|
|
rc = ERROR_INVALID_PARAMETER;
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
DisplayMessage (g_hModule, HLP_IPX_NBIF);
|
|
rc = ERROR_INVALID_PARAMETER;
|
|
}
|
|
|
|
return rc;
|
|
|
|
#undef InterfaceNameW
|
|
}
|
|
|
|
|
|
DWORD
|
|
MIBGetNbIpxIf (
|
|
PWCHAR InterfaceNameW,
|
|
HANDLE hFile
|
|
)
|
|
{
|
|
DWORD rc, i;
|
|
DWORD sz;
|
|
IPX_MIB_GET_INPUT_DATA MibGetInputData;
|
|
PIPX_INTERFACE pIf;
|
|
WCHAR IfName[ MAX_INTERFACE_NAME_LEN + 1 ];
|
|
DWORD dwSize = sizeof(IfName);
|
|
|
|
MibGetInputData.TableId = IPX_INTERFACE_TABLE;
|
|
|
|
rc = GetIpxInterfaceIndex (
|
|
g_hMIBServer, InterfaceNameW,
|
|
&MibGetInputData.MibIndex.InterfaceTableIndex.InterfaceIndex
|
|
);
|
|
|
|
if (rc == NO_ERROR)
|
|
{
|
|
rc = MprAdminMIBEntryGet(
|
|
g_hMIBServer, PID_IPX, IPX_PROTOCOL_BASE, &MibGetInputData,
|
|
sizeof(IPX_MIB_GET_INPUT_DATA), (LPVOID * ) & pIf, &sz
|
|
);
|
|
|
|
if (rc == NO_ERROR && pIf)
|
|
{
|
|
PWCHAR buffer[2];
|
|
|
|
//======================================
|
|
// Translate the Interface Name
|
|
//======================================
|
|
|
|
rc = IpmontrGetFriendlyNameFromIfName( InterfaceNameW, IfName, &dwSize );
|
|
|
|
if ( rc == NO_ERROR )
|
|
{
|
|
buffer[ 0 ] = GetEnumString(
|
|
g_hModule, pIf->NetbiosAccept,
|
|
NUM_TOKENS_IN_TABLE( AdminStates ),
|
|
AdminStates
|
|
);
|
|
|
|
buffer[ 1 ] = GetEnumString(
|
|
g_hModule, pIf->NetbiosDeliver,
|
|
NUM_TOKENS_IN_TABLE( NbDeliverStates ),
|
|
NbDeliverStates
|
|
);
|
|
|
|
if ( buffer[ 0 ] && buffer[ 1 ] )
|
|
{
|
|
if ( hFile )
|
|
{
|
|
DisplayMessageT(
|
|
DMP_IPX_NB_SET_INTERFACE, IfName, buffer[ 0 ],
|
|
buffer[ 1 ]
|
|
);
|
|
}
|
|
|
|
else
|
|
{
|
|
DisplayIPXMessage(
|
|
g_hModule, MSG_NBIF_MIB_SCREEN_FMT,
|
|
IfName, buffer[ 0 ], buffer[ 1 ],
|
|
pIf->IfStats.NetbiosReceived,
|
|
pIf->IfStats.NetbiosSent
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
MprAdminMIBBufferFree (pIf);
|
|
}
|
|
else
|
|
{
|
|
if ( !hFile ) { DisplayError( g_hModule, rc); }
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
if ( !hFile ) { DisplayError( g_hModule, rc); }
|
|
}
|
|
|
|
return rc;
|
|
}
|
|
|
|
|
|
DWORD
|
|
CfgGetNbIpxIf (
|
|
LPWSTR InterfaceNameW,
|
|
HANDLE hFile
|
|
)
|
|
{
|
|
DWORD rc;
|
|
DWORD sz;
|
|
HANDLE hIfCfg;
|
|
WCHAR IfName[ MAX_INTERFACE_NAME_LEN + 1 ];
|
|
DWORD dwSize = sizeof(IfName);
|
|
|
|
rc = MprConfigInterfaceGetHandle (
|
|
g_hMprConfig, InterfaceNameW, &hIfCfg
|
|
);
|
|
|
|
if ( rc == NO_ERROR )
|
|
{
|
|
HANDLE hIfTrCfg;
|
|
|
|
rc = MprConfigInterfaceTransportGetHandle (
|
|
g_hMprConfig, hIfCfg, PID_IPX, &hIfTrCfg
|
|
);
|
|
|
|
if (rc == NO_ERROR)
|
|
{
|
|
LPBYTE pIfBlock;
|
|
|
|
rc = MprConfigInterfaceTransportGetInfo (
|
|
g_hMprConfig, hIfCfg, hIfTrCfg, &pIfBlock, &sz
|
|
);
|
|
|
|
if (rc == NO_ERROR)
|
|
{
|
|
PIPX_TOC_ENTRY pIpxToc;
|
|
|
|
pIpxToc = GetIPXTocEntry (
|
|
(PIPX_INFO_BLOCK_HEADER)pIfBlock,
|
|
IPX_INTERFACE_INFO_TYPE);
|
|
|
|
if (pIpxToc != NULL)
|
|
{
|
|
DWORD i;
|
|
PIPX_IF_INFO pIpxInfo;
|
|
PWCHAR buffer[2];
|
|
|
|
pIpxInfo = (PIPX_IF_INFO) (pIfBlock + pIpxToc->Offset);
|
|
|
|
//======================================
|
|
// Translate the Interface Name
|
|
//======================================
|
|
|
|
rc = IpmontrGetFriendlyNameFromIfName( InterfaceNameW, IfName, &dwSize );
|
|
|
|
if ( rc == NO_ERROR )
|
|
{
|
|
buffer[ 0 ] = GetEnumString(
|
|
g_hModule, pIpxInfo->NetbiosAccept,
|
|
NUM_TOKENS_IN_TABLE( AdminStates ),
|
|
AdminStates
|
|
);
|
|
|
|
buffer[ 1 ] = GetEnumString(
|
|
g_hModule, pIpxInfo->NetbiosDeliver,
|
|
NUM_TOKENS_IN_TABLE( NbDeliverStates ),
|
|
NbDeliverStates
|
|
);
|
|
|
|
if ( buffer[ 0 ] && buffer[ 1 ] )
|
|
{
|
|
if ( hFile )
|
|
{
|
|
DisplayMessageT(
|
|
DMP_IPX_NB_SET_INTERFACE, IfName, buffer[ 0 ],
|
|
buffer[ 1 ]
|
|
);
|
|
}
|
|
|
|
else
|
|
{
|
|
DisplayIPXMessage(
|
|
g_hModule, MSG_NBIF_CFG_SCREEN_FMT,
|
|
IfName, buffer[ 0 ], buffer[ 1 ]
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ( !hFile ) { DisplayIPXMessage (g_hModule, MSG_INTERFACE_INFO_CORRUPTED); }
|
|
rc = ERROR_INVALID_DATA;
|
|
}
|
|
}
|
|
|
|
else if ((rc == ERROR_FILE_NOT_FOUND) || (rc == ERROR_NO_MORE_ITEMS))
|
|
{
|
|
if ( !hFile ) { DisplayIPXMessage (g_hModule, MSG_NO_IPX_ON_INTERFACE_CFG); }
|
|
}
|
|
|
|
else
|
|
{
|
|
if ( !hFile ) { DisplayError( g_hModule, rc); }
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ( !hFile ) { DisplayError( g_hModule, rc); }
|
|
}
|
|
}
|
|
|
|
else if ((rc == ERROR_FILE_NOT_FOUND) || (rc == ERROR_NO_MORE_ITEMS))
|
|
{
|
|
if ( !hFile ) { DisplayError( g_hModule, ERROR_NO_SUCH_INTERFACE); }
|
|
}
|
|
else
|
|
{
|
|
if ( !hFile ) { DisplayError( g_hModule, rc); }
|
|
}
|
|
|
|
return rc;
|
|
}
|
|
|
|
|
|
DWORD
|
|
GetNbIpxClientIf (
|
|
PWCHAR InterfaceName,
|
|
UINT msg,
|
|
HANDLE hFile
|
|
)
|
|
{
|
|
DWORD rc;
|
|
LPBYTE pClBlock;
|
|
HANDLE hTrCfg;
|
|
|
|
hTrCfg = NULL;
|
|
|
|
if (g_hMprAdmin)
|
|
{
|
|
DWORD sz;
|
|
|
|
rc = MprAdminTransportGetInfo(
|
|
g_hMprAdmin, PID_IPX, NULL, NULL, &pClBlock, &sz
|
|
);
|
|
|
|
if (rc == NO_ERROR)
|
|
{
|
|
}
|
|
|
|
else
|
|
{
|
|
if ((rc == ERROR_FILE_NOT_FOUND) || (rc == ERROR_NO_MORE_ITEMS))
|
|
{
|
|
if ( !hFile ) { DisplayIPXMessage (g_hModule, MSG_NO_IPX_IN_ROUTER_ADM); }
|
|
}
|
|
|
|
else
|
|
{
|
|
if ( !hFile ) { DisplayError( g_hModule, rc); }
|
|
}
|
|
|
|
if ( !hFile ) { DisplayIPXMessage (g_hModule, MSG_REGISTRY_FALLBACK); }
|
|
goto GetFromCfg;
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
GetFromCfg:
|
|
|
|
rc = MprConfigTransportGetHandle (
|
|
g_hMprConfig, PID_IPX, &hTrCfg
|
|
);
|
|
|
|
if (rc == NO_ERROR)
|
|
{
|
|
DWORD sz;
|
|
|
|
rc = MprConfigTransportGetInfo (
|
|
g_hMprConfig, hTrCfg, NULL, NULL, &pClBlock, &sz, NULL
|
|
);
|
|
|
|
if (rc == NO_ERROR)
|
|
{
|
|
NOTHING;
|
|
}
|
|
else
|
|
{
|
|
if ( !hFile ) { DisplayError( g_hModule, rc); }
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
if ((rc == ERROR_FILE_NOT_FOUND) || (rc == ERROR_NO_MORE_ITEMS))
|
|
{
|
|
if ( !hFile ) { DisplayIPXMessage (g_hModule, MSG_NO_IPX_IN_ROUTER_ADM); }
|
|
}
|
|
|
|
else
|
|
{
|
|
if ( !hFile ) { DisplayError( g_hModule, rc); }
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
if (rc == NO_ERROR)
|
|
{
|
|
DWORD i;
|
|
PIPX_TOC_ENTRY pIpxToc;
|
|
|
|
pIpxToc = GetIPXTocEntry(
|
|
(PIPX_INFO_BLOCK_HEADER)pClBlock,
|
|
IPX_INTERFACE_INFO_TYPE
|
|
);
|
|
|
|
if (pIpxToc != NULL)
|
|
{
|
|
PIPX_IF_INFO pIpxInfo;
|
|
PWCHAR buffer[2];
|
|
|
|
pIpxInfo = (PIPX_IF_INFO) (pClBlock + pIpxToc->Offset);
|
|
|
|
buffer[ 0 ] = GetEnumString(
|
|
g_hModule,
|
|
pIpxInfo->NetbiosAccept,
|
|
NUM_TOKENS_IN_TABLE( AdminStates ),
|
|
AdminStates
|
|
);
|
|
|
|
buffer[ 1 ] = GetEnumString(
|
|
g_hModule, pIpxInfo->NetbiosDeliver,
|
|
NUM_TOKENS_IN_TABLE( NbDeliverStates ),
|
|
NbDeliverStates
|
|
);
|
|
|
|
if ( buffer[ 0 ] && buffer[ 1 ] )
|
|
{
|
|
if ( hFile )
|
|
{
|
|
DisplayMessageT(
|
|
DMP_IPX_NB_SET_INTERFACE, InterfaceName, buffer[ 0 ],
|
|
buffer[ 1 ]
|
|
);
|
|
}
|
|
|
|
else
|
|
{
|
|
DisplayIPXMessage(
|
|
g_hModule, msg, InterfaceName,
|
|
buffer[ 0 ], buffer[ 1 ]
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
if ( !hFile ) { DisplayIPXMessage (g_hModule, MSG_INTERFACE_INFO_CORRUPTED); }
|
|
rc = ERROR_INVALID_DATA;
|
|
}
|
|
|
|
if (hTrCfg != NULL)
|
|
{
|
|
MprConfigBufferFree (pClBlock);
|
|
}
|
|
else
|
|
{
|
|
MprAdminBufferFree (pClBlock);
|
|
}
|
|
}
|
|
|
|
return rc;
|
|
}
|
|
|
|
|
|
PIPX_IF_INFO
|
|
GetIpxNbInterface(
|
|
HANDLE hIf,
|
|
LPBYTE *pIfBlock
|
|
)
|
|
{
|
|
DWORD dwSize;
|
|
DWORD dwErr;
|
|
PIPX_TOC_ENTRY pIpxToc;
|
|
|
|
dwErr = MprAdminInterfaceTransportGetInfo(
|
|
g_hMprAdmin, hIf, PID_IPX, pIfBlock, &dwSize
|
|
);
|
|
|
|
if (dwErr != NO_ERROR)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
|
|
pIpxToc = GetIPXTocEntry(
|
|
(PIPX_INFO_BLOCK_HEADER)(*pIfBlock),
|
|
IPX_INTERFACE_INFO_TYPE
|
|
);
|
|
|
|
if (!pIpxToc)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
return (PIPX_IF_INFO)((*pIfBlock) + (pIpxToc->Offset));
|
|
|
|
// return (PIPX_IF_INFO)GetIPXTocEntry((PIPX_INFO_BLOCK_HEADER)(*pIfBlock),IPX_INTERFACE_INFO_TYPE);
|
|
}
|
|
|
|
|
|
DWORD
|
|
MIBEnumNbIpxIfs(
|
|
VOID
|
|
)
|
|
{
|
|
PMPR_INTERFACE_0 IfList = NULL;
|
|
|
|
DWORD dwErr = 0, dwRead, dwTot, i, j, rc;
|
|
|
|
PWCHAR buffer[4];
|
|
|
|
PIPX_IF_INFO pIpxInfo = NULL;
|
|
|
|
LPBYTE buf = NULL;
|
|
|
|
WCHAR IfName[ MAX_INTERFACE_NAME_LEN + 1 ];
|
|
DWORD dwSize = sizeof(IfName);
|
|
|
|
DisplayIPXMessage ( g_hModule, MSG_NBIF_MIB_TABLE_HDR );
|
|
|
|
dwErr = MprAdminInterfaceEnum(
|
|
g_hMprAdmin, 0, (unsigned char **) & IfList, MAXULONG,
|
|
&dwRead, &dwTot, NULL
|
|
);
|
|
|
|
if (dwErr != NO_ERROR)
|
|
{
|
|
return dwErr;
|
|
}
|
|
|
|
for (i = 0; i < dwRead; i++)
|
|
{
|
|
if ((pIpxInfo = GetIpxNbInterface(IfList[i].hInterface, &buf)) != NULL)
|
|
{
|
|
//======================================
|
|
// Translate the Interface Name
|
|
//======================================
|
|
|
|
rc = IpmontrGetFriendlyNameFromIfName( IfList[i].wszInterfaceName, IfName, &dwSize );
|
|
|
|
if ( rc == NO_ERROR )
|
|
{
|
|
buffer[ 0 ] = GetEnumString(
|
|
g_hModule, pIpxInfo->NetbiosAccept,
|
|
NUM_TOKENS_IN_TABLE( AdminStates ),
|
|
AdminStates
|
|
);
|
|
|
|
buffer[ 1 ] = GetEnumString(
|
|
g_hModule, pIpxInfo->NetbiosDeliver,
|
|
NUM_TOKENS_IN_TABLE( NbDeliverStates ),
|
|
NbDeliverStates
|
|
);
|
|
|
|
if ( buffer[ 0 ] && buffer[ 1 ] )
|
|
{
|
|
DisplayIPXMessage(
|
|
g_hModule, MSG_NBIF_MIB_TABLE_FMT,
|
|
IfName, buffer[ 0 ], buffer[ 1 ]
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (buf)
|
|
{
|
|
MprAdminBufferFree(buf);
|
|
}
|
|
|
|
buf = NULL;
|
|
}
|
|
|
|
return NO_ERROR;
|
|
}
|
|
|
|
|
|
/*
|
|
DWORD
|
|
MIBEnumNbIpxIfs (
|
|
VOID
|
|
) {
|
|
DWORD rc;
|
|
DWORD sz;
|
|
IPX_MIB_GET_INPUT_DATA MibGetInputData;
|
|
PIPX_INTERFACE pIf;
|
|
|
|
DisplayIPXMessage (g_hModule, MSG_NBIF_MIB_TABLE_HDR);
|
|
MibGetInputData.TableId = IPX_INTERFACE_TABLE;
|
|
rc = MprAdminMIBEntryGetFirst (
|
|
g_hMIBServer,
|
|
PID_IPX,
|
|
IPX_PROTOCOL_BASE,
|
|
&MibGetInputData,
|
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
|
(LPVOID *)&pIf,
|
|
&sz);
|
|
while (rc==NO_ERROR) {
|
|
WCHAR buffer[2][MAX_VALUE];
|
|
HANDLE hIfCfg;
|
|
WCHAR InterfaceNameW[MAX_INTERFACE_NAME_LEN+1];
|
|
pIf->InterfaceName[47]=0;
|
|
mbstowcs (InterfaceNameW, pIf->InterfaceName, sizeof (InterfaceNameW));
|
|
|
|
//======================================
|
|
// Translate the Interface Name
|
|
//======================================
|
|
if ((rc=(*(Params->IfName2DescA))(pIf->InterfaceName,
|
|
Params->IfNamBufferA,
|
|
&Params->IfNamBufferLength)) != NO_ERROR) {
|
|
return rc;
|
|
}
|
|
//======================================
|
|
if (MprConfigInterfaceGetHandle (
|
|
g_hMprConfig,
|
|
InterfaceNameW,
|
|
&hIfCfg)==NO_ERROR) {
|
|
DisplayIPXMessage (g_hModule,
|
|
MSG_NBIF_MIB_TABLE_FMT,
|
|
pIf->InterfaceName, //Params->IfNamBufferA,
|
|
GetValueString (g_hModule, Utils, AdminStates,
|
|
pIf->NetbiosAccept, buffer[0]),
|
|
GetValueString (g_hModule, Utils, NbDeliverStates,
|
|
pIf->NetbiosDeliver, buffer[1])
|
|
);
|
|
}
|
|
MibGetInputData.MibIndex.InterfaceTableIndex.InterfaceIndex
|
|
= pIf->InterfaceIndex;
|
|
MprAdminMIBBufferFree (pIf);
|
|
rc = MprAdminMIBEntryGetNext (
|
|
g_hMIBServer,
|
|
PID_IPX,
|
|
IPX_PROTOCOL_BASE,
|
|
&MibGetInputData,
|
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
|
(LPVOID *)&pIf,
|
|
&sz);
|
|
}
|
|
if (rc==ERROR_NO_MORE_ITEMS)
|
|
return NO_ERROR;
|
|
else {
|
|
if (rc==NO_ERROR)
|
|
rc = ERROR_GEN_FAILURE;
|
|
DisplayError( g_hModule, rc);
|
|
return rc;
|
|
}
|
|
}
|
|
*/
|
|
|
|
|
|
DWORD
|
|
CfgEnumNbIpxIfs (
|
|
VOID
|
|
)
|
|
{
|
|
DWORD rc = NO_ERROR;
|
|
DWORD read, total, processed = 0, i, j;
|
|
DWORD hResume = 0;
|
|
DWORD sz;
|
|
PMPR_INTERFACE_0 pRi0;
|
|
WCHAR IfName[ MAX_INTERFACE_NAME_LEN + 1 ];
|
|
DWORD dwSize = sizeof(IfName);
|
|
|
|
DisplayIPXMessage (g_hModule, MSG_NBIF_CFG_TABLE_HDR);
|
|
|
|
do
|
|
{
|
|
rc = MprConfigInterfaceEnum (
|
|
g_hMprConfig, 0, (LPBYTE * ) & pRi0, MAXULONG, &read,
|
|
&total, &hResume
|
|
);
|
|
|
|
if ( rc == NO_ERROR )
|
|
{
|
|
for (i = 0; i < read; i++)
|
|
{
|
|
HANDLE hIfTrCfg;
|
|
|
|
rc = MprConfigInterfaceTransportGetHandle(
|
|
g_hMprConfig, pRi0[i].hInterface, PID_IPX, &hIfTrCfg
|
|
);
|
|
|
|
if (rc == NO_ERROR)
|
|
{
|
|
LPBYTE pIfBlock;
|
|
|
|
rc = MprConfigInterfaceTransportGetInfo (
|
|
g_hMprConfig, pRi0[i].hInterface, hIfTrCfg,
|
|
&pIfBlock, &sz
|
|
);
|
|
|
|
if (rc == NO_ERROR)
|
|
{
|
|
PIPX_TOC_ENTRY pIpxToc;
|
|
|
|
pIpxToc = GetIPXTocEntry(
|
|
(PIPX_INFO_BLOCK_HEADER)pIfBlock,
|
|
IPX_INTERFACE_INFO_TYPE
|
|
);
|
|
|
|
if (pIpxToc != NULL)
|
|
{
|
|
PIPX_IF_INFO pIpxInfo;
|
|
PWCHAR buffer[2];
|
|
|
|
pIpxInfo = (PIPX_IF_INFO) (pIfBlock + pIpxToc->Offset);
|
|
|
|
//======================================
|
|
// Translate the Interface Name
|
|
//======================================
|
|
|
|
rc = IpmontrGetFriendlyNameFromIfName(
|
|
pRi0[i].wszInterfaceName, IfName, &dwSize
|
|
);
|
|
|
|
if ( rc == NO_ERROR )
|
|
{
|
|
buffer[ 0 ] = GetEnumString(
|
|
g_hModule, pIpxInfo->NetbiosAccept,
|
|
NUM_TOKENS_IN_TABLE( AdminStates ),
|
|
AdminStates
|
|
);
|
|
|
|
buffer[ 1 ] = GetEnumString(
|
|
g_hModule, pIpxInfo->NetbiosDeliver,
|
|
NUM_TOKENS_IN_TABLE( NbDeliverStates ),
|
|
NbDeliverStates
|
|
);
|
|
|
|
if ( buffer[ 0 ] && buffer[ 1 ] )
|
|
{
|
|
DisplayIPXMessage(
|
|
g_hModule, MSG_NBIF_CFG_TABLE_FMT,
|
|
IfName, buffer[ 0 ], buffer[ 1 ]
|
|
);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
DisplayIPXMessage (g_hModule, MSG_INTERFACE_INFO_CORRUPTED);
|
|
rc = ERROR_INVALID_DATA;
|
|
}
|
|
}
|
|
else if (rc != ERROR_NO_MORE_ITEMS)
|
|
{
|
|
// No IPX installed
|
|
DisplayError( g_hModule, rc);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//DisplayError( g_hModule, rc);
|
|
rc = NO_ERROR;
|
|
}
|
|
}
|
|
|
|
processed += read;
|
|
MprConfigBufferFree (pRi0);
|
|
}
|
|
else
|
|
{
|
|
DisplayError( g_hModule, rc);
|
|
break;
|
|
}
|
|
|
|
} while (processed < total);
|
|
|
|
return rc;
|
|
}
|
|
|
|
|
|
DWORD
|
|
CfgSetNbIpxIf (
|
|
LPWSTR InterfaceNameW,
|
|
PULONG pAccept OPTIONAL,
|
|
PULONG pDeliver OPTIONAL
|
|
)
|
|
{
|
|
DWORD rc;
|
|
DWORD sz;
|
|
HANDLE hTrCfg;
|
|
HANDLE hIfCfg;
|
|
HANDLE hIfTrCfg;
|
|
LPBYTE pIfBlock;
|
|
|
|
|
|
if (InterfaceNameW != NULL)
|
|
{
|
|
rc = MprConfigInterfaceGetHandle(
|
|
g_hMprConfig, InterfaceNameW, &hIfCfg
|
|
);
|
|
|
|
if (rc == NO_ERROR)
|
|
{
|
|
rc = MprConfigInterfaceTransportGetHandle (
|
|
g_hMprConfig, hIfCfg, PID_IPX, &hIfTrCfg
|
|
);
|
|
|
|
if (rc == NO_ERROR)
|
|
{
|
|
rc = MprConfigInterfaceTransportGetInfo (
|
|
g_hMprConfig, hIfCfg, hIfTrCfg, &pIfBlock, &sz
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
rc = MprConfigTransportGetHandle (
|
|
g_hMprConfig, PID_IPX, &hTrCfg
|
|
);
|
|
|
|
if (rc == NO_ERROR)
|
|
{
|
|
rc = MprConfigTransportGetInfo (
|
|
g_hMprConfig, hTrCfg, NULL, NULL, &pIfBlock, &sz, NULL
|
|
);
|
|
}
|
|
}
|
|
|
|
if (rc == NO_ERROR)
|
|
{
|
|
PIPX_TOC_ENTRY pIpxToc;
|
|
|
|
pIpxToc = GetIPXTocEntry (
|
|
(PIPX_INFO_BLOCK_HEADER)pIfBlock,
|
|
IPX_INTERFACE_INFO_TYPE
|
|
);
|
|
|
|
if (pIpxToc != NULL)
|
|
{
|
|
PIPX_IF_INFO pIpxInfo;
|
|
|
|
pIpxInfo = (PIPX_IF_INFO) (pIfBlock + pIpxToc->Offset);
|
|
|
|
if (ARGUMENT_PRESENT (pAccept))
|
|
{
|
|
pIpxInfo->NetbiosAccept = *pAccept;
|
|
}
|
|
|
|
if (ARGUMENT_PRESENT (pDeliver))
|
|
{
|
|
pIpxInfo->NetbiosDeliver = *pDeliver;
|
|
}
|
|
|
|
if (InterfaceNameW != NULL)
|
|
{
|
|
rc = MprConfigInterfaceTransportSetInfo (
|
|
g_hMprConfig, hIfCfg, hIfTrCfg, pIfBlock, sz
|
|
);
|
|
}
|
|
else
|
|
{
|
|
rc = MprConfigTransportSetInfo (
|
|
g_hMprConfig, hTrCfg, NULL, 0, pIfBlock, sz, NULL
|
|
);
|
|
}
|
|
|
|
if (rc == NO_ERROR)
|
|
{
|
|
if (InterfaceNameW != NULL)
|
|
{
|
|
DisplayIPXMessage (g_hModule, MSG_NBIF_SET_CFG, InterfaceNameW );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
DisplayIPXMessage (g_hModule, MSG_CLIENT_NBIF_SET_CFG );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
DisplayIPXMessage (g_hModule, MSG_INTERFACE_INFO_CORRUPTED);
|
|
rc = ERROR_INVALID_DATA;
|
|
}
|
|
|
|
MprConfigBufferFree (pIfBlock);
|
|
}
|
|
|
|
else
|
|
{
|
|
DisplayError( g_hModule, rc);
|
|
}
|
|
|
|
return rc;
|
|
}
|
|
|
|
|
|
DWORD
|
|
AdmSetNbIpxIf (
|
|
LPWSTR InterfaceNameW,
|
|
PULONG pAccept OPTIONAL,
|
|
PULONG pDeliver OPTIONAL
|
|
)
|
|
{
|
|
DWORD rc;
|
|
DWORD sz;
|
|
HANDLE hIfAdm;
|
|
LPBYTE pIfBlock;
|
|
|
|
if (InterfaceNameW != NULL)
|
|
{
|
|
rc = MprAdminInterfaceGetHandle (
|
|
g_hMprAdmin, InterfaceNameW, &hIfAdm, FALSE
|
|
);
|
|
|
|
if (rc == NO_ERROR)
|
|
{
|
|
rc = MprAdminInterfaceTransportGetInfo (
|
|
g_hMprAdmin, hIfAdm, PID_IPX, &pIfBlock, &sz
|
|
);
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
rc = MprAdminTransportGetInfo (
|
|
g_hMprAdmin, PID_IPX, NULL, NULL, &pIfBlock, &sz
|
|
);
|
|
|
|
if (rc == NO_ERROR)
|
|
{
|
|
if (pIfBlock == NULL)
|
|
return rc;
|
|
}
|
|
}
|
|
|
|
|
|
if (rc == NO_ERROR)
|
|
{
|
|
PIPX_TOC_ENTRY pIpxToc;
|
|
|
|
pIpxToc = GetIPXTocEntry (
|
|
(PIPX_INFO_BLOCK_HEADER)pIfBlock,
|
|
IPX_INTERFACE_INFO_TYPE
|
|
);
|
|
|
|
if (pIpxToc != NULL)
|
|
{
|
|
PIPX_IF_INFO pIpxInfo;
|
|
|
|
pIpxInfo = (PIPX_IF_INFO)(pIfBlock + pIpxToc->Offset);
|
|
|
|
if (ARGUMENT_PRESENT (pAccept))
|
|
{
|
|
pIpxInfo->NetbiosAccept = *pAccept;
|
|
}
|
|
|
|
if (ARGUMENT_PRESENT (pDeliver))
|
|
{
|
|
pIpxInfo->NetbiosDeliver = *pDeliver;
|
|
}
|
|
|
|
if (InterfaceNameW != NULL)
|
|
{
|
|
rc = MprAdminInterfaceTransportSetInfo (
|
|
g_hMprAdmin, hIfAdm, PID_IPX, pIfBlock,
|
|
((PIPX_INFO_BLOCK_HEADER)pIfBlock)->Size
|
|
);
|
|
}
|
|
|
|
else
|
|
{
|
|
rc = MprAdminTransportSetInfo (
|
|
g_hMprAdmin, PID_IPX, NULL, 0, pIfBlock,
|
|
((PIPX_INFO_BLOCK_HEADER)pIfBlock)->Size
|
|
);
|
|
}
|
|
|
|
if (rc == NO_ERROR)
|
|
{
|
|
if (InterfaceNameW != NULL)
|
|
{
|
|
DisplayIPXMessage (
|
|
g_hModule,MSG_NBIF_SET_ADM, InterfaceNameW
|
|
);
|
|
}
|
|
|
|
else
|
|
{
|
|
DisplayIPXMessage (g_hModule, MSG_CLIENT_NBIF_SET_ADM);
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
DisplayError( g_hModule, rc);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
DisplayIPXMessage (g_hModule, MSG_INTERFACE_INFO_CORRUPTED);
|
|
rc = ERROR_INVALID_DATA;
|
|
}
|
|
|
|
MprAdminBufferFree (pIfBlock);
|
|
}
|
|
else
|
|
{
|
|
DisplayError( g_hModule, rc);
|
|
}
|
|
|
|
return rc;
|
|
}
|
|
|
|
|