/*
 * File:        nif.h
 * Purpose:     Definition of a Network InterFace.
 *
 * Notes:
 */

#ifndef _NIF_H
#define _NIF_H

/* 
 * Maximum number of supported protoocls: IP, ARP, RARP 
 */
#define MAX_SUP_PROTO   (3)

typedef struct NIF_t
{
	ETH_ADDR    hwa;        /* ethernet card hardware address */
	ETH_ADDR    broadcast;  /* broadcast address */
	int         mtu;        /* hardware maximum transmission unit */
	int         ch;         /* ethernet channel associated with this NIF */

	struct SUP_PROTO_t
	{
		uint16_t  protocol;
		void    (*handler)(struct NIF_t *, NBUF *);
		void    *info;
	} protocol[MAX_SUP_PROTO];

	unsigned short  num_protocol;

	int     (*send)(struct NIF_t *, uint8_t *, uint8_t *, uint16_t, NBUF *);

	unsigned int    f_rx;
	unsigned int    f_tx;
	unsigned int    f_rx_err;
	unsigned int    f_tx_err;
	unsigned int    f_err;
} NIF;


extern NIF *nif_init (NIF *);
extern int nif_protocol_exist (NIF *, uint16_t);
extern void nif_protocol_handler (NIF *, uint16_t, NBUF *);
extern void *nif_get_protocol_info (NIF *, uint16_t);
extern int nif_bind_protocol (NIF *, uint16_t, void (*)(NIF *, NBUF *), void *);


#endif /* _NIF_H */
