lec_arpc.h 3.0 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3
/*
 * Lec arp cache
 *
4
 * Marko Kiiskila <mkiiskila@yahoo.com>
L
Linus Torvalds 已提交
5
 */
6 7
#ifndef _LEC_ARP_H_
#define _LEC_ARP_H_
L
Linus Torvalds 已提交
8 9 10 11 12 13
#include <linux/atm.h>
#include <linux/atmdev.h>
#include <linux/if_ether.h>
#include <linux/atmlec.h>

struct lec_arp_table {
14 15 16 17 18 19
	struct lec_arp_table *next;	/* Linked entry list */
	unsigned char atm_addr[ATM_ESA_LEN];	/* Atm address */
	unsigned char mac_addr[ETH_ALEN];	/* Mac address */
	int is_rdesc;			/* Mac address is a route descriptor */
	struct atm_vcc *vcc;		/* Vcc this entry is attached */
	struct atm_vcc *recv_vcc;	/* Vcc we receive data from */
L
Linus Torvalds 已提交
20

21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
	void (*old_push) (struct atm_vcc *vcc, struct sk_buff *skb);
					/* Push that leads to daemon */

	void (*old_recv_push) (struct atm_vcc *vcc, struct sk_buff *skb);
					/* Push that leads to daemon */

	void (*old_close) (struct atm_vcc *vcc);
					/* We want to see when this vcc gets closed */

	unsigned long last_used;	/* For expiry */
	unsigned long timestamp;	/* Used for various timestamping things:
					 * 1. FLUSH started
					 *    (status=ESI_FLUSH_PENDING)
					 * 2. Counting to
					 *    max_unknown_frame_time
					 *    (status=ESI_ARP_PENDING||
					 *     status=ESI_VC_PENDING)
					 */
	unsigned char no_tries;		/* No of times arp retry has been tried */
	unsigned char status;		/* Status of this entry */
	unsigned short flags;		/* Flags for this entry */
	unsigned short packets_flooded;	/* Data packets flooded */
	unsigned long flush_tran_id;	/* Transaction id in flush protocol */
	struct timer_list timer;	/* Arping timer */
	struct lec_priv *priv;		/* Pointer back */
	u8 *tlvs;
	u32 sizeoftlvs;			/*
					 * LANE2: Each MAC address can have TLVs
					 * associated with it.  sizeoftlvs tells the
					 * the length of the tlvs array
					 */
	struct sk_buff_head tx_wait;	/* wait queue for outgoing packets */
L
Linus Torvalds 已提交
53 54
};

55 56 57 58 59 60 61 62
/*
 * LANE2: Template tlv struct for accessing
 * the tlvs in the lec_arp_table->tlvs array
 */
struct tlv {
	u32 type;
	u8 length;
	u8 value[255];
L
Linus Torvalds 已提交
63 64 65
};

/* Status fields */
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
#define ESI_UNKNOWN 0		/*
				 * Next packet sent to this mac address
				 * causes ARP-request to be sent
				 */
#define ESI_ARP_PENDING 1	/*
				 * There is no ATM address associated with this
				 * 48-bit address.  The LE-ARP protocol is in
				 * progress.
				 */
#define ESI_VC_PENDING 2	/*
				 * There is a valid ATM address associated with
				 * this 48-bit address but there is no VC set
				 * up to that ATM address.  The signaling
				 * protocol is in process.
				 */
#define ESI_FLUSH_PENDING 4	/*
				 * The LEC has been notified of the FLUSH_START
				 * status and it is assumed that the flush
				 * protocol is in process.
				 */
#define ESI_FORWARD_DIRECT 5	/*
				 * Either the Path Switching Delay (C22) has
				 * elapsed or the LEC has notified the Mapping
				 * that the flush protocol has completed.  In
				 * either case, it is safe to forward packets
				 * to this address via the data direct VC.
				 */
L
Linus Torvalds 已提交
93 94 95 96 97

/* Flag values */
#define LEC_REMOTE_FLAG      0x0001
#define LEC_PERMANENT_FLAG   0x0002

98
#endif /* _LEC_ARP_H_ */