#ifndef _PROCINFO_H
#define _PROCINFO_H

#define PROC_NR_FILE  "/proc/net/nr"
#define PROC_DEV_FILE "/proc/net/dev"

/* VE3TOK 30Nov2014 - A number of defines moved to config.h  */

#define CONN_TYPE_DIRECT 'D'
#define CONN_TYPE_NODE 'N'
#define CONN_TYPE_DIGI 'V'

struct proc_dev {
  char          interface[6];
  int           rx_bytes;
  int           rx_packets;
  int           rx_errs;
  int           rx_drop;
  int           rx_fifo;
  int           rx_frame;
  int           rx_compressed;
  int           rx_multicast;
  int           tx_bytes;
  int           tx_packets;
  int           tx_errs;
  int           tx_drop;
  int           tx_fifo;  
  int           tx_colls;  
  int           tx_carrier;  
  int           tx_compressed;

  struct proc_dev  *next;
};


/*
 * /var/ax25/flex/gateways: (example)
 * addr  callsign  dev  dest  digipeaters
 * 00001 PI4TUE    ax1   935
 */

struct flex_gt {
  int                     addr;
  char                    call[10];
  char                    dev[14];
  char                    digis[AX25_MAX_DIGIS][10];
  
  struct flex_gt          *next;
};

/*
 * /usr/local/var/ax25/flex/destinations: (example)
 * callsign  ssid    rtt  gateway
 * 9A0XZG    0-15   2575    00001
 * DB0AAA    0-0      63    00001
 */

struct flex_dst {
  char                    dest_call[10];
  unsigned short          ssida;
  unsigned short          sside;
  unsigned long           rtt;
  int                     addr;
  
  struct flex_dst         *next;
};

struct ax_routes {
  char                    dest_call[10];
  char 			  alias[10]; 
  char                    dev[14];  
  char			  conn_type[1];  
  char 			  description[50];
  char                    digis[AX25_MAX_DIGIS][10];

  struct ax_routes        *next;
};

extern int safe_atoi(const char *s);
extern char *safe_strncpy(char *dest, char *src, int n);

extern struct proc_dev *read_proc_dev(void);
extern void free_proc_dev(struct proc_dev *ap);

extern struct flex_gt *read_flex_gt(void);
extern void free_flex_gt(struct flex_gt *fp);

extern struct flex_dst *read_flex_dst(void);
extern void free_flex_dst(struct flex_dst *fp);

extern struct ax_routes *read_ax_routes(void);
extern void free_ax_routes(struct ax_routes *ap);

extern struct ax_routes *find_route(char *dest_call, struct ax_routes *list);
extern struct flex_dst *find_dest(char *dest_call, struct flex_dst *list);
extern struct flex_gt *find_gateway(int addr, struct flex_gt *list);
extern struct ax_routes *find_mheard(char *dest_call);

#endif  /* _PROCINFO_H */