home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
ibmtool.zip
/
genreq.c
< prev
next >
Wrap
Text File
|
1997-11-07
|
15KB
|
605 lines
/******************************************************************************/
/* */
/* FILE: GENREQ.C */
/* */
/* PURPOSE: This file contains the General Request processing. */
/* */
/* FUNCTIONS: GetRCInt */
/* GenRequest */
/* CheckGenRequest */
/* GetRetCodes */
/* TTInitiateDiagnostics */
/* TTReadErrorLog */
/* TTSetStationAddr */
/* TTOpen */
/* TTClose */
/* TTResetMAC */
/* TTSetPacketFilter */
/* TTAddMulticastAddr */
/* TTDeleteMulticastAddr */
/* TTUpdateStatistics */
/* TTClearStat */
/* TTInterruptRequest */
/* TTSetFunctionalAddr */
/* TTSetLookAhead */
/* TTModifyOpenParms */
/* */
/* GLOBAL DATA ACCESSED */
/* char *RetStr[] */
/* */
/******************************************************************************/
#define INCL_SUB
#define INCL_BASE
#define INCL_DOS
#include <os2.h>
#include <stdio.h>
#include <stdarg.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "ndis.h"
#include "ibmtool.h"
#include "ioctl.h"
#include "ttstr.h"
int ExpRC[2];
USHORT ReqHandle = 0;
GENREQ GenReq;
int GetRCInt (char *RCStr)
{
int i;
for (i=0; *RetStr[i]; ++i)
if (!stricmp (RCStr, RetStr[i]))
break;
if (*RetStr[i]) return i;
return -1;
}
USHORT GenRequest ()
{
IOCTLDATA IOData;
IOCTLDATA far *IODataPtr = &IOData;
IOData.ReqCode = GENREQUEST;
IOData.Length = 0;
IOData.SrcDataPtr = (void far *) &GenReq;
IOData.DestDataPtr = NULL;
GenIoctl ((void far *) IODataPtr, hWedge);
return IOData.ReqCode;
}
int CheckGenRequest (WORD Request, WORD Handle)
{
int i;
if (ExpRC[0] == REQUEST_QUEUED)
{
if (LastStatus != REQUEST_QUEUED)
PrintMsg (YELLOW, "Warning - TestMAC did not return REQUEST_QUEUED");
else
{
LastStatus = TMReqConf (GenReq.ReqHandle, GenReq.OpCode, ExpRC[1]);
// wait for General Request Confirm for this request
for (i=0; i<300; ++i)
{
DosSleep (100);
if (CheckIndications ()) break;
} /* endfor */
if (LastStatus != ExpRC[1])
PrintMsg (YELLOW, "Warning - TestMAC did not return %s", RetStr[ExpRC[1]]);
else return SUCCESS;
}
}
else if (LastStatus == REQUEST_QUEUED)
{
// wait for General Request Confirm for this request
for (i=0; i<300; ++i)
{
DosSleep (100);
if (CheckIndications ()) return SUCCESS;
} /* endfor */
} /* endif */
return TT_GENREQ_NOT_COMPLETE;
}
int GetRetCodes ()
{
char *RetCode;
int i;
ExpRC[0] = ExpRC[1] = -1;
if (Debug)
{
RetCode = strtok (NULL, "\n\t ");
if (!RetCode) return TT_INVALID_PARAMETER;
if ((ExpRC[0] = GetRCInt (RetCode)) < 0)
return TT_INVALID_PARAMETER;
else
{
if (!stricmp (RetCode, "REQUEST_QUEUED"))
{
RetCode = strtok (NULL, "\n\t ");
if (!RetCode) return TT_INVALID_PARAMETER;
if ((ExpRC[1] = GetRCInt (RetCode)) < 0)
return TT_INVALID_PARAMETER;
}
}
TMSetResult (ExpRC[0]);
return SUCCESS;
}
else if ((RetCode = strtok (NULL, "\n\t ")))
return TT_INVALID_PARAMETER;
}
int TTInitiateDiagnostics ()
{
// INITDIAG [<Return> [<Return>]]
if (GetRetCodes ()) return TT_INVALID_PARAMETER;
GenReq.ReqHandle = ++ReqHandle;
GenReq.Param1 = 0;
GenReq.Param2 = 0L;
GenReq.OpCode = INITIATEDIAGNOSTICS;
LastStatus = GenRequest ();
PrintMsg (0, "Initiate Diagnostics: %s", RetStr[LastStatus]);
CheckGenRequest (INITIATEDIAGNOSTICS, GenReq.ReqHandle);
return SUCCESS;
}
int TTReadErrorLog ()
{
// READLOG <LogSize> [<Return> [<Return>]]
char *token;
BYTE *LogBuffer;
int LogSize;
int rc;
if ((token = strtok (NULL, "\n\t ")))
{
if ((LogSize = (int) GetNumericParm (token)) < 0)
return TT_INVALID_PARAMETER;
}
else
return TT_INVALID_PARAMETER;
if (GetRetCodes ()) return TT_INVALID_PARAMETER;
LogBuffer = (BYTE *) calloc (LogSize, sizeof (BYTE));
GenReq.ReqHandle = ++ReqHandle;
GenReq.Param1 = LogSize;
GenReq.Param2 = (void far *) LogBuffer;
GenReq.OpCode = READERRORLOG;
LastStatus = GenRequest ();
PrintMsg (0, "Read Error Log: %s", RetStr[LastStatus]);
CheckGenRequest (READERRORLOG, GenReq.ReqHandle);
if (LastStatus == SUCCESS)
hexprint (LogBuffer, LogSize, 0);
return SUCCESS;
}
int TTSetStationAddr ()
{
// SETSTN <NetAddr> [<Return> [<Return>]]
char *token;
BYTE StnAddr[ADDR_LEN];
USHORT temp;
int i;
for (i=0; i<WedgeCommon->StnAdrSz; ++i)
{
if (!(token = strtok (NULL, "\n\t ")))
return TT_INVALID_PARAMETER;
if (sscanf (token, "%02X", &temp) != 1)
return TT_INVALID_PARAMETER;
StnAddr[i] = (BYTE) temp;
} /* endfor */
if (GetRetCodes ()) return TT_INVALID_PARAMETER;
GenReq.ReqHandle = ++ReqHandle;
GenReq.Param1 = 0;
GenReq.Param2 = (void far *) &StnAddr;
GenReq.OpCode = SETSTATIONADDRESS;
LastStatus = GenRequest ();
PrintMsg (0, "Set Station Address: %s", RetStr[LastStatus]);
CheckGenRequest (SETSTATIONADDRESS, GenReq.ReqHandle);
return SUCCESS;
}
int TTOpen ()
{
// OPEN [<OpenOptions> [<ExtendedRet> [<Return> [<Return>]]]]
char *token;
WORD OpenOptions = 0;
DWORD ExtendedRet = 0xFFFFFFFF;
TMAC TMac;
ExpRC[0] = ExpRC[1] = -1;
token = strtok (NULL, "\n\t ");
if (Debug)
{
// get OpenOptions
if (!token) return TT_INVALID_PARAMETER;
OpenOptions = (WORD) GetNumericParm (token);
// get ExtendedRet
token = strtok (NULL, "\n\t ");
if (!token) return TT_INVALID_PARAMETER;
ExtendedRet = GetNumericParm (token);
// get Expected Return Codes
token = strtok (NULL, "\n\t ");
if (!token) return TT_INVALID_PARAMETER;
if ((ExpRC[0] = GetRCInt (token)) < 0)
return TT_INVALID_PARAMETER;
else
{
if (!stricmp (token, "REQUEST_QUEUED"))
{
token = strtok (NULL, "\n\t ");
if (!token) return TT_INVALID_PARAMETER;
if ((ExpRC[1] = GetRCInt (token)) < 0)
return TT_INVALID_PARAMETER;
}
}
// set results expected from TESTMAC
TMac.EventCmd = SETRESULT;
TMac.Parm[0] = ExpRC[0];
TMac.Parm[1] = (WORD) (ExtendedRet & 0xFFFF);
TMac.Parm[2] = (WORD) (ExtendedRet >> 16);
GenIoctl ((void far *) &TMac, hTestMAC);
}
else if (token)
{
// get OpenOptions
OpenOptions = (WORD) GetNumericParm (token);
}
GenReq.ReqHandle = ++ReqHandle;
GenReq.Param1 = OpenOptions;
GenReq.Param2 = (void far *) &ExtendedRet;
GenReq.OpCode = OPENADAPTER;
LastStatus = GenRequest ();
PrintMsg (0, "Open Adapter: %s Extended Return: %08lX",
RetStr[LastStatus], ExtendedRet);
CheckGenRequest (OPENADAPTER, GenReq.ReqHandle);
return SUCCESS;
}
int TTClose ()
{
// CLOSE [<Return> [<Return>]]
if (GetRetCodes ()) return TT_INVALID_PARAMETER;
GenReq.ReqHandle = ++ReqHandle;
GenReq.Param1 = 0;
GenReq.Param2 = 0L;
GenReq.OpCode = CLOSEADAPTER;
LastStatus = GenRequest ();
PrintMsg (0, "Close Adapter: %s", RetStr[LastStatus]);
CheckGenRequest (CLOSEADAPTER, GenReq.ReqHandle);
return SUCCESS;
}
int TTResetMAC ()
{
// RESET [<Return> [<Return>]]
int rc;
if (GetRetCodes ()) return TT_INVALID_PARAMETER;
GenReq.ReqHandle = ++ReqHandle;
GenReq.Param1 = 0;
GenReq.Param2 = 0L;
GenReq.OpCode = RESETMAC;
LastStatus = GenRequest ();
PrintMsg (0, "Reset MAC: %s", RetStr[LastStatus]);
CheckGenRequest (RESETMAC, GenReq.ReqHandle);
return SUCCESS;
}
int TTSetPacketFilter ()
{
// FILTER # [<Return> [<Return>]]
char *token;
USHORT filter;
token = strtok (NULL, "\n\t ");
if (!token)
return TT_INVALID_PARAMETER;
else if ((filter = (USHORT) GetNumericParm (token)) < 0)
return TT_INVALID_PARAMETER;
if (GetRetCodes ()) return TT_INVALID_PARAMETER;
GenReq.ReqHandle = ++ReqHandle;
GenReq.Param1 = filter;
GenReq.Param2 = 0L;
GenReq.OpCode = SETPACKETFILTER;
LastStatus = GenRequest ();
PrintMsg (0, "Set Packet Filter %d: %s", filter, RetStr[LastStatus]);
CheckGenRequest (SETPACKETFILTER, GenReq.ReqHandle);
return SUCCESS;
}
int TTAddMulticastAddr ()
{
// ADDMC <NetAddr> [<Return> [<Return>]]
char *token;
BYTE MCAddr[ADDR_LEN];
USHORT temp;
int i;
for (i=0; i<WedgeCommon->StnAdrSz; ++i)
{
if (!(token = strtok (NULL, "\n\t ")))
return TT_INVALID_PARAMETER;
if (sscanf (token, "%02X", &temp) != 1)
return TT_INVALID_PARAMETER;
MCAddr[i] = (BYTE) temp;
} /* endfor */
if (GetRetCodes ()) return TT_INVALID_PARAMETER;
GenReq.ReqHandle = ++ReqHandle;
GenReq.Param1 = 0;
GenReq.Param2 = (void far *) &MCAddr;
GenReq.OpCode = ADDMULTICASTADDRESS;
LastStatus = GenRequest ();
PrintMsg (0, "Add Multicast Address: %s", RetStr[LastStatus]);
CheckGenRequest (ADDMULTICASTADDRESS, GenReq.ReqHandle);
return SUCCESS;
}
int TTDeleteMulticastAddr ()
{
// DELMC <NetAddr> [<Return> [<Return>]]
char *token;
BYTE MCAddr[ADDR_LEN];
USHORT temp;
int i;
for (i=0; i<WedgeCommon->StnAdrSz; ++i)
{
if (!(token = strtok (NULL, "\n\t ")))
return TT_INVALID_PARAMETER;
if (sscanf (token, "%02X", &temp) != 1)
return TT_INVALID_PARAMETER;
MCAddr[i] = (BYTE) temp;
} /* endfor */
if (GetRetCodes ()) return TT_INVALID_PARAMETER;
GenReq.ReqHandle = ++ReqHandle;
GenReq.Param1 = 0;
GenReq.Param2 = (void far *) &MCAddr;
GenReq.OpCode = DELETEMULTICASTADDRESS;
LastStatus = GenRequest ();
PrintMsg (0, "Delete Multicast Address: %s", RetStr[LastStatus]);
CheckGenRequest (DELETEMULTICASTADDRESS, GenReq.ReqHandle);
return SUCCESS;
}
int TTUpdateStatistics ()
{
// USTAT [<Return> [<Return>]]
int rc;
if (GetRetCodes ()) return TT_INVALID_PARAMETER;
GenReq.ReqHandle = ++ReqHandle;
GenReq.Param1 = 0;
GenReq.Param2 = 0L;
GenReq.OpCode = UPDATESTATISTICS;
LastStatus = GenRequest ();
PrintMsg (0, "Update Statistics: %s", RetStr[LastStatus]);
CheckGenRequest (UPDATESTATISTICS, GenReq.ReqHandle);
return SUCCESS;
}
int TTClearStat ()
{
// CSTAT [<Return> [<Return>]]
int rc;
if (GetRetCodes ()) return TT_INVALID_PARAMETER;
GenReq.ReqHandle = ++ReqHandle;
GenReq.Param1 = 0;
GenReq.Param2 = 0L;
GenReq.OpCode = CLEARSTATISTICS;
LastStatus = GenRequest ();
PrintMsg (0, "Clear Statistics: %s", RetStr[LastStatus]);
CheckGenRequest (CLEARSTATISTICS, GenReq.ReqHandle);
return SUCCESS;
}
int TTInterruptRequest ()
{
// INTREQ [<Return> [<Return>]]
int rc;
if (GetRetCodes ()) return TT_INVALID_PARAMETER;
GenReq.ReqHandle = ++ReqHandle;
GenReq.Param1 = 0;
GenReq.Param2 = 0L;
GenReq.OpCode = INTERRUPT;
LastStatus = GenRequest ();
PrintMsg (0, "Interrupt Request: %s", RetStr[LastStatus]);
CheckGenRequest (INTERRUPT, GenReq.ReqHandle);
return SUCCESS;
}
int TTSetFunctionalAddr ()
{
// FUNADR <ShortNetAddr> [<Return> [<Return>]]
char *token;
BYTE FuncAddr[ADDR_LEN];
USHORT temp;
int i;
for (i=0; i<4; ++i)
{
if (!(token = strtok (NULL, "\n\t ")))
return TT_INVALID_PARAMETER;
if (sscanf (token, "%02X", &temp) != 1)
return TT_INVALID_PARAMETER;
FuncAddr[i] = (BYTE) temp;
} /* endfor */
if (GetRetCodes ()) return TT_INVALID_PARAMETER;
GenReq.ReqHandle = ++ReqHandle;
GenReq.Param1 = 0;
GenReq.Param2 = (void far *) &FuncAddr;
GenReq.OpCode = SETFUNCTIONALADDRESS;
LastStatus = GenRequest ();
PrintMsg (0, "Set Functional Address: %s", RetStr[LastStatus]);
CheckGenRequest (SETFUNCTIONALADDRESS, GenReq.ReqHandle);
return SUCCESS;
}
int TTSetLookAhead ()
{
// SETLOOK # [<Return> [<Return>]]
char *token;
WORD lookahead;
if (!(token = strtok (NULL, "\n\t ")))
return TT_INVALID_PARAMETER;
if ((lookahead = (WORD) GetNumericParm (token)) < 0)
return TT_INVALID_PARAMETER;
if (GetRetCodes ()) return TT_INVALID_PARAMETER;
GenReq.ReqHandle = ++ReqHandle;
GenReq.Param1 = lookahead;
GenReq.Param2 = 0L;
GenReq.OpCode = SETLOOKAHEAD;
LastStatus = GenRequest ();
PrintMsg (0, "Set Lookahead %d: %s", lookahead, RetStr[LastStatus]);
CheckGenRequest (SETLOOKAHEAD, GenReq.ReqHandle);
return SUCCESS;
}
int TTModifyOpenParms ()
{
// MODOPEN <OpenOptions> ["REQUEST_QUEUED" <Return> | <Return>]
char *token;
WORD OpenOptions;
if (!(token = strtok (NULL, "\n\t ")))
return TT_INVALID_PARAMETER;
if ((OpenOptions = (WORD) GetNumericParm (token)) < 0)
return TT_INVALID_PARAMETER;
if (GetRetCodes ()) return TT_INVALID_PARAMETER;
GenReq.ReqHandle = ++ReqHandle;
GenReq.Param1 = OpenOptions;
GenReq.Param2 = 0L;
GenReq.OpCode = MODIFYOPENPARMS;
LastStatus = GenRequest ();
PrintMsg (0, "ModifyOpenParms 0x%04X: %s", OpenOptions, RetStr[LastStatus]);
CheckGenRequest (MODIFYOPENPARMS, GenReq.ReqHandle);
return SUCCESS;
}