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