/*
 * INET		An implementation of the TCP/IP protocol suite for the LINUX
 *		operating system.  INET is implemented using the  BSD Socket
 *		interface as the means of communication with the user level.
 *
 *		Definitions for the ARP protocol module.
 *
 * Version:	@(#)arp.h	1.0.6	05/21/93
 *
 * Authors:	Ross Biro, <bir7@leland.Stanford.Edu>
 *		Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
 *
 *		This program is free software; you can redistribute it and/or
 *		modify it under the terms of the GNU General Public License
 *		as published by the Free Software Foundation; either version
 *		2 of the License, or (at your option) any later version.
 */
#ifndef _ARP_H
#define _ARP_H

#define ARP_TABLE_SIZE	16		/* size of ARP table		*/
#define ARP_TIMEOUT	30000		/* five minutes			*/
#define ARP_RES_TIME	250		/* 2.5 seconds			*/

#define ARP_MAX_TRIES	3		/* max # of tries to send ARP	*/
#define ARP_QUEUE_MAGIC	0x0432447A	/* magic # for queues		*/


/* This structure defines the ARP mapping cache. */
struct arp_table {
  struct arp_table		*next;
  volatile unsigned long	last_used;
  unsigned int			flags;
#if 1
  unsigned long			ip;
#else
  unsigned char			pa[MAX_ADDR_LEN];
  unsigned char			plen;
  unsigned char			ptype;
#endif
  unsigned char			ha[MAX_ADDR_LEN];
  unsigned char			hlen;
  unsigned char			htype;
};


/* This is also used in "sock.c" and "tcp.c" - YUCK! - FvK */
extern struct sk_buff *arp_q;


extern void	arp_destroy(unsigned long paddr);
extern int	arp_rcv(struct sk_buff *skb, struct device *dev,
			struct packet_type *pt);
extern int	arp_find(unsigned char *haddr, unsigned long paddr,
			 struct device *dev, unsigned long saddr);
extern void	arp_add(unsigned long addr, unsigned char *haddr,
			struct device *dev);
extern void	arp_add_broad(unsigned long addr, struct device *dev);
extern void	arp_queue(struct sk_buff *skb);
extern int	arp_get_info(char *buffer);
extern int	arp_ioctl(unsigned int cmd, void *arg);

#endif	/* _ARP_H */
