/* Copyright 1998 Acorn Computers Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/*
*  Lan Manager client
*
*  Stats.C -- Statistics gathering
*
*  Versions
*  21-08-95 INH Original
*
*/

/* Standard includes */

#include <stdio.h>

/* Our includes */

#include "stdtypes.h"
#include "stats.h"

int Stat_StatTable [STA_MAXSTATS];
int Stat_ClassMask;

struct stat_info
{
  int stat_no;
  int sclass;
  char *name;
};

static struct stat_info statinfo[] =
{
  STA_SERIOUS_BARF, SCLASS_GENERAL,  "Internal errors",
  STA_NETTX_PKTS,   SCLASS_NETBEUI,  "Total Tx packets",
  STA_NETRX_EVTS,   SCLASS_NETBEUI,  "Total Rx events",
  STA_NETRX_PKTS,   SCLASS_NETBEUI,  "Total Rx packets",
  STA_NETRX_OWNTX,  SCLASS_NETBEUI,  "Rx: Own transmission",

  STA_LLCRX_PKTS,   SCLASS_NETBEUI,  "LLC: Rx pkts total",
  STA_LLCRX_NOCONN, SCLASS_NETBEUI,  "LLC: Ignored rx packets",
  STA_LLCRX_TOOSHORT,SCLASS_NETBEUI, "LLC: Rx Too short",
  STA_LLCRX_UIDATA, SCLASS_NETBEUI,  "LLC: Rx Datagram",
  STA_LLCRX_UFORMAT,SCLASS_NETBEUI,  "LLC: Rx U-format",

  STA_LLCRX_SFORMAT,SCLASS_NETBEUI,  "LLC: Rx S-format",
  STA_LLCRX_IFORMAT,SCLASS_NETBEUI,  "LLC: Rx I-format",
  STA_LLCRX_DATA,   SCLASS_NETBEUI,  "LLC: Rx Data pkts accepted",
  STA_LLCRX_REJDATA,SCLASS_NETBEUI,  "LLC: Rx Data pkts rejected",
  STA_LLC_TXPACKETS,SCLASS_NETBEUI,  "LLC: Tx Data pkts sent",

  STA_LLCRX_PKTACKS,SCLASS_NETBEUI,  "LLC: Tx Data pkts acked",
  STA_LLCRX_REJECTS,SCLASS_NETBEUI,  "LLC: Tx Data pkts rejected",
  STA_LLCRX_RESENDS,SCLASS_NETBEUI,  "LLC: Tx Data pkts re-sent",
  STA_LLC_OPENREQ,  SCLASS_NETBEUI,  "LLC: Open Conn requests",
  STA_LLCRX_CONN,   SCLASS_NETBEUI,  "LLC: Connections made",

  STA_LLC_CLOSEREQ, SCLASS_NETBEUI,  "LLC: Close Conn requests",
  STA_LLCRX_DISCON, SCLASS_NETBEUI,  "LLC: Connections ended",
  STA_LLCRX_FRMR,   SCLASS_NETBEUI,  "LLC: Abort with FRMR error",
  STA_LLCRX_DISC,   SCLASS_NETBEUI,  "LLC: Abort with DISC req",
  STA_LLC_T1FAIL,   SCLASS_NETBEUI,  "LLC: Abort with T1 timeout",

  STA_LLCRX_UNKNOWNU, SCLASS_NETBEUI,"LLC: Unknown U-format pkt",
  STA_LLC_T1EXPIRE, SCLASS_NETBEUI,  "LLC: T1 timeouts",

  STA_IP_EVENTS,    SCLASS_IP,       "IP:  Internet events",
  STA_IP_RXDGRAM,   SCLASS_IP,       "IP:  Receive datagrams",


  -1, 0, NULL
};

/* -------------- */

void Stat_Show ( void )
{
  int i;
  for ( i=0; statinfo[i].stat_no >= 0; i++ )
  {
    if ( statinfo[i].sclass & Stat_ClassMask )
      printf("%-30s: %d\n", statinfo[i].name,
             Stat_StatTable[statinfo[i].stat_no] );
  }
  printf("\n");
}

/* ------------- */

bool Stat_Init ( void )
{
  int i;

  Stat_ClassMask = SCLASS_GENERAL;
  for (i=0; i<STA_MAXSTATS; i++)
    Stat_StatTable[i] = 0;

  return true;
}