Blame view

net/atm/lec.h 5.14 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2
3
   * Lan Emulation client header file
   *
1c9d3e72a   Chas Williams   [ATM]: [lec] head...
4
   * Marko Kiiskila <mkiiskila@yahoo.com>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
5
6
7
8
   */
  
  #ifndef _LEC_H_
  #define _LEC_H_
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
9
10
11
12
13
14
15
  #include <linux/atmdev.h>
  #include <linux/netdevice.h>
  #include <linux/atmlec.h>
  
  #define LEC_HEADER_LEN 16
  
  struct lecdatahdr_8023 {
30d492da7   Al Viro   [ATM]: Annotations.
16
  	__be16 le_header;
1c9d3e72a   Chas Williams   [ATM]: [lec] head...
17
18
  	unsigned char h_dest[ETH_ALEN];
  	unsigned char h_source[ETH_ALEN];
30d492da7   Al Viro   [ATM]: Annotations.
19
  	__be16 h_type;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
20
21
22
  };
  
  struct lecdatahdr_8025 {
30d492da7   Al Viro   [ATM]: Annotations.
23
  	__be16 le_header;
1c9d3e72a   Chas Williams   [ATM]: [lec] head...
24
25
26
27
  	unsigned char ac_pad;
  	unsigned char fc;
  	unsigned char h_dest[ETH_ALEN];
  	unsigned char h_source[ETH_ALEN];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
28
29
30
31
32
33
34
35
36
  };
  
  #define LEC_MINIMUM_8023_SIZE   62
  #define LEC_MINIMUM_8025_SIZE   16
  
  /*
   * Operations that LANE2 capable device can do. Two first functions
   * are used to make the device do things. See spec 3.1.3 and 3.1.4.
   *
25985edce   Lucas De Marchi   Fix common misspe...
37
   * The third function is intended for the MPOA component sitting on
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
38
39
40
41
42
43
   * top of the LANE device. The MPOA component assigns it's own function
   * to (*associate_indicator)() and the LANE device will use that
   * function to tell about TLVs it sees floating through.
   *
   */
  struct lane2_ops {
61c33e012   Mitchell Blank Jr   atm: use const wh...
44
  	int (*resolve) (struct net_device *dev, const u8 *dst_mac, int force,
1c9d3e72a   Chas Williams   [ATM]: [lec] head...
45
  			u8 **tlvs, u32 *sizeoftlvs);
61c33e012   Mitchell Blank Jr   atm: use const wh...
46
47
48
49
  	int (*associate_req) (struct net_device *dev, const u8 *lan_dst,
  			      const u8 *tlvs, u32 sizeoftlvs);
  	void (*associate_indicator) (struct net_device *dev, const u8 *mac_addr,
  				     const u8 *tlvs, u32 sizeoftlvs);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
50
51
52
53
  };
  
  /*
   * ATM LAN Emulation supports both LLC & Dix Ethernet EtherType
f7d57453d   YOSHIFUJI Hideaki   [NET] ATM: Fix wh...
54
   * frames.
1c9d3e72a   Chas Williams   [ATM]: [lec] head...
55
   *
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
56
57
58
   * 1. Dix Ethernet EtherType frames encoded by placing EtherType
   *    field in h_type field. Data follows immediatelly after header.
   * 2. LLC Data frames whose total length, including LLC field and data,
f7d57453d   YOSHIFUJI Hideaki   [NET] ATM: Fix wh...
59
   *    but not padding required to meet the minimum data frame length,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
60
61
62
63
64
65
66
67
68
69
70
   *    is less than 1536(0x0600) MUST be encoded by placing that length
   *    in the h_type field. The LLC field follows header immediatelly.
   * 3. LLC data frames longer than this maximum MUST be encoded by placing
   *    the value 0 in the h_type field.
   *
   */
  
  /* Hash table size */
  #define LEC_ARP_TABLE_SIZE 16
  
  struct lec_priv {
1c9d3e72a   Chas Williams   [ATM]: [lec] head...
71
  	unsigned short lecid;			/* Lecid of this client */
d0732f649   Chas Williams   [ATM]: [lec] conv...
72
  	struct hlist_head lec_arp_empty_ones;
1c9d3e72a   Chas Williams   [ATM]: [lec] head...
73
  						/* Used for storing VCC's that don't have a MAC address attached yet */
d0732f649   Chas Williams   [ATM]: [lec] conv...
74
  	struct hlist_head lec_arp_tables[LEC_ARP_TABLE_SIZE];
1c9d3e72a   Chas Williams   [ATM]: [lec] head...
75
  						/* Actual LE ARP table */
d0732f649   Chas Williams   [ATM]: [lec] conv...
76
  	struct hlist_head lec_no_forward;
1c9d3e72a   Chas Williams   [ATM]: [lec] head...
77
78
79
80
81
82
  						/*
  						 * Used for storing VCC's (and forward packets from) which are to
  						 * age out by not using them to forward packets.
  						 * This is because to some LE clients there will be 2 VCCs. Only
  						 * one of them gets used.
  						 */
d0732f649   Chas Williams   [ATM]: [lec] conv...
83
  	struct hlist_head mcast_fwds;
1c9d3e72a   Chas Williams   [ATM]: [lec] head...
84
85
86
87
88
89
90
91
92
  						/*
  						 * With LANEv2 it is possible that BUS (or a special multicast server)
  						 * establishes multiple Multicast Forward VCCs to us. This list
  						 * collects all those VCCs. LANEv1 client has only one item in this
  						 * list. These entries are not aged out.
  						 */
  	spinlock_t lec_arp_lock;
  	struct atm_vcc *mcast_vcc;		/* Default Multicast Send VCC */
  	struct atm_vcc *lecd;
c4028958b   David Howells   WorkStruct: make ...
93
  	struct delayed_work lec_arp_work;	/* C10 */
1c9d3e72a   Chas Williams   [ATM]: [lec] head...
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
  	unsigned int maximum_unknown_frame_count;
  						/*
  						 * Within the period of time defined by this variable, the client will send
  						 * no more than C10 frames to BUS for a given unicast destination. (C11)
  						 */
  	unsigned long max_unknown_frame_time;
  						/*
  						 * If no traffic has been sent in this vcc for this period of time,
  						 * vcc will be torn down (C12)
  						 */
  	unsigned long vcc_timeout_period;
  						/*
  						 * An LE Client MUST not retry an LE_ARP_REQUEST for a
  						 * given frame's LAN Destination more than maximum retry count times,
  						 * after the first LEC_ARP_REQUEST (C13)
  						 */
  	unsigned short max_retry_count;
  						/*
  						 * Max time the client will maintain an entry in its arp cache in
  						 * absence of a verification of that relationship (C17)
  						 */
  	unsigned long aging_time;
  						/*
  						 * Max time the client will maintain an entry in cache when
  						 * topology change flag is true (C18)
  						 */
  	unsigned long forward_delay_time;	/* Topology change flag (C19) */
  	int topology_change;
  						/*
  						 * Max time the client expects an LE_ARP_REQUEST/LE_ARP_RESPONSE
  						 * cycle to take (C20)
  						 */
  	unsigned long arp_response_time;
  						/*
  						 * Time limit ot wait to receive an LE_FLUSH_RESPONSE after the
  						 * LE_FLUSH_REQUEST has been sent before taking recover action. (C21)
  						 */
  	unsigned long flush_timeout;
  						/* The time since sending a frame to the bus after which the
  						 * LE Client may assume that the frame has been either discarded or
  						 * delivered to the recipient (C22)
  						 */
  	unsigned long path_switching_delay;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
137

1c9d3e72a   Chas Williams   [ATM]: [lec] head...
138
139
140
141
142
143
144
  	u8 *tlvs;				/* LANE2: TLVs are new */
  	u32 sizeoftlvs;				/* The size of the tlv array in bytes */
  	int lane_version;			/* LANE2 */
  	int itfnum;				/* e.g. 2 for lec2, 5 for lec5 */
  	struct lane2_ops *lane2_ops;		/* can be NULL for LANE v1 */
  	int is_proxy;				/* bridge between ATM and Ethernet */
  	int is_trdev;				/* Device type, 0 = Ethernet, 1 = TokenRing */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
145
146
147
  };
  
  struct lec_vcc_priv {
1c9d3e72a   Chas Williams   [ATM]: [lec] head...
148
  	void (*old_pop) (struct atm_vcc *vcc, struct sk_buff *skb);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
149
150
151
152
  	int xoff;
  };
  
  #define LEC_VCC_PRIV(vcc)	((struct lec_vcc_priv *)((vcc)->user_back))
1c9d3e72a   Chas Williams   [ATM]: [lec] head...
153
  #endif				/* _LEC_H_ */