2005-04-17 02:20:36 +04:00
/*
* Lec arp cache
*
2006-09-30 04:13:24 +04:00
* Marko Kiiskila < mkiiskila @ yahoo . com >
2005-04-17 02:20:36 +04:00
*/
2006-09-30 04:13:24 +04:00
# ifndef _LEC_ARP_H_
# define _LEC_ARP_H_
2005-04-17 02:20:36 +04:00
# include <linux/atm.h>
# include <linux/atmdev.h>
# include <linux/if_ether.h>
# include <linux/atmlec.h>
struct lec_arp_table {
2006-09-30 04:14:27 +04:00
struct hlist_node next ; /* Linked entry list */
2006-09-30 04:13:24 +04:00
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 */
2005-04-17 02:20:36 +04:00
2006-09-30 04:13:24 +04:00
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 */
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 */
2006-09-30 04:16:48 +04:00
atomic_t usage ; /* usage count */
2005-04-17 02:20:36 +04:00
} ;
2006-09-30 04:13:24 +04:00
/*
* LANE2 : Template tlv struct for accessing
* the tlvs in the lec_arp_table - > tlvs array
*/
struct tlv {
u32 type ;
u8 length ;
u8 value [ 255 ] ;
2005-04-17 02:20:36 +04:00
} ;
/* Status fields */
2006-09-30 04:13:24 +04:00
# 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 .
*/
2005-04-17 02:20:36 +04:00
/* Flag values */
# define LEC_REMOTE_FLAG 0x0001
# define LEC_PERMANENT_FLAG 0x0002
2006-09-30 04:13:24 +04:00
# endif /* _LEC_ARP_H_ */