1523 lines
53 KiB
C
1523 lines
53 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1996 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
nipxf.c
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Novell-ipx instrumentation callbacks.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Vadim Eydelman (vadime) 30-May-1996
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "precomp.h"
|
||
|
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// nipxSystem group (1.3.6.1.4.1.23.2.5.1) //
|
||
|
// //
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// nipxBasicSysEntry table (1.3.6.1.4.1.23.2.5.1.1.1) //
|
||
|
// //
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
UINT
|
||
|
get_nipxBasicSysEntry(
|
||
|
UINT actionId,
|
||
|
AsnAny * objectArray,
|
||
|
UINT * errorIndex
|
||
|
) {
|
||
|
#define Bseb ((buf_nipxBasicSysEntry *)objectArray)
|
||
|
IPX_MIB_GET_INPUT_DATA MibGetInputData;
|
||
|
PIPXMIB_BASE Bep;
|
||
|
DWORD rc;
|
||
|
ULONG BeSize;
|
||
|
|
||
|
if (!EnsureRouterConnection()) {
|
||
|
*errorIndex = 0;
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
if (GetAsnInteger (&Bseb->nipxBasicSysInstance,NIPX_DEFAULT_SYS_INSTANCE)!=NIPX_DEFAULT_SYS_INSTANCE) {
|
||
|
*errorIndex = 0;
|
||
|
DbgTrace (DBG_NIPXBASICSYSENTRY, ("NIPX-BSE: ipxBasicSysInstance is not 0.\n"));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
switch (actionId) {
|
||
|
case MIB_ACTION_GETNEXT:
|
||
|
if (!Bseb->nipxBasicSysInstance.asnType) {
|
||
|
ForceAsnInteger (&Bseb->nipxBasicSysInstance, NIPX_DEFAULT_SYS_INSTANCE);
|
||
|
rc = MIB_S_SUCCESS;
|
||
|
}
|
||
|
else {
|
||
|
DbgTrace (DBG_NIPXBASICSYSENTRY,
|
||
|
("NIPX-BSE: End of table reached on GETFIRST/GETNEXT request for instance %ld.\n",
|
||
|
GetAsnInteger (&Bseb->nipxBasicSysInstance,NIPX_INVALID_SYS_INSTANCE)));
|
||
|
rc = MIB_S_NO_MORE_ENTRIES;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case MIB_ACTION_GET:
|
||
|
MibGetInputData.TableId = IPX_BASE_ENTRY;
|
||
|
rc = MprAdminMIBEntryGet(g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Bep,
|
||
|
&BeSize);
|
||
|
if (rc==NO_ERROR) {
|
||
|
SetAsnInteger (&Bseb->nipxBasicSysExistState, NIPX_STATE_ON);
|
||
|
SetAsnOctetString (&Bseb->nipxBasicSysNetNumber, Bseb->NetNumberVal,
|
||
|
Bep->PrimaryNetNumber, sizeof (Bseb->NetNumberVal));
|
||
|
SetAsnOctetString (&Bseb->nipxBasicSysNode, Bseb->NodeVal,
|
||
|
Bep->Node, sizeof (Bseb->NodeVal));
|
||
|
SetAsnDispString (&Bseb->nipxBasicSysName, Bseb->NameVal,
|
||
|
Bep->SysName, sizeof (Bseb->NameVal));
|
||
|
SetAsnCounter (&Bseb->nipxBasicSysInReceives, 0);
|
||
|
SetAsnCounter (&Bseb->nipxBasicSysInHdrErrors, 0);
|
||
|
SetAsnCounter (&Bseb->nipxBasicSysInUnknownSockets, 0);
|
||
|
SetAsnCounter (&Bseb->nipxBasicSysInDiscards, 0);
|
||
|
SetAsnCounter (&Bseb->nipxBasicSysInBadChecksums, 0);
|
||
|
SetAsnCounter (&Bseb->nipxBasicSysInDelivers, 0);
|
||
|
SetAsnCounter (&Bseb->nipxBasicSysNoRoutes, 0);
|
||
|
SetAsnCounter (&Bseb->nipxBasicSysOutRequests, 0);
|
||
|
SetAsnCounter (&Bseb->nipxBasicSysOutMalformedRequests, 0);
|
||
|
SetAsnCounter (&Bseb->nipxBasicSysOutDiscards, 0);
|
||
|
SetAsnCounter (&Bseb->nipxBasicSysOutPackets, 0);
|
||
|
SetAsnCounter (&Bseb->nipxBasicSysConfigSockets, 0);
|
||
|
SetAsnCounter (&Bseb->nipxBasicSysOpenSocketFails, 0);
|
||
|
MprAdminMIBBufferFree (Bep);
|
||
|
DbgTrace (DBG_NIPXBASICSYSENTRY, ("NIPX-BSE: Get request succeded.\n"));
|
||
|
rc = MIB_S_SUCCESS;
|
||
|
}
|
||
|
else {
|
||
|
//
|
||
|
// pmay. Added this so mib walk wouldn't fail with
|
||
|
// GENERR.
|
||
|
//
|
||
|
rc = MIB_S_NO_MORE_ENTRIES;
|
||
|
}
|
||
|
break;
|
||
|
default:
|
||
|
DbgTrace (DBG_NIPXBASICSYSENTRY,
|
||
|
("NIPX-BSE: Get called with unsupported action code %d.\n",
|
||
|
actionId));
|
||
|
rc = MIB_S_INVALID_PARAMETER;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return rc;
|
||
|
#undef Bseb
|
||
|
}
|
||
|
|
||
|
|
||
|
/*
|
||
|
All values in nipxBasicSysEntry are implemented as read-only
|
||
|
UINT
|
||
|
set_nipxBasicSysEntry(
|
||
|
UINT actionId,
|
||
|
AsnAny * objectArray,
|
||
|
UINT * errorIndex
|
||
|
) {
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// nipxAdvSysEntry table (1.3.6.1.4.1.23.2.5.1.2.1) //
|
||
|
// //
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
UINT
|
||
|
get_nipxAdvSysEntry(
|
||
|
UINT actionId,
|
||
|
AsnAny * objectArray,
|
||
|
UINT * errorIndex
|
||
|
) {
|
||
|
#define Aseb ((buf_nipxAdvSysEntry *)objectArray)
|
||
|
IPX_MIB_GET_INPUT_DATA MibGetInputData;
|
||
|
PIPXMIB_BASE Bep;
|
||
|
DWORD rc;
|
||
|
ULONG BeSize;
|
||
|
|
||
|
if (!EnsureRouterConnection()) {
|
||
|
*errorIndex = 0;
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
if (GetAsnInteger (&Aseb->nipxAdvSysInstance,NIPX_DEFAULT_SYS_INSTANCE)!=NIPX_DEFAULT_SYS_INSTANCE) {
|
||
|
*errorIndex = 0;
|
||
|
DbgTrace (DBG_NIPXADVSYSENTRY, ("NIPX-ASE: nipxAdvSysInstance is not 0.\n"));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
switch (actionId) {
|
||
|
case MIB_ACTION_GETNEXT:
|
||
|
if (!Aseb->nipxAdvSysInstance.asnType) {
|
||
|
ForceAsnInteger (&Aseb->nipxAdvSysInstance, NIPX_DEFAULT_SYS_INSTANCE);
|
||
|
}
|
||
|
else {
|
||
|
DbgTrace (DBG_NIPXADVSYSENTRY,
|
||
|
("NIPX-ASE: End of table reached on GETFIRST/GETNEXT request for instance %ld.\n",
|
||
|
GetAsnInteger (&Aseb->nipxAdvSysInstance,NIPX_INVALID_SYS_INSTANCE)));
|
||
|
rc = MIB_S_NO_MORE_ENTRIES;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case MIB_ACTION_GET:
|
||
|
MibGetInputData.TableId = IPX_BASE_ENTRY;
|
||
|
rc = MprAdminMIBEntryGet(g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Bep,
|
||
|
&BeSize);
|
||
|
if (rc == NO_ERROR && Bep != NULL) {
|
||
|
SetAsnInteger (&Aseb->nipxAdvSysMaxPathSplits, Bep->MaxPathSplits);
|
||
|
SetAsnInteger (&Aseb->nipxAdvSysMaxHops, 16);
|
||
|
SetAsnCounter (&Aseb->nipxAdvSysInTooManyHops, 0);
|
||
|
SetAsnCounter (&Aseb->nipxAdvSysInFiltered, 0);
|
||
|
SetAsnCounter (&Aseb->nipxAdvSysInCompressDiscards, 0);
|
||
|
SetAsnCounter (&Aseb->nipxAdvSysNETBIOSPackets, 0);
|
||
|
SetAsnCounter (&Aseb->nipxAdvSysForwPackets, 0);
|
||
|
SetAsnCounter (&Aseb->nipxAdvSysOutFiltered, 0);
|
||
|
SetAsnCounter (&Aseb->nipxAdvSysOutCompressDiscards, 0);
|
||
|
SetAsnCounter (&Aseb->nipxAdvSysCircCount, Bep->IfCount);
|
||
|
SetAsnCounter (&Aseb->nipxAdvSysDestCount, Bep->DestCount);
|
||
|
SetAsnCounter (&Aseb->nipxAdvSysServCount, Bep->ServCount);
|
||
|
MprAdminMIBBufferFree (Bep);
|
||
|
DbgTrace (DBG_NIPXADVSYSENTRY, ("NIPX-ASE: Get request succeded.\n"));
|
||
|
}
|
||
|
else {
|
||
|
//
|
||
|
// pmay. Added this so mib walk wouldn't fail with
|
||
|
// GENERR.
|
||
|
//
|
||
|
rc = MIB_S_NO_MORE_ENTRIES;
|
||
|
}
|
||
|
break;
|
||
|
default:
|
||
|
DbgTrace (DBG_NIPXADVSYSENTRY,
|
||
|
("NIPX-ASE: Get called with unsupported action code %d.\n",
|
||
|
actionId));
|
||
|
rc = MIB_S_INVALID_PARAMETER;
|
||
|
break;
|
||
|
}
|
||
|
return rc;
|
||
|
#undef Aseb
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
All values in nipxAdvSysEntry are implemented as read-only
|
||
|
UINT
|
||
|
set_nipxAdvSysEntry(
|
||
|
UINT actionId,
|
||
|
AsnAny * objectArray,
|
||
|
UINT * errorIndex
|
||
|
) {
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// nipxCircuit group (1.3.6.1.4.1.23.2.5.2) //
|
||
|
// //
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// nipxCircEntry table (1.3.6.1.4.1.23.2.5.2.1.1) //
|
||
|
// //
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
UINT
|
||
|
get_nipxCircEntry(
|
||
|
UINT actionId,
|
||
|
AsnAny * objectArray,
|
||
|
UINT * errorIndex
|
||
|
) {
|
||
|
#define Ceb ((buf_nipxCircEntry *)objectArray)
|
||
|
PIPX_INTERFACE Ifp;
|
||
|
IPX_MIB_GET_INPUT_DATA MibGetInputData;
|
||
|
DWORD rc;
|
||
|
ULONG IfSize;
|
||
|
|
||
|
if (!EnsureRouterConnection()) {
|
||
|
*errorIndex = 0;
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
MibGetInputData.TableId = IPX_INTERFACE_TABLE;
|
||
|
if (GetAsnInteger (&Ceb->nipxCircSysInstance, NIPX_DEFAULT_SYS_INSTANCE)!=NIPX_DEFAULT_SYS_INSTANCE) {
|
||
|
*errorIndex = 0;
|
||
|
DbgTrace (DBG_NIPXCIRCENTRY, ("NIPX-Circ: nipxCircSysInstance is not 0.\n"));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
MibGetInputData.MibIndex.InterfaceTableIndex.InterfaceIndex
|
||
|
= (ULONG)GetAsnInteger (&Ceb->nipxCircIndex, ZERO_INTERFACE_INDEX);
|
||
|
|
||
|
switch (actionId) {
|
||
|
case MIB_ACTION_GET:
|
||
|
ASSERTMSG ("No index in GET request for table ",
|
||
|
Ceb->nipxCircSysInstance.asnType
|
||
|
&&Ceb->nipxCircIndex.asnType);
|
||
|
rc = MprAdminMIBEntryGet(g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Ifp,
|
||
|
&IfSize);
|
||
|
break;
|
||
|
case MIB_ACTION_GETNEXT:
|
||
|
if (Ceb->nipxCircIndex.asnType) {
|
||
|
ASSERTMSG ("Second index is present but first is not ",
|
||
|
Ceb->nipxCircSysInstance.asnType);
|
||
|
rc = MprAdminMIBEntryGetNext(g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Ifp,
|
||
|
&IfSize);
|
||
|
}
|
||
|
else
|
||
|
rc = MprAdminMIBEntryGetFirst(g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Ifp,
|
||
|
&IfSize);
|
||
|
|
||
|
break;
|
||
|
default:
|
||
|
DbgTrace (DBG_NIPXCIRCENTRY,
|
||
|
("NIPX-Circ: Get called with unsupported action code %d.\n",
|
||
|
actionId));
|
||
|
return MIB_S_INVALID_PARAMETER;
|
||
|
}
|
||
|
|
||
|
if (rc == NO_ERROR && Ifp == NULL)
|
||
|
{
|
||
|
rc = ERROR_CAN_NOT_COMPLETE;
|
||
|
}
|
||
|
|
||
|
switch (rc) {
|
||
|
case NO_ERROR:
|
||
|
DbgTrace (DBG_NIPXCIRCENTRY, ("NIPX-Circ: Get(%d) request succeded for if %ld->%ld.\n",
|
||
|
actionId,
|
||
|
MibGetInputData.MibIndex.InterfaceTableIndex.InterfaceIndex,
|
||
|
Ifp->InterfaceIndex));
|
||
|
ForceAsnInteger (&Ceb->nipxCircSysInstance, NIPX_DEFAULT_SYS_INSTANCE);
|
||
|
ForceAsnInteger (&Ceb->nipxCircIndex, Ifp->InterfaceIndex);
|
||
|
SetAsnInteger (&Ceb->nipxCircExistState, NIPX_STATE_ON);
|
||
|
SetAsnInteger (&Ceb->nipxCircOperState, Ifp->IfStats.IfOperState);
|
||
|
SetAsnInteger (&Ceb->nipxCircIfIndex, Ifp->AdapterIndex);
|
||
|
SetAsnDispString (&Ceb->nipxCircName, Ceb->NameVal,
|
||
|
Ifp->InterfaceName, sizeof (Ceb->NameVal));
|
||
|
switch (Ifp->InterfaceType) {
|
||
|
case IF_TYPE_OTHER:
|
||
|
case IF_TYPE_INTERNAL:
|
||
|
SetAsnInteger (&Ceb->nipxCircType, NIPX_CIRCTYPE_OTHER);
|
||
|
SetAsnDispString (&Ceb->nipxCircDialName, Ceb->DialNameVal,
|
||
|
"", sizeof (Ceb->DialNameVal));
|
||
|
break;
|
||
|
case IF_TYPE_LAN:
|
||
|
SetAsnInteger (&Ceb->nipxCircType, NIPX_CIRCTYPE_BCAST);
|
||
|
SetAsnDispString (&Ceb->nipxCircDialName, Ceb->DialNameVal,
|
||
|
"", sizeof (Ceb->DialNameVal));
|
||
|
SetAsnDispString (&Ceb->nipxCircNeighRouterName, Ceb->NeighRouterNameVal,
|
||
|
"", sizeof (Ceb->NeighRouterNameVal));
|
||
|
break;
|
||
|
case IF_TYPE_WAN_ROUTER:
|
||
|
case IF_TYPE_PERSONAL_WAN_ROUTER:
|
||
|
SetAsnInteger (&Ceb->nipxCircType, NIPX_CIRCTYPE_DYNAMIC);
|
||
|
SetAsnDispString (&Ceb->nipxCircDialName, Ceb->DialNameVal,
|
||
|
Ifp->InterfaceName, sizeof (Ceb->DialNameVal));
|
||
|
SetAsnDispString (&Ceb->nipxCircNeighRouterName, Ceb->NeighRouterNameVal,
|
||
|
Ifp->InterfaceName, sizeof (Ceb->NeighRouterNameVal));
|
||
|
|
||
|
break;
|
||
|
|
||
|
case IF_TYPE_WAN_WORKSTATION:
|
||
|
case IF_TYPE_ROUTER_WORKSTATION_DIALOUT:
|
||
|
case IF_TYPE_STANDALONE_WORKSTATION_DIALOUT:
|
||
|
SetAsnInteger (&Ceb->nipxCircType, NIPX_CIRCTYPE_WANWS);
|
||
|
SetAsnDispString (&Ceb->nipxCircDialName, Ceb->DialNameVal,
|
||
|
Ifp->InterfaceName, sizeof (Ceb->DialNameVal));
|
||
|
SetAsnDispString (&Ceb->nipxCircNeighRouterName, Ceb->NeighRouterNameVal,
|
||
|
"", sizeof (Ceb->NeighRouterNameVal));
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
SetAsnInteger (&Ceb->nipxCircLocalMaxPacketSize, Ifp->IfStats.MaxPacketSize);
|
||
|
SetAsnInteger (&Ceb->nipxCircCompressState, NIPX_STATE_OFF);
|
||
|
SetAsnInteger (&Ceb->nipxCircCompressSlots, 16);
|
||
|
SetAsnInteger (&Ceb->nipxCircStaticStatus, NIPX_STATIC_STATUS_UNKNOWN);
|
||
|
SetAsnCounter (&Ceb->nipxCircCompressedSent, 0);
|
||
|
SetAsnCounter (&Ceb->nipxCircCompressedInitSent, 0);
|
||
|
SetAsnCounter (&Ceb->nipxCircCompressedRejectsSent, 0);
|
||
|
SetAsnCounter (&Ceb->nipxCircUncompressedSent, 0);
|
||
|
SetAsnCounter (&Ceb->nipxCircCompressedReceived, 0);
|
||
|
SetAsnCounter (&Ceb->nipxCircCompressedInitReceived, 0);
|
||
|
SetAsnCounter (&Ceb->nipxCircCompressedRejectsReceived, 0);
|
||
|
SetAsnCounter (&Ceb->nipxCircUncompressedReceived, 0);
|
||
|
SetAsnMediaType (&Ceb->nipxCircMediaType, Ceb->MediaTypeVal, Ifp->MediaType);
|
||
|
SetAsnOctetString (&Ceb->nipxCircNetNumber, Ceb->NetNumberVal,
|
||
|
Ifp->NetNumber, sizeof (Ceb->NetNumberVal));
|
||
|
SetAsnCounter (&Ceb->nipxCircStateChanges, 0);
|
||
|
SetAsnCounter (&Ceb->nipxCircInitFails, 0);
|
||
|
SetAsnInteger (&Ceb->nipxCircDelay, Ifp->Delay);
|
||
|
SetAsnInteger (&Ceb->nipxCircThroughput, Ifp->Throughput);
|
||
|
SetAsnOctetString (&Ceb->nipxCircNeighInternalNetNum, Ceb->NeighInternalNetNumVal,
|
||
|
ZERO_NET_NUM, sizeof (Ceb->NeighInternalNetNumVal));
|
||
|
|
||
|
MprAdminMIBBufferFree (Ifp);
|
||
|
return MIB_S_SUCCESS;
|
||
|
case ERROR_NO_MORE_ITEMS:
|
||
|
ASSERTMSG ("ERROR_NO_MORE_ITEMS returned, but request is not GETNEXT ",
|
||
|
actionId==MIB_ACTION_GETNEXT);
|
||
|
DbgTrace (DBG_NIPXCIRCENTRY,
|
||
|
("NIPX-Circ: End of table reached on GETFIRST/GETNEXT request for if %ld.\n",
|
||
|
MibGetInputData.MibIndex.InterfaceTableIndex.InterfaceIndex));
|
||
|
return MIB_S_NO_MORE_ENTRIES;
|
||
|
default:
|
||
|
*errorIndex = 1;
|
||
|
DbgTrace (DBG_NIPXCIRCENTRY,
|
||
|
("NIPX-Circ: Get request for if %ld failed with error %ld.\n",
|
||
|
MibGetInputData.MibIndex.InterfaceTableIndex.InterfaceIndex, rc));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
#undef Ceb
|
||
|
}
|
||
|
|
||
|
UINT
|
||
|
set_nipxCircEntry(
|
||
|
UINT actionId,
|
||
|
AsnAny * objectArray,
|
||
|
UINT * errorIndex
|
||
|
) {
|
||
|
#define Ceb ((sav_nipxCircEntry *)objectArray)
|
||
|
PIPX_INTERFACE Ifp;
|
||
|
IPX_MIB_GET_INPUT_DATA MibGetInputData;
|
||
|
DWORD rc;
|
||
|
ULONG IfSize;
|
||
|
|
||
|
if (!EnsureRouterConnection()) {
|
||
|
*errorIndex = 0;
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
if (GetAsnInteger (&Ceb->nipxCircSysInstance, NIPX_INVALID_SYS_INSTANCE)!=NIPX_DEFAULT_SYS_INSTANCE) {
|
||
|
*errorIndex = 0;
|
||
|
DbgTrace (DBG_NIPXCIRCENTRY, ("NIPX-Circ: nipxCircSysInstance is not 0.\n"));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
|
||
|
switch (actionId) {
|
||
|
case MIB_ACTION_VALIDATE:
|
||
|
ASSERTMSG ("No index in VALIDATE request for table ",
|
||
|
Ceb->nipxCircSysInstance.asnType
|
||
|
&&Ceb->nipxCircIndex.asnType);
|
||
|
MibGetInputData.TableId = IPX_INTERFACE_TABLE;
|
||
|
MibGetInputData.MibIndex.InterfaceTableIndex.InterfaceIndex
|
||
|
= (ULONG)GetAsnInteger (&Ceb->nipxCircIndex, INVALID_INTERFACE_INDEX);
|
||
|
rc = MprAdminMIBEntryGet(g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Ifp,
|
||
|
&IfSize);
|
||
|
if (rc==NO_ERROR) {
|
||
|
Ceb->MibSetInputData.MibRow.Interface = *Ifp;
|
||
|
MprAdminMIBBufferFree (Ifp);
|
||
|
if (Ceb->nipxCircOperState.asnType) {
|
||
|
switch (GetAsnInteger(&Ceb->nipxCircOperState, OPER_STATE_SLEEPING)) {
|
||
|
case OPER_STATE_DOWN:
|
||
|
Ceb->MibSetInputData.MibRow.Interface.AdminState = ADMIN_STATE_DISABLED;
|
||
|
break;
|
||
|
case OPER_STATE_UP:
|
||
|
Ceb->MibSetInputData.MibRow.Interface.AdminState = ADMIN_STATE_ENABLED;
|
||
|
break;
|
||
|
default:
|
||
|
DbgTrace (DBG_NIPXCIRCENTRY,
|
||
|
("NIPX-Circ: Validate failed: invalid oper state: %d.\n",
|
||
|
GetAsnInteger(&Ceb->nipxCircOperState, OPER_STATE_SLEEPING)));
|
||
|
return MIB_S_INVALID_PARAMETER;
|
||
|
}
|
||
|
}
|
||
|
DbgTrace (DBG_NIPXCIRCENTRY, ("NIPX-Circ: Validated if %ld.\n",
|
||
|
MibGetInputData.MibIndex.InterfaceTableIndex.InterfaceIndex));
|
||
|
return MIB_S_SUCCESS;
|
||
|
}
|
||
|
else {
|
||
|
DbgTrace (DBG_NIPXCIRCENTRY,
|
||
|
("NIPX-Circ: Validate failed on if %ld with error %ld.\n",
|
||
|
MibGetInputData.MibIndex.InterfaceTableIndex.InterfaceIndex, rc));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
case MIB_ACTION_SET:
|
||
|
rc = MprAdminMIBEntrySet (g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&Ceb->MibSetInputData,
|
||
|
sizeof(IPX_MIB_SET_INPUT_DATA));
|
||
|
if (rc==NO_ERROR) {
|
||
|
DbgTrace (DBG_NIPXCIRCENTRY, ("NIPX-Circ: Set succeded on if %ld\n",
|
||
|
Ceb->MibSetInputData.MibRow.Interface.InterfaceIndex));
|
||
|
return MIB_S_SUCCESS;
|
||
|
}
|
||
|
else {
|
||
|
DbgTrace (DBG_NIPXCIRCENTRY,
|
||
|
("NIPX-Circ: Set failed on if %ld with error %ld\n",
|
||
|
Ceb->MibSetInputData.MibRow.Interface.InterfaceIndex, rc));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
case MIB_ACTION_CLEANUP:
|
||
|
return MIB_S_SUCCESS;
|
||
|
default:
|
||
|
DbgTrace (DBG_NIPXCIRCENTRY,
|
||
|
("NIPX-Circ: Set called with unsupported action code %d.\n",
|
||
|
actionId));
|
||
|
return MIB_S_INVALID_PARAMETER;
|
||
|
}
|
||
|
#undef Ceb
|
||
|
}
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// nipxForwarding group (1.3.6.1.4.1.23.2.5.3) //
|
||
|
// //
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// nipxDestEntry table (1.3.6.1.4.1.23.2.5.3.1.1) //
|
||
|
// //
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
UINT
|
||
|
get_nipxDestEntry(
|
||
|
UINT actionId,
|
||
|
AsnAny * objectArray,
|
||
|
UINT * errorIndex
|
||
|
) {
|
||
|
#define Deb ((buf_nipxDestEntry *)objectArray)
|
||
|
PIPX_ROUTE Rtp;
|
||
|
IPX_MIB_GET_INPUT_DATA MibGetInputData;
|
||
|
DWORD rc;
|
||
|
ULONG RtSize;
|
||
|
|
||
|
if (!EnsureRouterConnection()) {
|
||
|
*errorIndex = 0;
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
if (GetAsnInteger (&Deb->nipxDestSysInstance, NIPX_DEFAULT_SYS_INSTANCE)!=NIPX_DEFAULT_SYS_INSTANCE) {
|
||
|
*errorIndex = 0;
|
||
|
DbgTrace (DBG_NIPXDESTENTRY, ("NIPX-Dest: nipxDestSysInstance is not 0.\n"));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
MibGetInputData.TableId = IPX_DEST_TABLE;
|
||
|
GetAsnOctetString (MibGetInputData.MibIndex.RoutingTableIndex.Network,
|
||
|
&Deb->nipxDestNetNum,
|
||
|
sizeof (MibGetInputData.MibIndex.RoutingTableIndex.Network),
|
||
|
ZERO_NET_NUM);
|
||
|
|
||
|
switch (actionId) {
|
||
|
case MIB_ACTION_GET:
|
||
|
ASSERTMSG ("No index in GET request for table ",
|
||
|
Deb->nipxDestSysInstance.asnType
|
||
|
&&Deb->nipxDestNetNum.asnType);
|
||
|
rc = MprAdminMIBEntryGet(g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Rtp,
|
||
|
&RtSize);
|
||
|
break;
|
||
|
case MIB_ACTION_GETNEXT:
|
||
|
if (Deb->nipxDestNetNum.asnType) {
|
||
|
ASSERTMSG ("Second index is present but first is not ",
|
||
|
Deb->nipxDestSysInstance.asnType);
|
||
|
rc = MprAdminMIBEntryGetNext(g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Rtp,
|
||
|
&RtSize);
|
||
|
if (rc==NO_ERROR) {
|
||
|
FreeAsnString (&Deb->nipxDestNetNum);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
rc = MprAdminMIBEntryGetFirst (g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Rtp,
|
||
|
&RtSize);
|
||
|
break;
|
||
|
default:
|
||
|
DbgTrace (DBG_NIPXDESTENTRY,
|
||
|
("NIPX-Dest: Get called with unsupported action code %d.\n",
|
||
|
actionId));
|
||
|
return MIB_S_INVALID_PARAMETER;
|
||
|
}
|
||
|
switch (rc) {
|
||
|
case NO_ERROR:
|
||
|
DbgTrace (DBG_NIPXDESTENTRY,
|
||
|
("NIPX-Dest: Get(%d) request succeded for net"
|
||
|
" %.2x%.2x%.2x%.2x -> %.2x%.2x%.2x%.2x.\n", actionId,
|
||
|
MibGetInputData.MibIndex.RoutingTableIndex.Network[0],
|
||
|
MibGetInputData.MibIndex.RoutingTableIndex.Network[1],
|
||
|
MibGetInputData.MibIndex.RoutingTableIndex.Network[2],
|
||
|
MibGetInputData.MibIndex.RoutingTableIndex.Network[3],
|
||
|
Rtp->Network[0],
|
||
|
Rtp->Network[1],
|
||
|
Rtp->Network[2],
|
||
|
Rtp->Network[3]));
|
||
|
ForceAsnInteger (&Deb->nipxDestSysInstance, NIPX_DEFAULT_SYS_INSTANCE);
|
||
|
ForceAsnOctetString (&Deb->nipxDestNetNum, Deb->NetNumVal,
|
||
|
Rtp->Network, sizeof (Deb->NetNumVal));
|
||
|
switch (Rtp->Protocol) {
|
||
|
case IPX_PROTOCOL_LOCAL:
|
||
|
SetAsnInteger (&Deb->nipxDestProtocol, 2);
|
||
|
break;
|
||
|
case IPX_PROTOCOL_STATIC:
|
||
|
SetAsnInteger (&Deb->nipxDestProtocol, 5);
|
||
|
break;
|
||
|
case IPX_PROTOCOL_RIP:
|
||
|
SetAsnInteger (&Deb->nipxDestProtocol, 3);
|
||
|
break;
|
||
|
case IPX_PROTOCOL_NLSP:
|
||
|
SetAsnInteger (&Deb->nipxDestProtocol, 4);
|
||
|
break;
|
||
|
default:
|
||
|
SetAsnInteger (&Deb->nipxDestProtocol, 1); // other
|
||
|
break;
|
||
|
}
|
||
|
SetAsnInteger (&Deb->nipxDestTicks, Rtp->TickCount);
|
||
|
SetAsnInteger (&Deb->nipxDestHopCount, Rtp->HopCount);
|
||
|
SetAsnInteger (&Deb->nipxDestNextHopCircIndex, Rtp->InterfaceIndex);
|
||
|
SetAsnOctetString (&Deb->nipxDestNextHopNICAddress, Deb->NextHopNICAddressVal,
|
||
|
Rtp->NextHopMacAddress, sizeof (Deb->NextHopNICAddressVal));
|
||
|
SetAsnOctetString (&Deb->nipxDestNextHopNetNum, Deb->NextHopNetNumVal,
|
||
|
ZERO_NET_NUM, sizeof (Deb->NextHopNetNumVal));
|
||
|
MprAdminMIBBufferFree (Rtp);
|
||
|
return MIB_S_SUCCESS;
|
||
|
case ERROR_NO_MORE_ITEMS:
|
||
|
ASSERTMSG ("ERROR_NO_MORE_ITEMS returned, but request is not GETNEXT ",
|
||
|
actionId==MIB_ACTION_GETNEXT);
|
||
|
DbgTrace (DBG_NIPXDESTENTRY,
|
||
|
("NIPX-Dest: End of table reached on GETFIRST/GETNEXT request"
|
||
|
" for network %.2x%.2x%.2x%.2x.\n",
|
||
|
MibGetInputData.MibIndex.RoutingTableIndex.Network[0],
|
||
|
MibGetInputData.MibIndex.RoutingTableIndex.Network[1],
|
||
|
MibGetInputData.MibIndex.RoutingTableIndex.Network[2],
|
||
|
MibGetInputData.MibIndex.RoutingTableIndex.Network[3]));
|
||
|
return MIB_S_NO_MORE_ENTRIES;
|
||
|
default:
|
||
|
*errorIndex = 1;
|
||
|
DbgTrace (DBG_NIPXDESTENTRY,
|
||
|
("NIPX-Dest: Get request for network %.2x%.2x%.2x%.2x"
|
||
|
" failed with error %ld.\n",
|
||
|
MibGetInputData.MibIndex.RoutingTableIndex.Network[0],
|
||
|
MibGetInputData.MibIndex.RoutingTableIndex.Network[1],
|
||
|
MibGetInputData.MibIndex.RoutingTableIndex.Network[2],
|
||
|
MibGetInputData.MibIndex.RoutingTableIndex.Network[3], rc));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
#undef Deb
|
||
|
}
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// nipxStaticRouteEntry table (1.3.6.1.4.1.23.2.5.3.1.2) //
|
||
|
// //
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
UINT
|
||
|
get_nipxStaticRouteEntry(
|
||
|
UINT actionId,
|
||
|
AsnAny * objectArray,
|
||
|
UINT * errorIndex
|
||
|
) {
|
||
|
#define Sreb ((buf_nipxStaticRouteEntry *)objectArray)
|
||
|
PIPX_ROUTE Rtp;
|
||
|
IPX_MIB_GET_INPUT_DATA MibGetInputData;
|
||
|
DWORD rc;
|
||
|
ULONG RtSize;
|
||
|
|
||
|
if (!EnsureRouterConnection()) {
|
||
|
*errorIndex = 0;
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
if (GetAsnInteger (&Sreb->nipxStaticRouteSysInstance, NIPX_DEFAULT_SYS_INSTANCE)!=NIPX_DEFAULT_SYS_INSTANCE) {
|
||
|
*errorIndex = 0;
|
||
|
DbgTrace (DBG_NIPXSTATICRTENTRY,
|
||
|
("NIPX-staticRoutes: nipxStaticRouteSysInstance is not 0.\n"));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
MibGetInputData.TableId = IPX_STATIC_ROUTE_TABLE;
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.InterfaceIndex
|
||
|
= (ULONG)GetAsnInteger (&Sreb->nipxStaticRouteCircIndex, ZERO_INTERFACE_INDEX);
|
||
|
GetAsnOctetString (
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network,
|
||
|
&Sreb->nipxStaticRouteNetNum,
|
||
|
sizeof (MibGetInputData.MibIndex.StaticRoutesTableIndex.Network),
|
||
|
ZERO_NET_NUM);
|
||
|
|
||
|
switch (actionId) {
|
||
|
case MIB_ACTION_GET:
|
||
|
ASSERTMSG ("No index in GET request for table ",
|
||
|
Sreb->nipxStaticRouteSysInstance.asnType
|
||
|
&&Sreb->nipxStaticRouteCircIndex.asnType
|
||
|
&&Sreb->nipxStaticRouteNetNum.asnType);
|
||
|
rc = MprAdminMIBEntryGet(g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Rtp,
|
||
|
&RtSize);
|
||
|
break;
|
||
|
case MIB_ACTION_GETNEXT:
|
||
|
if (Sreb->nipxStaticRouteCircIndex.asnType) {
|
||
|
ASSERTMSG ("Second index is present but first is not ",
|
||
|
Sreb->nipxStaticRouteSysInstance.asnType);
|
||
|
if (!Sreb->nipxStaticRouteNetNum.asnType) {
|
||
|
rc = MprAdminMIBEntryGet(g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Rtp,
|
||
|
&RtSize);
|
||
|
if (rc==NO_ERROR)
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
rc = MprAdminMIBEntryGetNext(g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Rtp,
|
||
|
&RtSize);
|
||
|
if (rc==NO_ERROR) {
|
||
|
if (Sreb->nipxStaticRouteNetNum.asnType) {
|
||
|
FreeAsnString (&Sreb->nipxStaticRouteNetNum);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
ASSERTMSG ("Third index is present but second is not ",
|
||
|
!Sreb->nipxStaticRouteNetNum.asnType);
|
||
|
rc = MprAdminMIBEntryGetFirst (g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Rtp,
|
||
|
&RtSize);
|
||
|
}
|
||
|
break;
|
||
|
default:
|
||
|
DbgTrace (DBG_NIPXSTATICRTENTRY,
|
||
|
("NIPX-staticRoutes: Get called with unsupported action code %d.\n",
|
||
|
actionId));
|
||
|
return MIB_S_INVALID_PARAMETER;
|
||
|
}
|
||
|
|
||
|
if (rc == NO_ERROR && Rtp == NULL)
|
||
|
{
|
||
|
rc = ERROR_CAN_NOT_COMPLETE;
|
||
|
}
|
||
|
|
||
|
switch (rc) {
|
||
|
case NO_ERROR:
|
||
|
DbgTrace (DBG_NIPXSTATICRTENTRY,
|
||
|
("NIPX-staticRoutes: Get(%d) request succeded for net"
|
||
|
" %.2x%.2x%.2x%.2x -> %.2x%.2x%.2x%.2x on if %ld\n", actionId,
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[0],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[1],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[2],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[3],
|
||
|
Rtp->Network[0],
|
||
|
Rtp->Network[1],
|
||
|
Rtp->Network[2],
|
||
|
Rtp->Network[3],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.InterfaceIndex));
|
||
|
ForceAsnInteger (&Sreb->nipxStaticRouteSysInstance, NIPX_DEFAULT_SYS_INSTANCE);
|
||
|
ForceAsnInteger (&Sreb->nipxStaticRouteCircIndex, Rtp->InterfaceIndex);
|
||
|
ForceAsnOctetString (&Sreb->nipxStaticRouteNetNum, Sreb->NetNumVal,
|
||
|
Rtp->Network, sizeof (Sreb->NetNumVal));
|
||
|
SetAsnInteger (&Sreb->nipxStaticRouteExistState, NIPX_STATE_ON);
|
||
|
SetAsnInteger (&Sreb->nipxStaticRouteTicks, Rtp->TickCount);
|
||
|
SetAsnInteger (&Sreb->nipxStaticRouteHopCount, Rtp->HopCount);
|
||
|
MprAdminMIBBufferFree (Rtp);
|
||
|
return MIB_S_SUCCESS;
|
||
|
case ERROR_NO_MORE_ITEMS:
|
||
|
ASSERTMSG ("ERROR_NO_MORE_ITEMS returned, but request is not GETNEXT ",
|
||
|
actionId==MIB_ACTION_GETNEXT);
|
||
|
DbgTrace (DBG_NIPXSTATICRTENTRY,
|
||
|
("NIPX-staticRoutes: End of table reached on GETFIRST/GETNEXT request for network"
|
||
|
" %.2x%.2x%.2x%.2x on if %ld.\n",
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[0],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[1],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[2],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[3],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.InterfaceIndex));
|
||
|
return MIB_S_NO_MORE_ENTRIES;
|
||
|
default:
|
||
|
*errorIndex = 1;
|
||
|
DbgTrace (DBG_NIPXSTATICRTENTRY,
|
||
|
("NIPX-staticRoutes: Get request for network %.2x%.2x%.2x%.2x."
|
||
|
" on if %ld failed with error %ld.\n",
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[0],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[1],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[2],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[3],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.InterfaceIndex, rc));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
#undef Sreb
|
||
|
}
|
||
|
|
||
|
UINT
|
||
|
set_nipxStaticRouteEntry(
|
||
|
UINT actionId,
|
||
|
AsnAny * objectArray,
|
||
|
UINT * errorIndex
|
||
|
) {
|
||
|
#define Sreb ((sav_nipxStaticRouteEntry *)objectArray)
|
||
|
PIPX_ROUTE Rtp;
|
||
|
IPX_MIB_GET_INPUT_DATA MibGetInputData;
|
||
|
DWORD rc;
|
||
|
ULONG RtSize;
|
||
|
|
||
|
if (!EnsureRouterConnection()) {
|
||
|
*errorIndex = 0;
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
if (GetAsnInteger (&Sreb->nipxStaticRouteSysInstance, NIPX_INVALID_SYS_INSTANCE)!=NIPX_DEFAULT_SYS_INSTANCE) {
|
||
|
*errorIndex = 0;
|
||
|
DbgTrace (DBG_NIPXSTATICRTENTRY,
|
||
|
("NIPX-staticRoutes: nipxStaticRouteSysInstance is not 0.\n"));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
switch (actionId) {
|
||
|
case MIB_ACTION_VALIDATE:
|
||
|
ASSERTMSG ("No index in VALIDATE request for table ",
|
||
|
Sreb->nipxStaticRouteCircIndex.asnType
|
||
|
&&Sreb->nipxStaticRouteNetNum.asnType);
|
||
|
MibGetInputData.TableId = IPX_STATIC_ROUTE_TABLE;
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.InterfaceIndex
|
||
|
= (ULONG)GetAsnInteger (&Sreb->nipxStaticRouteCircIndex,INVALID_INTERFACE_INDEX);
|
||
|
GetAsnOctetString (
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network,
|
||
|
&Sreb->nipxStaticRouteNetNum,
|
||
|
sizeof (MibGetInputData.MibIndex.StaticRoutesTableIndex.Network),
|
||
|
INVALID_NET_NUM);
|
||
|
Sreb->ActionFlag
|
||
|
= (BOOLEAN)GetAsnInteger (&Sreb->nipxStaticRouteExistState,
|
||
|
NIPX_STATE_NOACTION);
|
||
|
rc = MprAdminMIBEntryGet(g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Rtp,
|
||
|
&RtSize);
|
||
|
if (rc == NO_ERROR && Rtp == NULL)
|
||
|
{
|
||
|
rc = ERROR_CAN_NOT_COMPLETE;
|
||
|
DbgTrace (DBG_NIPXSTATICRTENTRY,
|
||
|
("NIPX-staticRoutes: Validate failed"
|
||
|
" for network %.2x.2x.2x.2x on if %ld with error %ld\n",
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[0],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[1],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[2],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[3],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.InterfaceIndex,rc));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
if (rc==NO_ERROR) {
|
||
|
Sreb->MibSetInputData.MibRow.Route = *Rtp;
|
||
|
if (Sreb->ActionFlag == NIPX_STATE_ON)
|
||
|
Sreb->ActionFlag = NIPX_STATE_NOACTION;
|
||
|
MprAdminMIBBufferFree (Rtp);
|
||
|
DbgTrace (DBG_NIPXSTATICRTENTRY,
|
||
|
("NIPX-staticRoutes: Validated"
|
||
|
" network %.2x.2x.2x.2x on if %ld\n",
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[0],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[1],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[2],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[3],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.InterfaceIndex));
|
||
|
}
|
||
|
else if (Sreb->ActionFlag == MIPX_EXIST_STATE_CREATED) {
|
||
|
DbgTrace (DBG_NIPXSTATICRTENTRY,
|
||
|
("NIPX-staticRoutes: Prepared to add"
|
||
|
" network %.2x.2x.2x.2x on if %ld\n",
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[0],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[1],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[2],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[3],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.InterfaceIndex));
|
||
|
Sreb->MibSetInputData.MibRow.Route.InterfaceIndex
|
||
|
= (ULONG)GetAsnInteger (&Sreb->nipxStaticRouteCircIndex,
|
||
|
INVALID_INTERFACE_INDEX);
|
||
|
GetAsnOctetString (Sreb->MibSetInputData.MibRow.Route.Network,
|
||
|
&Sreb->nipxStaticRouteNetNum,
|
||
|
sizeof (Sreb->MibSetInputData.MibRow.Route.Network),
|
||
|
NULL);
|
||
|
Sreb->MibSetInputData.MibRow.Route.Protocol = IPX_PROTOCOL_STATIC;
|
||
|
Sreb->MibSetInputData.MibRow.Route.Flags = 0;
|
||
|
Sreb->MibSetInputData.MibRow.Route.TickCount = MAXSHORT;
|
||
|
Sreb->MibSetInputData.MibRow.Route.HopCount = 15;
|
||
|
memset (Sreb->MibSetInputData.MibRow.Route.NextHopMacAddress,
|
||
|
0xFF,
|
||
|
sizeof (Sreb->MibSetInputData.MibRow.Route.NextHopMacAddress));
|
||
|
}
|
||
|
else {
|
||
|
DbgTrace (DBG_NIPXSTATICRTENTRY,
|
||
|
("NIPX-staticRoutes: Validate failed"
|
||
|
" for network %.2x.2x.2x.2x on if %ld with error %ld\n",
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[0],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[1],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[2],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network[3],
|
||
|
MibGetInputData.MibIndex.StaticRoutesTableIndex.InterfaceIndex,rc));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
Sreb->MibSetInputData.MibRow.Route.TickCount
|
||
|
= (USHORT)GetAsnInteger (&Sreb->nipxStaticRouteTicks,
|
||
|
Sreb->MibSetInputData.MibRow.Route.TickCount);
|
||
|
Sreb->MibSetInputData.MibRow.Route.HopCount
|
||
|
= (USHORT)GetAsnInteger (&Sreb->nipxStaticRouteHopCount,
|
||
|
Sreb->MibSetInputData.MibRow.Route.HopCount);
|
||
|
return MIB_S_SUCCESS;
|
||
|
case MIB_ACTION_SET:
|
||
|
switch (Sreb->ActionFlag) {
|
||
|
case MIPX_EXIST_STATE_NOACTION:
|
||
|
rc = MprAdminMIBEntrySet (g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&Sreb->MibSetInputData,
|
||
|
sizeof(IPX_MIB_SET_INPUT_DATA));
|
||
|
break;
|
||
|
case MIPX_EXIST_STATE_DELETED:
|
||
|
rc = MprAdminMIBEntryDelete (g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&Sreb->MibSetInputData,
|
||
|
sizeof(IPX_MIB_SET_INPUT_DATA));
|
||
|
break;
|
||
|
case MIPX_EXIST_STATE_CREATED:
|
||
|
rc = MprAdminMIBEntryCreate (g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&Sreb->MibSetInputData,
|
||
|
sizeof(IPX_MIB_SET_INPUT_DATA));
|
||
|
break;
|
||
|
}
|
||
|
if (rc==NO_ERROR) {
|
||
|
DbgTrace (DBG_NIPXSTATICRTENTRY,
|
||
|
("NIPX-staticRoutes: Set succeded for"
|
||
|
" network %.2x.2x.2x.2x on if %ld\n",
|
||
|
Sreb->MibSetInputData.MibRow.Route.Network[0],
|
||
|
Sreb->MibSetInputData.MibRow.Route.Network[1],
|
||
|
Sreb->MibSetInputData.MibRow.Route.Network[2],
|
||
|
Sreb->MibSetInputData.MibRow.Route.Network[3],
|
||
|
Sreb->MibSetInputData.MibRow.Route.InterfaceIndex));
|
||
|
return MIB_S_SUCCESS;
|
||
|
}
|
||
|
else {
|
||
|
DbgTrace (DBG_NIPXSTATICRTENTRY,
|
||
|
("NIPX-staticRoutes: Set failed for"
|
||
|
" network %.2x.2x.2x.2x on if %ld with error %ld\n",
|
||
|
Sreb->MibSetInputData.MibRow.Route.Network[0],
|
||
|
Sreb->MibSetInputData.MibRow.Route.Network[1],
|
||
|
Sreb->MibSetInputData.MibRow.Route.Network[2],
|
||
|
Sreb->MibSetInputData.MibRow.Route.Network[3],
|
||
|
Sreb->MibSetInputData.MibRow.Route.InterfaceIndex, rc));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
case MIB_ACTION_CLEANUP:
|
||
|
return MIB_S_SUCCESS;
|
||
|
default:
|
||
|
DbgTrace (DBG_NIPXSTATICRTENTRY,
|
||
|
("NIPX-staticRoutes: Set called with unsupported action code %d.\n",
|
||
|
actionId));
|
||
|
return MIB_S_INVALID_PARAMETER;
|
||
|
}
|
||
|
#undef Sreb
|
||
|
}
|
||
|
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// nipxServices group (1.3.6.1.4.1.23.2.5.4) //
|
||
|
// //
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// nipxServEntry table (1.3.6.1.4.1.23.2.5.4.1.1) //
|
||
|
// //
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
UINT
|
||
|
get_nipxServEntry(
|
||
|
UINT actionId,
|
||
|
AsnAny * objectArray,
|
||
|
UINT * errorIndex
|
||
|
) {
|
||
|
#define Seb ((buf_nipxServEntry *)objectArray)
|
||
|
PIPX_SERVICE Svp, SvpCur;
|
||
|
IPX_MIB_GET_INPUT_DATA MibGetInputData;
|
||
|
DWORD rc;
|
||
|
ULONG SvSize;
|
||
|
INT lenPrev, lenNext, lenCur;
|
||
|
|
||
|
if (!EnsureRouterConnection()) {
|
||
|
*errorIndex = 0;
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
if (GetAsnInteger (&Seb->nipxServSysInstance, NIPX_DEFAULT_SYS_INSTANCE)!=NIPX_DEFAULT_SYS_INSTANCE) {
|
||
|
*errorIndex = 0;
|
||
|
DbgTrace (DBG_NIPXSERVENTRY, ("NIPX-Serv: nipxServSysInstance is not 0.\n"));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
MibGetInputData.TableId = IPX_SERV_TABLE;
|
||
|
MibGetInputData.MibIndex.ServicesTableIndex.ServiceType
|
||
|
= GetAsnServType (&Seb->nipxServType, ZERO_SERVER_TYPE);
|
||
|
GetAsnDispString (MibGetInputData.MibIndex.ServicesTableIndex.ServiceName,
|
||
|
&Seb->nipxServName, ZERO_SERVER_NAME);
|
||
|
|
||
|
switch (actionId) {
|
||
|
case MIB_ACTION_GET:
|
||
|
ASSERTMSG ("No index in GET request for table ",
|
||
|
Seb->nipxServSysInstance.asnType
|
||
|
&&Seb->nipxServType.asnType
|
||
|
&& Seb->nipxServName.asnType);
|
||
|
|
||
|
rc = MprAdminMIBEntryGet(g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Svp,
|
||
|
&SvSize);
|
||
|
break;
|
||
|
case MIB_ACTION_GETNEXT:
|
||
|
if (Seb->nipxServType.asnType) {
|
||
|
ASSERTMSG ("Second index is present but first is not ",
|
||
|
Seb->nipxServSysInstance.asnType);
|
||
|
|
||
|
if (!Seb->nipxServName.asnType) {
|
||
|
rc = MprAdminMIBEntryGet(g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Svp,
|
||
|
&SvSize);
|
||
|
if (rc==NO_ERROR) {
|
||
|
FreeAsnString (&Seb->nipxServType);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
rc = MprAdminMIBEntryGetNext(g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Svp,
|
||
|
&SvSize);
|
||
|
if (rc==NO_ERROR) {
|
||
|
FreeAsnString (&Seb->nipxServType);
|
||
|
if (Seb->nipxServName.asnType) {
|
||
|
FreeAsnString (&Seb->nipxServName);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
ASSERTMSG ("Third index is present but second is not ",
|
||
|
!Seb->nipxServName.asnType);
|
||
|
rc = MprAdminMIBEntryGetFirst(g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Svp,
|
||
|
&SvSize);
|
||
|
}
|
||
|
break;
|
||
|
default:
|
||
|
DbgTrace (DBG_NIPXSERVENTRY,
|
||
|
("NIPX-Serv: Get called with unsupported action code %d.\n",
|
||
|
actionId));
|
||
|
return MIB_S_INVALID_PARAMETER;
|
||
|
}
|
||
|
switch (rc) {
|
||
|
case NO_ERROR:
|
||
|
DbgTrace (DBG_NIPXSERVENTRY,
|
||
|
("NIPX-Serv: Get(%d) request succeded for service"
|
||
|
" %.4x-%.48s -> %.4x-%.48s.\n", actionId,
|
||
|
MibGetInputData.MibIndex.ServicesTableIndex.ServiceType,
|
||
|
MibGetInputData.MibIndex.ServicesTableIndex.ServiceName,
|
||
|
Svp->Server.Type, Svp->Server.Name));
|
||
|
ForceAsnInteger (&Seb->nipxServSysInstance, NIPX_DEFAULT_SYS_INSTANCE);
|
||
|
ForceAsnServType (&Seb->nipxServType, Seb->TypeVal, Svp->Server.Type);
|
||
|
ForceAsnDispString (&Seb->nipxServName, Seb->NameVal,
|
||
|
Svp->Server.Name, sizeof (Seb->NameVal));
|
||
|
switch (Svp->Protocol) {
|
||
|
case IPX_PROTOCOL_LOCAL:
|
||
|
SetAsnInteger (&Seb->nipxServProtocol, 2);
|
||
|
break;
|
||
|
case IPX_PROTOCOL_STATIC:
|
||
|
SetAsnInteger (&Seb->nipxServProtocol, 5);
|
||
|
break;
|
||
|
case IPX_PROTOCOL_SAP:
|
||
|
SetAsnInteger (&Seb->nipxServProtocol, 6);
|
||
|
break;
|
||
|
case IPX_PROTOCOL_NLSP:
|
||
|
SetAsnInteger (&Seb->nipxServProtocol, 4);
|
||
|
break;
|
||
|
default:
|
||
|
SetAsnInteger (&Seb->nipxServProtocol, 1); // other
|
||
|
break;
|
||
|
}
|
||
|
SetAsnOctetString (&Seb->nipxServNetNum, Seb->NetNumVal,
|
||
|
Svp->Server.Network, sizeof (Seb->NetNumVal));
|
||
|
SetAsnOctetString (&Seb->nipxServNode, Seb->NodeVal,
|
||
|
Svp->Server.Node, sizeof (Seb->NodeVal));
|
||
|
SetAsnOctetString (&Seb->nipxServSocket, Seb->SocketVal,
|
||
|
Svp->Server.Socket, sizeof (Seb->SocketVal));
|
||
|
SetAsnInteger (&Seb->nipxServHopCount, Svp->Server.HopCount);
|
||
|
MprAdminMIBBufferFree (Svp);
|
||
|
return MIB_S_SUCCESS;
|
||
|
case ERROR_NO_MORE_ITEMS:
|
||
|
ASSERTMSG ("ERROR_NO_MORE_ITEMS returned, but request is not GETNEXT ",
|
||
|
actionId==MIB_ACTION_GETNEXT);
|
||
|
DbgTrace (DBG_NIPXSERVENTRY,
|
||
|
("NIPX-Serv: End of table reached on GETFIRST/GETNEXT request"
|
||
|
" for service %.4x-%.48s.\n",
|
||
|
MibGetInputData.MibIndex.ServicesTableIndex.ServiceType,
|
||
|
MibGetInputData.MibIndex.ServicesTableIndex.ServiceName));
|
||
|
return MIB_S_NO_MORE_ENTRIES;
|
||
|
default:
|
||
|
*errorIndex = 0;
|
||
|
DbgTrace (DBG_NIPXSERVENTRY,
|
||
|
("NIPX-Serv: Get request for service %.4x-%.48s"
|
||
|
" failed with error %ld.\n",
|
||
|
MibGetInputData.MibIndex.ServicesTableIndex.ServiceType,
|
||
|
MibGetInputData.MibIndex.ServicesTableIndex.ServiceName, rc));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
#undef Seb
|
||
|
}
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// nipxDestServEntry table (1.3.6.1.4.1.23.2.5.4.2.1) //
|
||
|
// //
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
UINT
|
||
|
get_nipxDestServEntry(
|
||
|
UINT actionId,
|
||
|
AsnAny * objectArray,
|
||
|
UINT * errorIndex
|
||
|
) {
|
||
|
switch (actionId) {
|
||
|
case MIB_ACTION_GET:
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
case MIB_ACTION_GETNEXT:
|
||
|
return MIB_S_NO_MORE_ENTRIES;
|
||
|
default:
|
||
|
return MIB_S_INVALID_PARAMETER;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// nipxStaticServEntry table (1.3.6.1.4.1.23.2.5.4.3.1) //
|
||
|
// //
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
UINT
|
||
|
get_nipxStaticServEntry(
|
||
|
UINT actionId,
|
||
|
AsnAny * objectArray,
|
||
|
UINT * errorIndex
|
||
|
) {
|
||
|
#define Sseb ((buf_nipxStaticServEntry *)objectArray)
|
||
|
PIPX_SERVICE Svp;
|
||
|
IPX_MIB_GET_INPUT_DATA MibGetInputData;
|
||
|
DWORD rc;
|
||
|
ULONG SvSize;
|
||
|
|
||
|
if (!EnsureRouterConnection()) {
|
||
|
*errorIndex = 0;
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
if (GetAsnInteger (&Sseb->nipxStaticServSysInstance, NIPX_DEFAULT_SYS_INSTANCE)!=NIPX_DEFAULT_SYS_INSTANCE) {
|
||
|
*errorIndex = 0;
|
||
|
DbgTrace (DBG_NIPXSTATICSERVENTRY, ("NIPX-StaticServ: nipxStaticServSysInstance is not 0.\n"));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
MibGetInputData.TableId = IPX_STATIC_SERV_TABLE;
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.InterfaceIndex
|
||
|
= (ULONG)GetAsnInteger (&Sseb->nipxStaticServCircIndex,
|
||
|
ZERO_INTERFACE_INDEX);
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceType
|
||
|
= GetAsnServType (&Sseb->nipxStaticServType, ZERO_SERVER_TYPE);
|
||
|
GetAsnDispString (
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceName,
|
||
|
&Sseb->nipxStaticServName, ZERO_SERVER_NAME);
|
||
|
|
||
|
switch (actionId) {
|
||
|
case MIB_ACTION_GET:
|
||
|
ASSERTMSG ("No index in GET request for table ",
|
||
|
Sseb->nipxStaticServSysInstance.asnType
|
||
|
&&Sseb->nipxStaticServCircIndex.asnType
|
||
|
&&Sseb->nipxStaticServType.asnType
|
||
|
&&Sseb->nipxStaticServName.asnType);
|
||
|
rc = MprAdminMIBEntryGet(g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Svp,
|
||
|
&SvSize);
|
||
|
break;
|
||
|
case MIB_ACTION_GETNEXT:
|
||
|
if (Sseb->nipxStaticServCircIndex.asnType) {
|
||
|
if (!Sseb->nipxStaticServType.asnType
|
||
|
|| !Sseb->nipxStaticServName.asnType) {
|
||
|
rc = MprAdminMIBEntryGet(g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Svp,
|
||
|
&SvSize);
|
||
|
if (rc==NO_ERROR) {
|
||
|
if (Sseb->nipxStaticServType.asnType) {
|
||
|
FreeAsnString (&Sseb->nipxStaticServType);
|
||
|
}
|
||
|
if (Sseb->nipxStaticServName.asnType) {
|
||
|
FreeAsnString (&Sseb->nipxStaticServName);
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
rc = MprAdminMIBEntryGetNext(g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Svp,
|
||
|
&SvSize);
|
||
|
if (rc==NO_ERROR) {
|
||
|
if (Sseb->nipxStaticServType.asnType) {
|
||
|
FreeAsnString (&Sseb->nipxStaticServType);
|
||
|
}
|
||
|
if (Sseb->nipxStaticServName.asnType) {
|
||
|
FreeAsnString (&Sseb->nipxStaticServName);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
ASSERTMSG ("Third or fourth indeces present but first is not ",
|
||
|
!Sseb->nipxStaticServType.asnType
|
||
|
&&!Sseb->nipxStaticServName.asnType);
|
||
|
rc = MprAdminMIBEntryGetFirst (g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Svp,
|
||
|
&SvSize);
|
||
|
}
|
||
|
break;
|
||
|
default:
|
||
|
DbgTrace (DBG_NIPXSTATICSERVENTRY,
|
||
|
("NIPX-StaticServ: Get called with unsupported action code %d.\n",
|
||
|
actionId));
|
||
|
return MIB_S_INVALID_PARAMETER;
|
||
|
}
|
||
|
if (rc == NO_ERROR && Svp == NULL)
|
||
|
{
|
||
|
rc = ERROR_CAN_NOT_COMPLETE;
|
||
|
}
|
||
|
switch (rc) {
|
||
|
case NO_ERROR:
|
||
|
DbgTrace (DBG_NIPXSTATICSERVENTRY,
|
||
|
("NIPX-StaticServ: Get (%d) request succeded for service"
|
||
|
" %.4x-%.48s -> %.4x-%.48s on if %ld.\n", actionId,
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceType,
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceName,
|
||
|
Svp->Server.Type, Svp->Server.Name,
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.InterfaceIndex));
|
||
|
ForceAsnInteger (&Sseb->nipxStaticServSysInstance, NIPX_DEFAULT_SYS_INSTANCE);
|
||
|
ForceAsnInteger (&Sseb->nipxStaticServCircIndex, Svp->InterfaceIndex);
|
||
|
ForceAsnServType (&Sseb->nipxStaticServType, Sseb->TypeVal, Svp->Server.Type);
|
||
|
ForceAsnDispString (&Sseb->nipxStaticServName, Sseb->NameVal,
|
||
|
Svp->Server.Name, sizeof (Sseb->NameVal));
|
||
|
SetAsnInteger (&Sseb->nipxStaticServExistState, NIPX_STATE_ON);
|
||
|
SetAsnOctetString (&Sseb->nipxStaticServNetNum, Sseb->NetNumVal,
|
||
|
Svp->Server.Network, sizeof (Sseb->NetNumVal));
|
||
|
SetAsnOctetString (&Sseb->nipxStaticServNode, Sseb->NodeVal,
|
||
|
Svp->Server.Node, sizeof (Sseb->NodeVal));
|
||
|
SetAsnOctetString (&Sseb->nipxStaticServSocket, Sseb->SocketVal,
|
||
|
Svp->Server.Socket, sizeof (Sseb->SocketVal));
|
||
|
SetAsnInteger (&Sseb->nipxStaticServHopCount, Svp->Server.HopCount);
|
||
|
MprAdminMIBBufferFree (Svp);
|
||
|
return MIB_S_SUCCESS;
|
||
|
case ERROR_NO_MORE_ITEMS:
|
||
|
ASSERTMSG ("ERROR_NO_MORE_ITEMS returned, but request is not GETNEXT ",
|
||
|
actionId==MIB_ACTION_GETNEXT);
|
||
|
DbgTrace (DBG_NIPXSTATICSERVENTRY,
|
||
|
("NIPX-StaticServ: End of table reached on GETFIRST/GETNEXT request"
|
||
|
" for service %.4x-%.48s on if %ld.\n",
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceType,
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceName,
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.InterfaceIndex));
|
||
|
return MIB_S_NO_MORE_ENTRIES;
|
||
|
default:
|
||
|
*errorIndex = 0;
|
||
|
DbgTrace (DBG_NIPXSTATICSERVENTRY,
|
||
|
("NIPX-StaticServ: Get request for service %.4x-%.48s"
|
||
|
" on if %ld failed with error %ld.\n",
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceType,
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceName,
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.InterfaceIndex,
|
||
|
rc));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
#undef Sseb
|
||
|
|
||
|
}
|
||
|
|
||
|
UINT
|
||
|
set_nipxStaticServEntry(
|
||
|
UINT actionId,
|
||
|
AsnAny * objectArray,
|
||
|
UINT * errorIndex
|
||
|
) {
|
||
|
#define Sseb ((sav_nipxStaticServEntry *)objectArray)
|
||
|
PIPX_SERVICE Svp;
|
||
|
IPX_MIB_GET_INPUT_DATA MibGetInputData;
|
||
|
DWORD rc;
|
||
|
ULONG SvSize;
|
||
|
|
||
|
if (!EnsureRouterConnection()) {
|
||
|
*errorIndex = 0;
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
if (GetAsnInteger (&Sseb->nipxStaticServSysInstance, NIPX_INVALID_SYS_INSTANCE)!=NIPX_DEFAULT_SYS_INSTANCE) {
|
||
|
*errorIndex = 0;
|
||
|
DbgTrace (DBG_NIPXSTATICSERVENTRY, ("NIPX-StaticServ: nipxStaticServSysInstance is not 0.\n"));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
|
||
|
switch (actionId) {
|
||
|
case MIB_ACTION_VALIDATE:
|
||
|
ASSERTMSG ("No index in VALIDATE request for table ",
|
||
|
Sseb->nipxStaticServSysInstance.asnType
|
||
|
&&Sseb->nipxStaticServCircIndex.asnType
|
||
|
&&Sseb->nipxStaticServType.asnType
|
||
|
&&Sseb->nipxStaticServName.asnType);
|
||
|
MibGetInputData.TableId = IPX_STATIC_SERV_TABLE;
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.InterfaceIndex
|
||
|
= (ULONG)GetAsnInteger (&Sseb->nipxStaticServCircIndex,
|
||
|
INVALID_INTERFACE_INDEX);
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceType
|
||
|
= GetAsnServType (&Sseb->nipxStaticServType, INVALID_SERVER_TYPE);
|
||
|
GetAsnDispString (
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceName,
|
||
|
&Sseb->nipxStaticServName,
|
||
|
INVALID_SERVER_NAME);
|
||
|
Sseb->ActionFlag
|
||
|
= (BOOLEAN)GetAsnInteger (&Sseb->nipxStaticServExistState,
|
||
|
NIPX_STATE_NOACTION);
|
||
|
rc = MprAdminMIBEntryGet(g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&MibGetInputData,
|
||
|
sizeof(IPX_MIB_GET_INPUT_DATA),
|
||
|
&Svp,
|
||
|
&SvSize);
|
||
|
if (rc == NO_ERROR && Svp == NULL)
|
||
|
{
|
||
|
rc = ERROR_CAN_NOT_COMPLETE;
|
||
|
DbgTrace (DBG_NIPXSTATICSERVENTRY,
|
||
|
("NIPX-StaticServ: Validate failed"
|
||
|
" for service %.4x-%.48s on if %ld with error %ld.\n",
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceType,
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceName,
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.InterfaceIndex,
|
||
|
rc));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
if (rc==NO_ERROR) {
|
||
|
Sseb->MibSetInputData.MibRow.Service = *Svp;
|
||
|
if (Sseb->ActionFlag == NIPX_STATE_ON)
|
||
|
Sseb->ActionFlag = NIPX_STATE_NOACTION;
|
||
|
MprAdminMIBBufferFree (Svp);
|
||
|
DbgTrace (DBG_NIPXSTATICSERVENTRY,
|
||
|
("NIPX-StaticServ: Validated"
|
||
|
" service %.4x-%.48s on if %ld.\n",
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceType,
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceName,
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.InterfaceIndex));
|
||
|
}
|
||
|
else if (Sseb->ActionFlag == NIPX_STATE_ON) {
|
||
|
DbgTrace (DBG_NIPXSTATICSERVENTRY,
|
||
|
("NIPX-StaticServ: Prepared to add"
|
||
|
" service %.4x-%.48s on if %ld.\n",
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceType,
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceName,
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.InterfaceIndex));
|
||
|
Sseb->MibSetInputData.MibRow.Service.InterfaceIndex
|
||
|
= (ULONG) GetAsnInteger (&Sseb->nipxStaticServCircIndex,
|
||
|
INVALID_INTERFACE_INDEX);
|
||
|
Sseb->MibSetInputData.MibRow.Service.Protocol = IPX_PROTOCOL_STATIC;
|
||
|
Sseb->MibSetInputData.MibRow.Service.Server.Type
|
||
|
= GetAsnServType (&Sseb->nipxStaticServType,
|
||
|
INVALID_SERVER_TYPE);
|
||
|
GetAsnDispString (
|
||
|
Sseb->MibSetInputData.MibRow.Service.Server.Name,
|
||
|
&Sseb->nipxStaticServName,
|
||
|
INVALID_SERVER_NAME);
|
||
|
memset (Sseb->MibSetInputData.MibRow.Service.Server.Network, 0,
|
||
|
sizeof (Sseb->MibSetInputData.MibRow.Service.Server.Network));
|
||
|
memset (Sseb->MibSetInputData.MibRow.Service.Server.Node, 0,
|
||
|
sizeof (Sseb->MibSetInputData.MibRow.Service.Server.Node));
|
||
|
memset (Sseb->MibSetInputData.MibRow.Service.Server.Socket, 0,
|
||
|
sizeof (Sseb->MibSetInputData.MibRow.Service.Server.Socket));
|
||
|
Sseb->MibSetInputData.MibRow.Service.Server.HopCount = 15;
|
||
|
}
|
||
|
else {
|
||
|
DbgTrace (DBG_NIPXSTATICSERVENTRY,
|
||
|
("NIPX-StaticServ: Validate failed"
|
||
|
" for service %.4x-%.48s on if %ld with error %ld.\n",
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceType,
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceName,
|
||
|
MibGetInputData.MibIndex.StaticServicesTableIndex.InterfaceIndex,
|
||
|
rc));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
GetAsnOctetString (Sseb->MibSetInputData.MibRow.Service.Server.Network,
|
||
|
&Sseb->nipxStaticServNetNum,
|
||
|
sizeof (Sseb->MibSetInputData.MibRow.Service.Server.Network),
|
||
|
NULL);
|
||
|
GetAsnOctetString (Sseb->MibSetInputData.MibRow.Service.Server.Node,
|
||
|
&Sseb->nipxStaticServNode,
|
||
|
sizeof (Sseb->MibSetInputData.MibRow.Service.Server.Node),
|
||
|
NULL);
|
||
|
GetAsnOctetString (Sseb->MibSetInputData.MibRow.Service.Server.Socket,
|
||
|
&Sseb->nipxStaticServSocket,
|
||
|
sizeof (Sseb->MibSetInputData.MibRow.Service.Server.Socket),
|
||
|
NULL);
|
||
|
Sseb->MibSetInputData.MibRow.Service.Server.HopCount =
|
||
|
(USHORT)GetAsnInteger (&Sseb->nipxStaticServHopCount,
|
||
|
Sseb->MibSetInputData.MibRow.Service.Server.HopCount);
|
||
|
return MIB_S_SUCCESS;
|
||
|
case MIB_ACTION_SET:
|
||
|
switch (Sseb->ActionFlag) {
|
||
|
case NIPX_STATE_NOACTION:
|
||
|
rc = MprAdminMIBEntrySet (g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&Sseb->MibSetInputData,
|
||
|
sizeof(IPX_MIB_SET_INPUT_DATA));
|
||
|
break;
|
||
|
case NIPX_STATE_OFF:
|
||
|
rc = MprAdminMIBEntryDelete (g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&Sseb->MibSetInputData,
|
||
|
sizeof(IPX_MIB_SET_INPUT_DATA));
|
||
|
break;
|
||
|
case NIPX_STATE_ON:
|
||
|
rc = MprAdminMIBEntryCreate (g_MibServerHandle,
|
||
|
PID_IPX,
|
||
|
IPX_PROTOCOL_BASE,
|
||
|
&Sseb->MibSetInputData,
|
||
|
sizeof(IPX_MIB_SET_INPUT_DATA));
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if (rc==NO_ERROR) {
|
||
|
DbgTrace (DBG_NIPXSTATICSERVENTRY,
|
||
|
("NIPX-StaticServ: Set succeded"
|
||
|
" for service %.4x-%.48s on if %ld.\n",
|
||
|
Sseb->MibSetInputData.MibRow.Service.Server.Type,
|
||
|
Sseb->MibSetInputData.MibRow.Service.Server.Name,
|
||
|
Sseb->MibSetInputData.MibRow.Service.InterfaceIndex));
|
||
|
return MIB_S_SUCCESS;
|
||
|
}
|
||
|
else {
|
||
|
DbgTrace (DBG_NIPXSTATICSERVENTRY,
|
||
|
("NIPX-StaticServ: Set failed for"
|
||
|
" for service %.4x-%.48s on if %ld with error %ld.\n",
|
||
|
Sseb->MibSetInputData.MibRow.Service.Server.Type,
|
||
|
Sseb->MibSetInputData.MibRow.Service.Server.Name,
|
||
|
Sseb->MibSetInputData.MibRow.Service.InterfaceIndex,
|
||
|
rc));
|
||
|
return MIB_S_ENTRY_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
case MIB_ACTION_CLEANUP:
|
||
|
return MIB_S_SUCCESS;
|
||
|
default:
|
||
|
DbgTrace (DBG_NIPXSTATICSERVENTRY,
|
||
|
("NIPX-StaticServ: Set called with unsupported action code %d.\n",
|
||
|
actionId));
|
||
|
return MIB_S_INVALID_PARAMETER;
|
||
|
}
|
||
|
#undef Sseb
|
||
|
}
|