/* 
 * sim_init.h
 *
 * x-kernel v3.3
 *
 * Copyright (c) 1996,1993,1991,1990  Arizona Board of Regents
 */

#define SIM_ERROR           -13135
#define MAX_BRANCH_PARENTS  300
#define MAX_BRANCH_CHILDREN 40
#define MAX_ARGS            100
#define HOST_TYPE           0
#define ROUTER_TYPE         1
#define BUF_SIZE            500
#define FLG_DONE            0x1
#define MAX_ROUTE_TABLE     100
#define MAX_PROTOCOLS       4000
#define MAX_TOP_PROTOCOLS   16

#ifdef XMEMTRACK

extern char *xMallocTrack(unsigned, int);
extern char *xMallocZeroTrack(unsigned, int);
extern int  TrackGetId(char *);

#define xMalloc(s)     xMallocTrack(s, TrackId)
#define xMallocZero(s) xMallocZeroTrack(s, TrackId)

#endif

typedef struct pnode {
  struct pnode  *next;
  char	       *name;
  char         *instance;
  struct obj   *host;
  short        filePos;
  short        fileLine;
  int          level;
  int          index;
  int          flags;
  int          numParents;
  int          argc;
  char         *argv[40];
  struct pnode *parents[MAX_BRANCH_PARENTS];
  int          numChildren;
  struct pnode *children[MAX_BRANCH_CHILDREN];
} PNODE;

typedef struct obj {
  struct obj *next;
  int        type;
  int        id;
  char       *name;
  char       *routerType;
  PNODE      *topProtocol[MAX_TOP_PROTOCOLS];
  int        topProtocolCnt;
  Sc         protNames;
  int        argc;
  char       *argv[MAX_ARGS];
  int        rtableCnt;
  IPhost     ipAddr;
  IPhost     forNet[MAX_ROUTE_TABLE];
  IPhost     useHost[MAX_ROUTE_TABLE];
  void       *state;
} OBJ;

typedef struct connect {
  struct connect *next;
  OBJ            *obj;
  PNODE          *prot;
  char           *hostAddr;
/*  IPhost         *ipAddr; */
} CONNECT;

typedef struct net {
  struct net  *next;
  char        *type;
  char        *netAddr;
  int         argc;
  char        *argv[MAX_ARGS];
  int         connectCnt;
  CONNECT     *connections;
  Net         *state;
  struct net  *other;
} NET;

extern void *simGetProtlInitFuncAddr(char *);
extern void *simGetProtlTraceVarAddr(char *);
