📄 kscmds.c
字号:
printf ("\n");
if ( elem3 > 0 )
{
#ifdef LINUX
EnableLINUXkbhit ();
#endif
time (&tStart);
tEnd = tStart;
while(ch != 'q') {
if ( tEnd - tStart >= elem3 )
{
for ( i = iNdxfrom; i <= iNdxto - 1; i++ )
{
if ( i > 0xff ) // Overflow to Indirect Access Control Register 0
{
WriteData ( INDIRECTCTL1, (BYTE)(INDIRECTREAD | INDIRECTDMACTAB | (BYTE)( i >> 8 ) ));
WriteData ( INDIRECTCTL2, (BYTE) (i % 256) );
}
else
{
WriteData ( INDIRECTCTL1, INDIRECTREAD | INDIRECTDMACTAB );
WriteData ( INDIRECTCTL2, (BYTE)i );
}
bData63.data = ReadDataBegin ( INDIRECTDATABASE + 1 );
// Read until bit 55 is not one
do {
bData55.data = ReadDataEnd ();
} while ( bData55.field.DataReady );
printf ( "\nDynamic MAC Table Entry (%d) => FID = %0x Source Port = %01d Time Stamp= %01d",
i, bData55.field.Fid, bData55.field.SourcePort, bData63.field.TimeStamp );
printf ( "\nDynamic MAC Table Entry (%d) => MAC Address %02x:%02x:%02x:%02x:%02x:%02x",
i,
ReadData ( INDIRECTDATABASE + 3 ),
ReadData ( INDIRECTDATABASE + 4 ),
ReadData ( INDIRECTDATABASE + 5 ),
ReadData ( INDIRECTDATABASE + 6 ),
ReadData ( INDIRECTDATABASE + 7 ),
ReadData ( INDIRECTDATABASE + 8 ) );
}
printf ("\n");
tStart = tEnd;
}
time (&tEnd);
if(_kbhit()) {
ch = _getch();
}
}
#ifdef LINUX
DisableLINUXkbhit ();
#endif
}
return SUCCESS;
}
//--------------------------------------------------------------------------
//
// int DumpGlobalReg
//
// Description:
// Command:
//
// dg Dump Global Control registers
//
// Parameters:
// int elem1 NOPARAMETER
// int elem2 NOPARAMETER
// int elem3 NOPARAMETER
//
// Return Vlaue:
// SUCCESS or PARMERROR
//
//--------------------------------------------------------------------------
int DumpGlobalReg ( int elem1, int elem2, int elem3 )
{
int iNdx;
if ( elem1 != NOPARAMETER || elem2 != NOPARAMETER || elem3 != NOPARAMETER )
return PARMERROR;
for ( iNdx = GLOBALCTLBEGIN; iNdx <= GLOBALCTLEND; iNdx++ )
{
printf ( "\nGlobal Control Register (0x%02x) = 0x%02x", iNdx, ReadData ( (BYTE) iNdx ) );
}
return SUCCESS;
}
//--------------------------------------------------------------------------
//
// int DumpMAC
//
// Description:
// Command:
//
// dmac Dump MAC address registers.
//
// Parameters:
// int elem1 NOPARAMETER
// int elem2 NOPARAMETER
// int elem3 NOPARAMETER
//
// Return Vlaue:
// SUCCESS or PARMERROR
//
//--------------------------------------------------------------------------
int DumpMAC ( int elem1, int elem2, int elem3 )
{
#define MACREGBEGIN 104
#define MACREGEND 109
#define MACBUFLEN 18
int iNdx;
char sMACAddress[MACBUFLEN]; //Space for the patten "xx:xx:xx:xx:xx:xx"
if ( elem1 != NOPARAMETER || elem2 != NOPARAMETER || elem3 != NOPARAMETER )
return PARMERROR;
//for ( iNdx = MACREGBEGIN; iNdx <= MACREGEND; iNdx++ )
// printf ( "\nMAC Address Register (0x%02x) = 0x%02x", iNdx, ReadData ( (BYTE) iNdx ) );
for ( iNdx = MACREGBEGIN; iNdx <= MACREGEND; iNdx++ )
sprintf ( sMACAddress + ( iNdx - MACREGBEGIN ) * 3, "%02x:", ReadData ( (BYTE) iNdx ) );
sMACAddress[MACBUFLEN - 1] = '\0'; // Eliminate the last ':' and null-end the sting
printf ( "\nMAC Address %s", sMACAddress );
return SUCCESS;
}
//--------------------------------------------------------------------------
//
// int DumpMIB
//
// Description:
// Command:
//
// dmib port (s) Dump MIB counters associated to port.
//
// Parameters:
// int elem1 Port number
// int elem2 Repeat every elem2 seconds
// int elem3 NOPARAMETER
//
// Return Vlaue:
// SUCCESS or PARMERROR
//
//--------------------------------------------------------------------------
int DumpMIB ( int elem1, int elem2, int elem3 )
{
unsigned long ulTemp;
int iNdx;
int ch = 0;
time_t tStart, tEnd;
if ( elem1 == NOPARAMETER || elem3 != NOPARAMETER )
return PARMERROR;
if ( elem1 < 1 || elem1 > 5 )
return PARMERROR;
giMIBOverflow = FALSE;
for (iNdx = 0; iNdx < MIBCOUNTEROFFSET; iNdx++ )
{
ulMIB [elem1][iNdx] = 0;
}
for (iNdx = 0; iNdx < MIBCOUNTEROFFSET; iNdx++ )
{
ulTemp = GetMIBCounter ( (BYTE) elem1, (BYTE) iNdx );
ulMIB[elem1][iNdx] += ulTemp;
printf ( "\nPort %01d MIB Counter %s (0x%02x) = %lu ", elem1, MIBNames[ iNdx ], iNdx, ulTemp);
}
printf ("\n");
if ( elem2 > 0 )
{
#ifdef LINUX
EnableLINUXkbhit ();
#endif
time (&tStart);
tEnd = tStart;
while(ch != 'q') {
if ( tEnd - tStart >= elem2 )
{
for (iNdx = 0; iNdx < MIBCOUNTEROFFSET; iNdx++ )
{
ulTemp = GetMIBCounter ( (BYTE) elem1, (BYTE) iNdx );
ulMIB[elem1][iNdx] += ulTemp;
printf ( "\nPort %.1d MIB Counter %s (%02x) = %lu Total = %lu", elem1, MIBNames[ iNdx ], iNdx, ulTemp, ulMIB[elem1][iNdx] );
}
printf ("\n");
tStart = tEnd;
}
time (&tEnd);
if(_kbhit()) {
ch = _getch();
}
}
#ifdef LINUX
DisableLINUXkbhit ();
#endif
}
if ( giMIBOverflow )
{
printf ( "\n!!!!!!!!!!!!!!!!!!!!!!!!");
printf ( "\n! !");
printf ( "\n! MIB Counter overflow !");
printf ( "\n! !");
printf ( "\n!!!!!!!!!!!!!!!!!!!!!!!!");
giMIBOverflow = FALSE;
}
return SUCCESS;
}
//--------------------------------------------------------------------------
//
// int DisplayMIBArray
//
// Description:
// Display MIB counter in table format.
//
// DOS box version can only display 10 digits each port while Linux version can
// display 13 digits. 10 digits can last for more than 2 hours accumulating.
// 13 bit is 1000 times longer.
//
// Parameters:
// None
//
// Return Vlaue:
// None
//
//--------------------------------------------------------------------------
void DisplayMIBArray ()
{
int j;
#ifdef LINUX
printf ("\n+---------------------------------------------------------------------------------------------------------+");
printf ("\n| MIB Counter | Port 1 | Port 2 | Port 3 | Port 4 | Port 5 |");
printf ("\n|---------------------------------------------------------------------------------------------------------|");
for ( j = 0; j < MIBCOUNTEROFFSET; j++ )
printf ("\n| %02d %-20s | %13lu | %13lu | %13lu | %13lu | %13lu |", j, MIBNames[ j ],
ulMIB[0][j], ulMIB[1][j], ulMIB[2][j], ulMIB[3][j], ulMIB[4][j] );
printf ("\n+---------------------------------------------------------------------------------------------------------+");
#else
//
// DOS box only allows 80 charactes.
//
printf ("\n+-----------------------------------------------------------------------------+");
printf ("\n| MIB Counter | Port 1 | Port 2 | Port 3 | Port 4 | Port 5 |");
printf ("\n|-----------------------------------------------------------------------------|");
for ( j = 0; j < MIBCOUNTEROFFSET; j++ )
{
printf ("\n%02d %-20s|%10lu|%10lu|%10lu|%10lu|%10lu|", j, MIBNames[ j ], ulMIB[0][j], ulMIB[1][j], ulMIB[2][j], ulMIB[3][j], ulMIB[4][j] );
}
printf ("\n+-----------------------------------------------------------------------------+");
#endif
printf ("\n");
}
//--------------------------------------------------------------------------
//
// int DumpMIBAll
//
// Description:
// Command:
//
// dall Dump all MIB counters.
//
// Parameters:
// int elem1 NOPARAMETER
// int elem2 NOPARAMETER
// int elem3 NOPARAMETER
//
// Return Vlaue:
// SUCCESS or PARMERROR
//
//--------------------------------------------------------------------------
int DumpMIBAll ( int elem1, int elem2, int elem3 )
{
unsigned long ulTemp;
int i, j;
int ch = 0;
time_t tStart, tEnd;
if ( elem2 != NOPARAMETER || elem3 != NOPARAMETER )
return PARMERROR;
giMIBOverflow = FALSE;
//
// Reset all
//
for ( i = 0; i < PORTTOTAL; i++ )
for ( j = 0; j < MIBCOUNTEROFFSET; j++ )
ulMIB [i][j] = 0;
for ( i = 0; i < PORTTOTAL; i++ )
for ( j = 0; j < MIBCOUNTEROFFSET; j++ )
{
//
// The first parameter of GetMIBCounter() starts with
// 1, not 0.
//
ulTemp = GetMIBCounter ( (BYTE) i + 1, (BYTE) j );
ulMIB[i][j] += ulTemp;
}
DisplayMIBArray();
if ( elem1 > 0 )
{
#ifdef LINUX
EnableLINUXkbhit ();
#endif
time (&tStart);
tEnd = tStart;
while(ch != 'q') {
if ( tEnd - tStart >= elem1 )
{
for ( i = 0; i < PORTTOTAL; i++ )
for ( j = 0; j < MIBCOUNTEROFFSET; j++ )
{
ulTemp = GetMIBCounter ( (BYTE) i + 1, (BYTE) j );
ulMIB[i][j] += ulTemp;
}
DisplayMIBArray();
tStart = tEnd;
}
time (&tEnd);
if(_kbhit()) {
ch = _getch();
}
}
#ifdef LINUX
DisableLINUXkbhit ();
#endif
}
if ( giMIBOverflow )
{
printf ( "\n!!!!!!!!!!!!!!!!!!!!!!!!");
printf ( "\n! !");
printf ( "\n! MIB Counter overflow !");
printf ( "\n! !");
printf ( "\n!!!!!!!!!!!!!!!!!!!!!!!!");
}
return SUCCESS;
}
//--------------------------------------------------------------------------
//
// int DumpReg
//
// Description:
// Command:
//
// dall Reg Dump 20 registers starting from Reg.
//
// Parameters:
// int elem1 Register number
// int elem2 NOPARAMETER
// int elem3 NOPARAMETER
//
// Return Vlaue:
// SUCCESS or PARMERROR
//
//--------------------------------------------------------------------------
int DumpReg ( int elem1, int elem2, int elem3 )
{
int iNdx;
if ( elem1 == NOPARAMETER || elem2 != NOPARAMETER || elem3 != NOPARAMETER )
return PARMERROR;
if ( elem1 >= REGISTERTOTAL )
return PARMERROR;
igRRegNdx = elem1;
for ( iNdx = 0; iNdx < 20; iNdx++ )
{
printf ( "\nRegister (0x%.2x) = 0x%.2x", igRRegNdx, ReadData ( (BYTE) igRRegNdx ) );
igRRegNdx++ ;
if ( igRRegNdx == REGISTERTOTAL )
igRRegNdx = 0;
}
// Restor the register index to pointing to the last register printed.
if ( igRRegNdx == 0 )
igRRegNdx = REGISTERTOTAL - 1;
else
igRRegNdx--;
return SUCCESS;
}
//--------------------------------------------------------------------------
//
// int DumpNext20Reg
//
// Description:
// Command:
//
// dn Dump next 20 registers starting from igRRegNdx (global variable);
//
// Parameters:
// int elem1 NOPAEAMETER
// int elem2 NOPARAMETER
// int elem3 NOPARAMETER
//
// Return Vlaue:
// SUCCESS or PARMERROR
//
//--------------------------------------------------------------------------
int DumpNext20Reg ( int elem1, int elem2, int elem3 )
{
int iNdx;
if ( elem1 != NOPARAMETER || elem2 != NOPARAMETER || elem3 != NOPARAMETER )
return PARMERROR;
for ( iNdx = 0; iNdx < 20; iNdx++ )
{
igRRegNdx++;
if ( igRRegNdx == REGISTERTOTAL )
igRRegNdx = 0;
printf ( "\nRegister (0x%.2x) = 0x%.2x", igRRegNdx, ReadData ( (BYTE) igRRegNdx ) );
}
return SUCCESS;
}
//--------------------------------------------------------------------------
//
// int DumpPortCtlReg
//
// Description:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -