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

1245 lines
43 KiB
C

/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
mipxf.c
Abstract:
ms-ipx instrumentation callbacks.
Author:
Vadim Eydelman (vadime) 30-May-1996
Revision History:
--*/
#include "precomp.h"
///////////////////////////////////////////////////////////////////////////////
// //
// mipxBase group (1.3.6.1.4.1.311.1.8.1) //
// //
///////////////////////////////////////////////////////////////////////////////
UINT
get_mipxBase(
UINT actionId,
AsnAny * objectArray,
UINT * errorIndex
) {
#define Beb ((buf_mipxBase *)objectArray)
IPX_MIB_GET_INPUT_DATA MibGetInputData;
PIPXMIB_BASE Bep;
DWORD rc;
ULONG BeSize;
if (!EnsureRouterConnection()) {
*errorIndex = 0;
return MIB_S_ENTRY_NOT_FOUND;
}
switch (actionId) {
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)
{
return MIB_S_ENTRY_NOT_FOUND;
}
if (rc==NO_ERROR) {
SetAsnInteger (&Beb->mipxBaseOperState, Bep->OperState);
SetAsnOctetString (&Beb->mipxBasePrimaryNetNumber, Beb->PrimaryNetVal,
Bep->PrimaryNetNumber, sizeof (Beb->PrimaryNetVal));
SetAsnOctetString (&Beb->mipxBaseNode, Beb->NodeVal,
Bep->Node, sizeof (Beb->NodeVal));
SetAsnDispString (&Beb->mipxBaseSysName, Beb->SysNameVal,
Bep->SysName, sizeof (Beb->SysNameVal));
SetAsnInteger (&Beb->mipxBaseMaxPathSplits, Bep->MaxPathSplits);
SetAsnInteger (&Beb->mipxBaseIfCount, Bep->IfCount);
SetAsnInteger (&Beb->mipxBaseDestCount, Bep->DestCount);
SetAsnInteger (&Beb->mipxBaseServCount, Bep->ServCount);
MprAdminMIBBufferFree (Bep);
DbgTrace (DBG_IPXBASE, ("MIPX-Base: Get request succeded.\n"));
return MIB_S_SUCCESS;
}
else {
*errorIndex = 0;
DbgTrace (DBG_IPXBASE,
("MIPX-Base: Get request failed with error %ld.\n", rc));
return MIB_S_ENTRY_NOT_FOUND;
}
case MIB_ACTION_GETNEXT:
DbgTrace (DBG_IPXBASE,
("MIPX-Base:Get called with GET_FIRST/GET_NEXT for scalar.\n"));
return MIB_S_INVALID_PARAMETER;
default:
DbgTrace (DBG_IPXBASE,
("MIPX-Base:Get called with unsupported action code %d.\n",
actionId));
return MIB_S_INVALID_PARAMETER;
}
#undef Beb
}
///////////////////////////////////////////////////////////////////////////////
// //
// mipxInterface group (1.3.6.1.4.1.311.1.8.2) //
// //
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// //
// mipxIfEntry table (1.3.6.1.4.1.311.1.8.2.1.1) //
// //
///////////////////////////////////////////////////////////////////////////////
UINT
get_mipxIfEntry(
UINT actionId,
AsnAny * objectArray,
UINT * errorIndex
) {
#define Ifb ((buf_mipxIfEntry *)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;
MibGetInputData.MibIndex.InterfaceTableIndex.InterfaceIndex
= (ULONG)GetAsnInteger (&Ifb->mipxIfIndex, ZERO_INTERFACE_INDEX);
switch (actionId) {
case MIB_ACTION_GET:
ASSERTMSG ("No index in GET request for table ",
Ifb->mipxIfIndex.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 (Ifb->mipxIfIndex.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_IPXINTERFACES,
("MIPX-if: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_IPXINTERFACES, ("MIPX-if: Get(%d) request succeded for if %ld->%ld.\n",
actionId,
MibGetInputData.MibIndex.InterfaceTableIndex.InterfaceIndex,
Ifp->InterfaceIndex));
ForceAsnInteger (&Ifb->mipxIfIndex, Ifp->InterfaceIndex);
SetAsnInteger (&Ifb->mipxIfAdminState, Ifp->AdminState);
SetAsnInteger (&Ifb->mipxIfOperState, Ifp->IfStats.IfOperState);
SetAsnInteger (&Ifb->mipxIfAdapterIndex, Ifp->AdapterIndex);
SetAsnDispString (&Ifb->mipxIfName, Ifb->NameVal,
Ifp->InterfaceName, sizeof (Ifb->NameVal));
SetAsnInteger (&Ifb->mipxIfType, Ifp->InterfaceType);
SetAsnInteger (&Ifb->mipxIfLocalMaxPacketSize, Ifp->IfStats.MaxPacketSize);
SetAsnInteger (&Ifb->mipxIfMediaType, Ifp->MediaType);
SetAsnOctetString (&Ifb->mipxIfNetNumber, Ifb->NetNumberVal,
Ifp->NetNumber, sizeof (Ifb->NetNumberVal));
SetAsnOctetString (&Ifb->mipxIfMacAddress, Ifb->MacAddressVal,
Ifp->MacAddress, sizeof (Ifb->MacAddressVal));
SetAsnInteger (&Ifb->mipxIfDelay, Ifp->Delay);
SetAsnInteger (&Ifb->mipxIfThroughput, Ifp->Throughput);
SetAsnInteger (&Ifb->mipxIfIpxWanEnable, Ifp->EnableIpxWanNegotiation);
SetAsnInteger (&Ifb->mipxIfNetbiosAccept, Ifp->NetbiosAccept);
SetAsnInteger (&Ifb->mipxIfNetbiosDeliver, Ifp->NetbiosDeliver);
SetAsnCounter (&Ifb->mipxIfInHdrErrors, Ifp->IfStats.InHdrErrors);
SetAsnCounter (&Ifb->mipxIfInFilterDrops, Ifp->IfStats.InFiltered);
SetAsnCounter (&Ifb->mipxIfInNoRoutes, Ifp->IfStats.InNoRoutes);
SetAsnCounter (&Ifb->mipxIfInDiscards, Ifp->IfStats.InDiscards);
SetAsnCounter (&Ifb->mipxIfInDelivers, Ifp->IfStats.InDelivers);
SetAsnCounter (&Ifb->mipxIfOutFilterDrops, Ifp->IfStats.OutFiltered);
SetAsnCounter (&Ifb->mipxIfOutDiscards, Ifp->IfStats.OutDiscards);
SetAsnCounter (&Ifb->mipxIfOutDelivers, Ifp->IfStats.OutDelivers);
SetAsnCounter (&Ifb->mipxIfInNetbiosPackets, Ifp->IfStats.NetbiosReceived);
SetAsnCounter (&Ifb->mipxIfOutNetbiosPackets, Ifp->IfStats.NetbiosSent);
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_IPXINTERFACES,
("MIPX-if: End of table reached on GETFIRST/GETNEXT request for if %ld.\n",
MibGetInputData.MibIndex.InterfaceTableIndex.InterfaceIndex));
return MIB_S_NO_MORE_ENTRIES;
default:
*errorIndex = 0;
DbgTrace (DBG_IPXINTERFACES,
("MIPX-if: Get request for if %ld failed with error %ld.\n",
MibGetInputData.MibIndex.InterfaceTableIndex.InterfaceIndex, rc));
return MIB_S_ENTRY_NOT_FOUND;
}
#undef Ifb
}
UINT
set_mipxIfEntry(
UINT actionId,
AsnAny * objectArray,
UINT * errorIndex
) {
#define Ifb ((sav_mipxIfEntry *)objectArray)
PIPX_INTERFACE Ifp;
IPX_MIB_GET_INPUT_DATA MibGetInputData;
DWORD rc;
ULONG IfSize;
if (!EnsureRouterConnection()) {
*errorIndex = 0;
return MIB_S_ENTRY_NOT_FOUND;
}
switch (actionId) {
case MIB_ACTION_VALIDATE:
ASSERTMSG ("No index in VALIDATE request for table ",
Ifb->mipxIfIndex.asnType);
MibGetInputData.TableId = IPX_INTERFACE_TABLE;
MibGetInputData.MibIndex.InterfaceTableIndex.InterfaceIndex
= (ULONG)GetAsnInteger (&Ifb->mipxIfIndex, 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 && Ifp == NULL)
{
rc = ERROR_CAN_NOT_COMPLETE;
}
if (rc==NO_ERROR) {
Ifb->MibSetInputData.MibRow.Interface = *Ifp;
Ifb->MibSetInputData.MibRow.Interface.AdminState
= (ULONG)GetAsnInteger(&Ifb->mipxIfAdminState,
Ifb->MibSetInputData.MibRow.Interface.AdminState);
GetAsnOctetString (
Ifb->MibSetInputData.MibRow.Interface.NetNumber,
&Ifb->mipxIfNetNumber,
sizeof (Ifb->MibSetInputData.MibRow.Interface.NetNumber),
NULL);
GetAsnOctetString (
Ifb->MibSetInputData.MibRow.Interface.MacAddress,
&Ifb->mipxIfMacAddress,
sizeof (Ifb->MibSetInputData.MibRow.Interface.MacAddress),
NULL);
Ifb->MibSetInputData.MibRow.Interface.EnableIpxWanNegotiation
= (ULONG)GetAsnInteger (&Ifb->mipxIfIpxWanEnable,
Ifb->MibSetInputData.MibRow.Interface.EnableIpxWanNegotiation);
Ifb->MibSetInputData.MibRow.Interface.NetbiosAccept
= (ULONG)GetAsnInteger (&Ifb->mipxIfNetbiosAccept,
Ifb->MibSetInputData.MibRow.Interface.NetbiosAccept);
Ifb->MibSetInputData.MibRow.Interface.NetbiosDeliver
= (ULONG)GetAsnInteger (&Ifb->mipxIfNetbiosDeliver,
Ifb->MibSetInputData.MibRow.Interface.NetbiosDeliver);
MprAdminMIBBufferFree (Ifp);
DbgTrace (DBG_IPXINTERFACES, ("MIPX-if: Validated if %ld\n",
MibGetInputData.MibIndex.InterfaceTableIndex.InterfaceIndex));
return MIB_S_SUCCESS;
}
else {
DbgTrace (DBG_IPXINTERFACES,
("MIPX-if: 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,
&Ifb->MibSetInputData,
sizeof(IPX_MIB_SET_INPUT_DATA));
if (rc==NO_ERROR) {
DbgTrace (DBG_IPXINTERFACES, ("MIPX-if: Set succeded on if %ld\n",
Ifb->MibSetInputData.MibRow.Interface.InterfaceIndex));
return MIB_S_SUCCESS;
}
else {
DbgTrace (DBG_IPXINTERFACES,
("MIPX-if: Set failed on if %ld with error %ld\n",
Ifb->MibSetInputData.MibRow.Interface.InterfaceIndex, rc));
return MIB_S_ENTRY_NOT_FOUND;
}
case MIB_ACTION_CLEANUP:
return MIB_S_SUCCESS;
default:
DbgTrace (DBG_IPXINTERFACES,
("MIPX-if:Set called with unsupported action code %d.\n",
actionId));
return MIB_S_INVALID_PARAMETER;
}
#undef Ifb
}
///////////////////////////////////////////////////////////////////////////////
// //
// mipxForwarding group (1.3.6.1.4.1.311.1.8.3) //
// //
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// //
// mipxDestEntry table (1.3.6.1.4.1.311.1.8.3.1.1) //
// //
///////////////////////////////////////////////////////////////////////////////
UINT
get_mipxDestEntry(
UINT actionId,
AsnAny * objectArray,
UINT * errorIndex
) {
#define Rtb ((buf_mipxDestEntry *)objectArray)
PIPX_ROUTE Rtp;
IPX_MIB_GET_INPUT_DATA MibGetInputData;
DWORD rc;
ULONG RtSize;
if (!EnsureRouterConnection()) {
*errorIndex = 0;
return MIB_S_ENTRY_NOT_FOUND;
}
MibGetInputData.TableId = IPX_DEST_TABLE;
GetAsnOctetString (MibGetInputData.MibIndex.RoutingTableIndex.Network,
&Rtb->mipxDestNetNum,
sizeof (MibGetInputData.MibIndex.RoutingTableIndex.Network),
ZERO_NET_NUM);
switch (actionId) {
case MIB_ACTION_GET:
ASSERTMSG ("No index in GET request for table ",
Rtb->mipxDestNetNum.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 (Rtb->mipxDestNetNum.asnType) {
rc = MprAdminMIBEntryGetNext(g_MibServerHandle,
PID_IPX,
IPX_PROTOCOL_BASE,
&MibGetInputData,
sizeof(IPX_MIB_GET_INPUT_DATA),
&Rtp,
&RtSize);
if (rc==NO_ERROR) {
FreeAsnString (&Rtb->mipxDestNetNum);
}
}
else
rc = MprAdminMIBEntryGetFirst (g_MibServerHandle,
PID_IPX,
IPX_PROTOCOL_BASE,
&MibGetInputData,
sizeof(IPX_MIB_GET_INPUT_DATA),
&Rtp,
&RtSize);
break;
default:
DbgTrace (DBG_DESTTABLE,
("MIPX-dest:Get called with unsupported action code %d.\n",
actionId));
return MIB_S_INVALID_PARAMETER;
}
switch (rc) {
case NO_ERROR:
DbgTrace (DBG_DESTTABLE,
("MIPX-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]));
ForceAsnOctetString (&Rtb->mipxDestNetNum, Rtb->NetNumVal,
Rtp->Network, sizeof (Rtb->NetNumVal));
switch (Rtp->Protocol) {
case IPX_PROTOCOL_LOCAL:
SetAsnInteger (&Rtb->mipxDestProtocol, 2);
break;
case IPX_PROTOCOL_STATIC:
SetAsnInteger (&Rtb->mipxDestProtocol, 5);
break;
case IPX_PROTOCOL_RIP:
SetAsnInteger (&Rtb->mipxDestProtocol, 3);
break;
case IPX_PROTOCOL_NLSP:
SetAsnInteger (&Rtb->mipxDestProtocol, 4);
break;
default:
SetAsnInteger (&Rtb->mipxDestProtocol, 1); // other
break;
}
SetAsnInteger (&Rtb->mipxDestTicks, Rtp->TickCount);
SetAsnInteger (&Rtb->mipxDestHopCount, Rtp->HopCount);
SetAsnInteger (&Rtb->mipxDestNextHopIfIndex, Rtp->InterfaceIndex);
SetAsnOctetString (&Rtb->mipxDestNextHopMacAddress, Rtb->NextHopMacAddressVal,
Rtp->NextHopMacAddress, sizeof (Rtb->NextHopMacAddressVal));
SetAsnInteger (&Rtb->mipxDestFlags, Rtp->Flags);
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_DESTTABLE,
("MIPX-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 = 0;
DbgTrace (DBG_DESTTABLE,
("MIPX-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 Rtb
}
///////////////////////////////////////////////////////////////////////////////
// //
// mipxStaticRouteEntry table (1.3.6.1.4.1.311.1.8.3.2.1) //
// //
///////////////////////////////////////////////////////////////////////////////
UINT
get_mipxStaticRouteEntry(
UINT actionId,
AsnAny * objectArray,
UINT * errorIndex
) {
#define Rtb ((buf_mipxStaticRouteEntry *)objectArray)
PIPX_ROUTE Rtp;
IPX_MIB_GET_INPUT_DATA MibGetInputData;
DWORD rc;
ULONG RtSize;
if (!EnsureRouterConnection()) {
*errorIndex = 0;
return MIB_S_ENTRY_NOT_FOUND;
}
MibGetInputData.TableId = IPX_STATIC_ROUTE_TABLE;
MibGetInputData.MibIndex.StaticRoutesTableIndex.InterfaceIndex
= (ULONG)GetAsnInteger (&Rtb->mipxStaticRouteIfIndex, ZERO_INTERFACE_INDEX);
GetAsnOctetString (
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network,
&Rtb->mipxStaticRouteNetNum,
sizeof (MibGetInputData.MibIndex.StaticRoutesTableIndex.Network),
ZERO_NET_NUM);
switch (actionId) {
case MIB_ACTION_GET:
ASSERTMSG ("No index in GET request for table ",
Rtb->mipxStaticRouteIfIndex.asnType
&&Rtb->mipxStaticRouteNetNum.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 (Rtb->mipxStaticRouteIfIndex.asnType) {
if (!Rtb->mipxStaticRouteNetNum.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 (Rtb->mipxStaticRouteNetNum.asnType) {
FreeAsnString (&Rtb->mipxStaticRouteNetNum);
}
}
}
else {
ASSERTMSG ("Second index is present but first is not ",
!Rtb->mipxStaticRouteNetNum.asnType);
rc = MprAdminMIBEntryGetFirst (g_MibServerHandle,
PID_IPX,
IPX_PROTOCOL_BASE,
&MibGetInputData,
sizeof(IPX_MIB_GET_INPUT_DATA),
&Rtp,
&RtSize);
}
break;
default:
DbgTrace (DBG_STATICROUTES,
("MIPX-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_STATICROUTES,
("MIPX-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 (&Rtb->mipxStaticRouteIfIndex, Rtp->InterfaceIndex);
ForceAsnOctetString (&Rtb->mipxStaticRouteNetNum, Rtb->NetNumVal,
Rtp->Network, sizeof (Rtb->NetNumVal));
SetAsnInteger (&Rtb->mipxStaticRouteEntryStatus, MIPX_EXIST_STATE_CREATED);
SetAsnInteger (&Rtb->mipxStaticRouteTicks, Rtp->TickCount);
SetAsnInteger (&Rtb->mipxStaticRouteHopCount, Rtp->HopCount);
SetAsnOctetString (&Rtb->mipxStaticRouteNextHopMacAddress, Rtb->NextHopMacAddressVal,
Rtp->NextHopMacAddress, sizeof (Rtb->NextHopMacAddressVal));
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_STATICROUTES,
("MIPX-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 = 0;
DbgTrace (DBG_STATICROUTES,
("MIPX-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 Rtb
}
UINT
set_mipxStaticRouteEntry(
UINT actionId,
AsnAny * objectArray,
UINT * errorIndex
) {
#define Rtb ((sav_mipxStaticRouteEntry *)objectArray)
PIPX_ROUTE Rtp;
IPX_MIB_GET_INPUT_DATA MibGetInputData;
DWORD rc;
ULONG RtSize;
if (!EnsureRouterConnection()) {
*errorIndex = 0;
return MIB_S_ENTRY_NOT_FOUND;
}
switch (actionId) {
case MIB_ACTION_VALIDATE:
ASSERTMSG ("No index in VALIDATE request for table ",
Rtb->mipxStaticRouteIfIndex.asnType&&Rtb->mipxStaticRouteIfIndex.asnType);
MibGetInputData.TableId = IPX_STATIC_ROUTE_TABLE;
MibGetInputData.MibIndex.StaticRoutesTableIndex.InterfaceIndex
= (ULONG)GetAsnInteger (&Rtb->mipxStaticRouteIfIndex,INVALID_INTERFACE_INDEX);
GetAsnOctetString (
MibGetInputData.MibIndex.StaticRoutesTableIndex.Network,
&Rtb->mipxStaticRouteNetNum,
sizeof (MibGetInputData.MibIndex.StaticRoutesTableIndex.Network),
ZERO_NET_NUM);
Rtb->ActionFlag
= (BOOLEAN)GetAsnInteger (&Rtb->mipxStaticRouteEntryStatus,
MIPX_EXIST_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;
}
if (rc==NO_ERROR) {
Rtb->MibSetInputData.MibRow.Route = *Rtp;
if (Rtb->ActionFlag == MIPX_EXIST_STATE_CREATED)
Rtb->ActionFlag = MIPX_EXIST_STATE_NOACTION;
MprAdminMIBBufferFree (Rtp);
DbgTrace (DBG_STATICROUTES,
("MIPX-static routes: 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 (Rtb->ActionFlag == MIPX_EXIST_STATE_CREATED) {
DbgTrace (DBG_STATICROUTES,
("MIPX-static routes: 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));
Rtb->MibSetInputData.MibRow.Route.InterfaceIndex
= (ULONG)GetAsnInteger (&Rtb->mipxStaticRouteIfIndex,
INVALID_INTERFACE_INDEX);
GetAsnOctetString (Rtb->MibSetInputData.MibRow.Route.Network,
&Rtb->mipxStaticRouteNetNum,
sizeof (Rtb->MibSetInputData.MibRow.Route.Network),
ZERO_NET_NUM);
Rtb->MibSetInputData.MibRow.Route.Protocol = IPX_PROTOCOL_STATIC;
Rtb->MibSetInputData.MibRow.Route.Flags = 0;
Rtb->MibSetInputData.MibRow.Route.TickCount = MAXSHORT;
Rtb->MibSetInputData.MibRow.Route.HopCount = 15;
memset (Rtb->MibSetInputData.MibRow.Route.NextHopMacAddress,
0xFF,
sizeof (Rtb->MibSetInputData.MibRow.Route.NextHopMacAddress));
}
else {
DbgTrace (DBG_STATICROUTES,
("MIPX-static routes: 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;
}
Rtb->MibSetInputData.MibRow.Route.TickCount
= (USHORT)GetAsnInteger (&Rtb->mipxStaticRouteTicks,
Rtb->MibSetInputData.MibRow.Route.TickCount);
Rtb->MibSetInputData.MibRow.Route.HopCount
= (USHORT)GetAsnInteger (&Rtb->mipxStaticRouteHopCount,
Rtb->MibSetInputData.MibRow.Route.HopCount);
GetAsnOctetString (Rtb->MibSetInputData.MibRow.Route.NextHopMacAddress,
&Rtb->mipxStaticRouteNextHopMacAddress,
sizeof (Rtb->MibSetInputData.MibRow.Route.NextHopMacAddress),
NULL);
return MIB_S_SUCCESS;
case MIB_ACTION_SET:
switch (Rtb->ActionFlag) {
case MIPX_EXIST_STATE_NOACTION:
rc = MprAdminMIBEntrySet (g_MibServerHandle,
PID_IPX,
IPX_PROTOCOL_BASE,
&Rtb->MibSetInputData,
sizeof(IPX_MIB_SET_INPUT_DATA));
break;
case MIPX_EXIST_STATE_DELETED:
rc = MprAdminMIBEntryDelete (g_MibServerHandle,
PID_IPX,
IPX_PROTOCOL_BASE,
&Rtb->MibSetInputData,
sizeof(IPX_MIB_SET_INPUT_DATA));
break;
case MIPX_EXIST_STATE_CREATED:
rc = MprAdminMIBEntryCreate (g_MibServerHandle,
PID_IPX,
IPX_PROTOCOL_BASE,
&Rtb->MibSetInputData,
sizeof(IPX_MIB_SET_INPUT_DATA));
break;
}
if (rc==NO_ERROR) {
DbgTrace (DBG_STATICROUTES,
("MIPX-static routes: Set succeded for"
" network %.2x.2x.2x.2x on if %ld\n",
Rtb->MibSetInputData.MibRow.Route.Network[0],
Rtb->MibSetInputData.MibRow.Route.Network[1],
Rtb->MibSetInputData.MibRow.Route.Network[2],
Rtb->MibSetInputData.MibRow.Route.Network[3],
Rtb->MibSetInputData.MibRow.Route.InterfaceIndex));
return MIB_S_SUCCESS;
}
else {
DbgTrace (DBG_STATICROUTES,
("MIPX-static routes: Set failed for"
" network %.2x.2x.2x.2x on if %ld with error %ld\n",
Rtb->MibSetInputData.MibRow.Route.Network[0],
Rtb->MibSetInputData.MibRow.Route.Network[1],
Rtb->MibSetInputData.MibRow.Route.Network[2],
Rtb->MibSetInputData.MibRow.Route.Network[3],
Rtb->MibSetInputData.MibRow.Route.InterfaceIndex, rc));
return MIB_S_ENTRY_NOT_FOUND;
}
case MIB_ACTION_CLEANUP:
return MIB_S_SUCCESS;
default:
DbgTrace (DBG_STATICROUTES,
("MIPX-static routes: Set called with unsupported action code %d.\n",
actionId));
return MIB_S_INVALID_PARAMETER;
}
#undef Rtb
}
///////////////////////////////////////////////////////////////////////////////
// //
// mipxServices group (1.3.6.1.4.1.311.1.8.4) //
// //
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// //
// mipxServEntry table (1.3.6.1.4.1.311.1.8.4.1.1) //
// //
///////////////////////////////////////////////////////////////////////////////
UINT
get_mipxServEntry(
UINT actionId,
AsnAny * objectArray,
UINT * errorIndex
) {
#define Svb ((buf_mipxServEntry *)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;
}
MibGetInputData.TableId = IPX_SERV_TABLE;
MibGetInputData.MibIndex.ServicesTableIndex.ServiceType
= GetAsnServType (&Svb->mipxServType, ZERO_SERVER_TYPE);
GetAsnDispString (MibGetInputData.MibIndex.ServicesTableIndex.ServiceName,
&Svb->mipxServName, ZERO_SERVER_NAME);
switch (actionId) {
case MIB_ACTION_GET:
ASSERTMSG ("No index in GET request for table ",
Svb->mipxServType.asnType && Svb->mipxServName.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 (Svb->mipxServType.asnType) {
if (!Svb->mipxServName.asnType) {
rc = MprAdminMIBEntryGet(g_MibServerHandle,
PID_IPX,
IPX_PROTOCOL_BASE,
&MibGetInputData,
sizeof(IPX_MIB_GET_INPUT_DATA),
&Svp,
&SvSize);
if (rc==NO_ERROR) {
FreeAsnString (&Svb->mipxServType);
break;
}
}
rc = MprAdminMIBEntryGetNext(g_MibServerHandle,
PID_IPX,
IPX_PROTOCOL_BASE,
&MibGetInputData,
sizeof(IPX_MIB_GET_INPUT_DATA),
&Svp,
&SvSize);
if (rc==NO_ERROR) {
FreeAsnString (&Svb->mipxServType);
if (Svb->mipxServName.asnType) {
FreeAsnString (&Svb->mipxServName);
}
}
}
else {
ASSERTMSG ("Second index is present but first is not ",
!Svb->mipxServName.asnType);
rc = MprAdminMIBEntryGetFirst(g_MibServerHandle,
PID_IPX,
IPX_PROTOCOL_BASE,
&MibGetInputData,
sizeof(IPX_MIB_GET_INPUT_DATA),
&Svp,
&SvSize);
}
break;
default:
DbgTrace (DBG_SERVERTABLE,
("MIPX-servers: Get called with unsupported action code %d.\n",
actionId));
return MIB_S_INVALID_PARAMETER;
}
switch (rc) {
case NO_ERROR:
DbgTrace (DBG_SERVERTABLE,
("MIPX-servers: 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));
ForceAsnServType (&Svb->mipxServType, Svb->TypeVal, Svp->Server.Type);
ForceAsnDispString (&Svb->mipxServName, Svb->NameVal,
Svp->Server.Name, sizeof (Svb->NameVal));
switch (Svp->Protocol) {
case IPX_PROTOCOL_LOCAL:
SetAsnInteger (&Svb->mipxServProtocol, 2);
break;
case IPX_PROTOCOL_STATIC:
SetAsnInteger (&Svb->mipxServProtocol, 5);
break;
case IPX_PROTOCOL_SAP:
SetAsnInteger (&Svb->mipxServProtocol, 6);
break;
case IPX_PROTOCOL_NLSP:
SetAsnInteger (&Svb->mipxServProtocol, 4);
break;
default:
SetAsnInteger (&Svb->mipxServProtocol, 1); // other
break;
}
SetAsnInteger (&Svb->mipxServProtocol, Svp->Protocol);
SetAsnOctetString (&Svb->mipxServNetNum, Svb->NetNumVal,
Svp->Server.Network, sizeof (Svb->NetNumVal));
SetAsnOctetString (&Svb->mipxServNode, Svb->NodeVal,
Svp->Server.Node, sizeof (Svb->NodeVal));
SetAsnOctetString (&Svb->mipxServSocket, Svb->SocketVal,
Svp->Server.Socket, sizeof (Svb->SocketVal));
SetAsnInteger (&Svb->mipxServHopCount, 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_SERVERTABLE,
("MIPX-servers: 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_SERVERTABLE,
("MIPX-servers: 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 Svb
}
///////////////////////////////////////////////////////////////////////////////
// //
// mipxStaticServEntry table (1.3.6.1.4.1.311.1.8.4.2.1) //
// //
///////////////////////////////////////////////////////////////////////////////
UINT
get_mipxStaticServEntry(
UINT actionId,
AsnAny * objectArray,
UINT * errorIndex
) {
#define Svb ((buf_mipxStaticServEntry *)objectArray)
PIPX_SERVICE Svp;
IPX_MIB_GET_INPUT_DATA MibGetInputData;
DWORD rc;
ULONG SvSize;
if (!EnsureRouterConnection()) {
*errorIndex = 0;
return MIB_S_ENTRY_NOT_FOUND;
}
MibGetInputData.TableId = IPX_STATIC_SERV_TABLE;
MibGetInputData.MibIndex.StaticServicesTableIndex.InterfaceIndex
= (ULONG)GetAsnInteger (&Svb->mipxStaticServIfIndex,
ZERO_INTERFACE_INDEX);
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceType
= GetAsnServType (&Svb->mipxStaticServType, ZERO_SERVER_TYPE);
GetAsnDispString (
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceName,
&Svb->mipxStaticServName, ZERO_SERVER_NAME);
switch (actionId) {
case MIB_ACTION_GET:
ASSERTMSG ("No index in GET request for table ",
Svb->mipxStaticServIfIndex.asnType
&&Svb->mipxStaticServType.asnType
&&Svb->mipxStaticServName.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 (Svb->mipxStaticServIfIndex.asnType) {
if (!Svb->mipxStaticServType.asnType
|| !Svb->mipxStaticServName.asnType) {
rc = MprAdminMIBEntryGet(g_MibServerHandle,
PID_IPX,
IPX_PROTOCOL_BASE,
&MibGetInputData,
sizeof(IPX_MIB_GET_INPUT_DATA),
&Svp,
&SvSize);
if (rc==NO_ERROR) {
if (Svb->mipxStaticServType.asnType) {
FreeAsnString (&Svb->mipxStaticServType);
}
if (Svb->mipxStaticServName.asnType) {
FreeAsnString (&Svb->mipxStaticServName);
}
break;
}
}
rc = MprAdminMIBEntryGetNext(g_MibServerHandle,
PID_IPX,
IPX_PROTOCOL_BASE,
&MibGetInputData,
sizeof(IPX_MIB_GET_INPUT_DATA),
&Svp,
&SvSize);
if (rc==NO_ERROR) {
if (Svb->mipxStaticServType.asnType) {
FreeAsnString (&Svb->mipxStaticServType);
}
if (Svb->mipxStaticServName.asnType) {
FreeAsnString (&Svb->mipxStaticServName);
}
}
}
else {
ASSERTMSG ("Second or third indeces present but first is not ",
!Svb->mipxStaticServType.asnType
&&!Svb->mipxStaticServName.asnType);
rc = MprAdminMIBEntryGetFirst (g_MibServerHandle,
PID_IPX,
IPX_PROTOCOL_BASE,
&MibGetInputData,
sizeof(IPX_MIB_GET_INPUT_DATA),
&Svp,
&SvSize);
}
break;
default:
DbgTrace (DBG_STATICSERVERS,
("MIPX-static servers: 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_STATICSERVERS,
("MIPX-static servers: 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 (&Svb->mipxStaticServIfIndex, Svp->InterfaceIndex);
ForceAsnServType (&Svb->mipxStaticServType, Svb->TypeVal, Svp->Server.Type);
ForceAsnDispString (&Svb->mipxStaticServName, Svb->NameVal,
Svp->Server.Name, sizeof (Svb->NameVal));
SetAsnInteger (&Svb->mipxStaticServEntryStatus, MIPX_EXIST_STATE_CREATED);
SetAsnOctetString (&Svb->mipxStaticServNetNum, Svb->NetNumVal,
Svp->Server.Network, sizeof (Svb->NetNumVal));
SetAsnOctetString (&Svb->mipxStaticServNode, Svb->NodeVal,
Svp->Server.Node, sizeof (Svb->NodeVal));
SetAsnOctetString (&Svb->mipxStaticServSocket, Svb->SocketVal,
Svp->Server.Socket, sizeof (Svb->SocketVal));
SetAsnInteger (&Svb->mipxStaticServHopCount, 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_STATICSERVERS,
("MIPX-static servers: 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_STATICSERVERS,
("MIPX-static servers: 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 Svb
}
UINT
set_mipxStaticServEntry(
UINT actionId,
AsnAny * objectArray,
UINT * errorIndex
) {
#define Svb ((sav_mipxStaticServEntry *)objectArray)
PIPX_SERVICE Svp;
IPX_MIB_GET_INPUT_DATA MibGetInputData;
DWORD rc;
ULONG SvSize;
if (!EnsureRouterConnection()) {
*errorIndex = 0;
return MIB_S_ENTRY_NOT_FOUND;
}
switch (actionId) {
case MIB_ACTION_VALIDATE:
ASSERTMSG ("No index in VALIDATE request for table ",
Svb->mipxStaticServIfIndex.asnType
&&Svb->mipxStaticServType.asnType
&&Svb->mipxStaticServName.asnType);
MibGetInputData.TableId = IPX_STATIC_SERV_TABLE;
MibGetInputData.MibIndex.StaticServicesTableIndex.InterfaceIndex
= (ULONG)GetAsnInteger (&Svb->mipxStaticServIfIndex,
INVALID_INTERFACE_INDEX);
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceType
= GetAsnServType (&Svb->mipxStaticServType, INVALID_SERVER_TYPE);
GetAsnDispString (
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceName,
&Svb->mipxStaticServName,
INVALID_SERVER_NAME);
Svb->ActionFlag
= (BOOLEAN)GetAsnInteger (&Svb->mipxStaticServEntryStatus,
MIPX_EXIST_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)
{
return MIB_S_ENTRY_NOT_FOUND;
}
if (rc==NO_ERROR) {
Svb->MibSetInputData.MibRow.Service = *Svp;
if (Svb->ActionFlag == MIPX_EXIST_STATE_CREATED)
Svb->ActionFlag = MIPX_EXIST_STATE_NOACTION;
MprAdminMIBBufferFree (Svp);
DbgTrace (DBG_STATICSERVERS,
("MIPX-static servers: Validated"
" service %.4x-%.48s on if %ld.\n",
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceType,
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceName,
MibGetInputData.MibIndex.StaticServicesTableIndex.InterfaceIndex));
}
else if (Svb->ActionFlag == MIPX_EXIST_STATE_CREATED) {
DbgTrace (DBG_STATICSERVERS,
("MIPX-static servers: Prepared to add"
" service %.4x-%.48s on if %ld.\n",
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceType,
MibGetInputData.MibIndex.StaticServicesTableIndex.ServiceName,
MibGetInputData.MibIndex.StaticServicesTableIndex.InterfaceIndex));
Svb->MibSetInputData.MibRow.Service.InterfaceIndex
= (ULONG) GetAsnInteger (&Svb->mipxStaticServIfIndex,
INVALID_INTERFACE_INDEX);
Svb->MibSetInputData.MibRow.Service.Protocol = IPX_PROTOCOL_STATIC;
Svb->MibSetInputData.MibRow.Service.Server.Type
= GetAsnServType (&Svb->mipxStaticServType,
INVALID_SERVER_TYPE);
GetAsnDispString (
Svb->MibSetInputData.MibRow.Service.Server.Name,
&Svb->mipxStaticServName,
INVALID_SERVER_NAME);
memset (Svb->MibSetInputData.MibRow.Service.Server.Network, 0,
sizeof (Svb->MibSetInputData.MibRow.Service.Server.Network));
memset (Svb->MibSetInputData.MibRow.Service.Server.Node, 0,
sizeof (Svb->MibSetInputData.MibRow.Service.Server.Node));
memset (Svb->MibSetInputData.MibRow.Service.Server.Socket, 0,
sizeof (Svb->MibSetInputData.MibRow.Service.Server.Socket));
Svb->MibSetInputData.MibRow.Service.Server.HopCount = 15;
}
else {
DbgTrace (DBG_STATICSERVERS,
("MIPX-static servers: 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 (Svb->MibSetInputData.MibRow.Service.Server.Network,
&Svb->mipxStaticServNetNum,
sizeof (Svb->MibSetInputData.MibRow.Service.Server.Network),
NULL);
GetAsnOctetString (Svb->MibSetInputData.MibRow.Service.Server.Node,
&Svb->mipxStaticServNode,
sizeof (Svb->MibSetInputData.MibRow.Service.Server.Node),
NULL);
GetAsnOctetString (Svb->MibSetInputData.MibRow.Service.Server.Socket,
&Svb->mipxStaticServSocket,
sizeof (Svb->MibSetInputData.MibRow.Service.Server.Socket),
NULL);
Svb->MibSetInputData.MibRow.Service.Server.HopCount =
(USHORT)GetAsnInteger (&Svb->mipxStaticServHopCount,
Svb->MibSetInputData.MibRow.Service.Server.HopCount);
return MIB_S_SUCCESS;
case MIB_ACTION_SET:
switch (Svb->ActionFlag) {
case MIPX_EXIST_STATE_NOACTION:
rc = MprAdminMIBEntrySet (g_MibServerHandle,
PID_IPX,
IPX_PROTOCOL_BASE,
&Svb->MibSetInputData,
sizeof(IPX_MIB_SET_INPUT_DATA));
break;
case MIPX_EXIST_STATE_DELETED:
rc = MprAdminMIBEntryDelete (g_MibServerHandle,
PID_IPX,
IPX_PROTOCOL_BASE,
&Svb->MibSetInputData,
sizeof(IPX_MIB_SET_INPUT_DATA));
break;
case MIPX_EXIST_STATE_CREATED:
rc = MprAdminMIBEntryCreate (g_MibServerHandle,
PID_IPX,
IPX_PROTOCOL_BASE,
&Svb->MibSetInputData,
sizeof(IPX_MIB_SET_INPUT_DATA));
break;
}
if (rc==NO_ERROR) {
DbgTrace (DBG_STATICSERVERS,
("MIPX-static servers: Set succeded"
" for service %.4x-%.48s on if %ld.\n",
Svb->MibSetInputData.MibRow.Service.Server.Type,
Svb->MibSetInputData.MibRow.Service.Server.Name,
Svb->MibSetInputData.MibRow.Service.InterfaceIndex));
return MIB_S_SUCCESS;
}
else {
DbgTrace (DBG_STATICSERVERS,
("MIPX-static servers: Set failed for"
" for service %.4x-%.48s on if %ld with error %ld.\n",
Svb->MibSetInputData.MibRow.Service.Server.Type,
Svb->MibSetInputData.MibRow.Service.Server.Name,
Svb->MibSetInputData.MibRow.Service.InterfaceIndex,
rc));
return MIB_S_ENTRY_NOT_FOUND;
}
case MIB_ACTION_CLEANUP:
return MIB_S_SUCCESS;
default:
DbgTrace (DBG_STATICSERVERS,
("MIPX-static servers: Set called with unsupported action code %d.\n",
actionId));
return MIB_S_INVALID_PARAMETER;
}
#undef Svb
}