1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Lec arp cache 4 * 5 * Marko Kiiskila <mkiiskila@yahoo.com> 6 */ 7 #ifndef _LEC_ARP_H_ 8 #define _LEC_ARP_H_ 9 #include <linux/atm.h> 10 #include <linux/atmdev.h> 11 #include <linux/if_ether.h> 12 #include <linux/atmlec.h> 13 14 struct lec_arp_table { 15 struct hlist_node next; /* Linked entry list */ 16 unsigned char atm_addr[ATM_ESA_LEN]; /* Atm address */ 17 unsigned char mac_addr[ETH_ALEN]; /* Mac address */ 18 int is_rdesc; /* Mac address is a route descriptor */ 19 struct atm_vcc *vcc; /* Vcc this entry is attached */ 20 struct atm_vcc *recv_vcc; /* Vcc we receive data from */ 21 22 void (*old_push) (struct atm_vcc *vcc, struct sk_buff *skb); 23 /* Push that leads to daemon */ 24 25 void (*old_recv_push) (struct atm_vcc *vcc, struct sk_buff *skb); 26 /* Push that leads to daemon */ 27 28 unsigned long last_used; /* For expiry */ 29 unsigned long timestamp; /* Used for various timestamping things: 30 * 1. FLUSH started 31 * (status=ESI_FLUSH_PENDING) 32 * 2. Counting to 33 * max_unknown_frame_time 34 * (status=ESI_ARP_PENDING|| 35 * status=ESI_VC_PENDING) 36 */ 37 unsigned char no_tries; /* No of times arp retry has been tried */ 38 unsigned char status; /* Status of this entry */ 39 unsigned short flags; /* Flags for this entry */ 40 unsigned short packets_flooded; /* Data packets flooded */ 41 unsigned long flush_tran_id; /* Transaction id in flush protocol */ 42 struct timer_list timer; /* Arping timer */ 43 struct lec_priv *priv; /* Pointer back */ 44 u8 *tlvs; 45 u32 sizeoftlvs; /* 46 * LANE2: Each MAC address can have TLVs 47 * associated with it. sizeoftlvs tells the 48 * the length of the tlvs array 49 */ 50 struct sk_buff_head tx_wait; /* wait queue for outgoing packets */ 51 refcount_t usage; /* usage count */ 52 }; 53 54 /* 55 * LANE2: Template tlv struct for accessing 56 * the tlvs in the lec_arp_table->tlvs array 57 */ 58 struct tlv { 59 u32 type; 60 u8 length; 61 u8 value[255]; 62 }; 63 64 /* Status fields */ 65 #define ESI_UNKNOWN 0 /* 66 * Next packet sent to this mac address 67 * causes ARP-request to be sent 68 */ 69 #define ESI_ARP_PENDING 1 /* 70 * There is no ATM address associated with this 71 * 48-bit address. The LE-ARP protocol is in 72 * progress. 73 */ 74 #define ESI_VC_PENDING 2 /* 75 * There is a valid ATM address associated with 76 * this 48-bit address but there is no VC set 77 * up to that ATM address. The signaling 78 * protocol is in process. 79 */ 80 #define ESI_FLUSH_PENDING 4 /* 81 * The LEC has been notified of the FLUSH_START 82 * status and it is assumed that the flush 83 * protocol is in process. 84 */ 85 #define ESI_FORWARD_DIRECT 5 /* 86 * Either the Path Switching Delay (C22) has 87 * elapsed or the LEC has notified the Mapping 88 * that the flush protocol has completed. In 89 * either case, it is safe to forward packets 90 * to this address via the data direct VC. 91 */ 92 93 /* Flag values */ 94 #define LEC_REMOTE_FLAG 0x0001 95 #define LEC_PERMANENT_FLAG 0x0002 96 97 #endif /* _LEC_ARP_H_ */ 98