3 * Lan Emulation client header file 5 * Marko Kiiskila carnil@cs.tut.fi 12 #include <linux/atmdev.h> 13 #include <linux/netdevice.h> 14 #include <linux/atmlec.h> 16 #define LEC_HEADER_LEN 16 18 struct lecdatahdr_8023
{ 19 unsigned short le_header
; 20 unsigned char h_dest
[ETH_ALEN
]; 21 unsigned char h_source
[ETH_ALEN
]; 22 unsigned short h_type
; 25 struct lecdatahdr_8025
{ 26 unsigned short le_header
; 29 unsigned char h_dest
[ETH_ALEN
]; 30 unsigned char h_source
[ETH_ALEN
]; 34 * Operations that LANE2 capable device can do. Two first functions 35 * are used to make the device do things. See spec 3.1.3 and 3.1.4. 37 * The third function is intented for the MPOA component sitting on 38 * top of the LANE device. The MPOA component assigns it's own function 39 * to (*associate_indicator)() and the LANE device will use that 40 * function to tell about TLVs it sees floating through. 44 int(*resolve
)(struct net_device
*dev
, u8
*dst_mac
,int force
, 45 u8
**tlvs
, u32
*sizeoftlvs
); 46 int(*associate_req
)(struct net_device
*dev
, u8
*lan_dst
, 47 u8
*tlvs
, u32 sizeoftlvs
); 48 void(*associate_indicator
)(struct net_device
*dev
, u8
*mac_addr
, 49 u8
*tlvs
, u32 sizeoftlvs
); 53 int(*lecd_attach
)(struct atm_vcc
*vcc
,int arg
); 54 int(*mcast_attach
)(struct atm_vcc
*vcc
,int arg
); 55 int(*vcc_attach
)(struct atm_vcc
*vcc
,void*arg
); 56 struct net_device
**(*get_lecs
)(void); 60 * ATM LAN Emulation supports both LLC & Dix Ethernet EtherType 62 * 1. Dix Ethernet EtherType frames encoded by placing EtherType 63 * field in h_type field. Data follows immediatelly after header. 64 * 2. LLC Data frames whose total length, including LLC field and data, 65 * but not padding required to meet the minimum data frame length, 66 * is less than 1536(0x0600) MUST be encoded by placing that length 67 * in the the h_type field. The LLC field follows header immediatelly. 68 * 3. LLC data frames longer than this maximum MUST be encoded by placing 69 * the value 0 in the h_type field. 74 #define LEC_ARP_TABLE_SIZE 16 77 struct net_device_stats stats
; 78 unsigned short lecid
;/* Lecid of this client */ 79 struct lec_arp_table
*lec_arp_empty_ones
; 80 /* Used for storing VCC's that don't have a MAC address attached yet */ 81 struct lec_arp_table
*lec_arp_tables
[LEC_ARP_TABLE_SIZE
]; 82 /* Actual LE ARP table */ 83 struct lec_arp_table
*lec_no_forward
; 84 /* Used for storing VCC's (and forward packets from) which are to 85 age out by not using them to forward packets. 86 This is because to some LE clients there will be 2 VCCs. Only 87 one of them gets used. */ 88 struct lec_arp_table
*mcast_fwds
; 89 /* With LANEv2 it is possible that BUS (or a special multicast server) 90 establishes multiple Multicast Forward VCCs to us. This list 91 collects all those VCCs. LANEv1 client has only one item in this 92 list. These entries are not aged out. */ 93 atomic_t lec_arp_lock_var
; 94 struct atm_vcc
*mcast_vcc
;/* Default Multicast Send VCC */ 96 struct timer_list lec_arp_timer
; 98 unsigned int maximum_unknown_frame_count
; 99 /* Within the period of time defined by this variable, the client will send 100 no more than C10 frames to BUS for a given unicast destination. (C11) */ 101 unsigned long max_unknown_frame_time
; 102 /* If no traffic has been sent in this vcc for this period of time, 103 vcc will be torn down (C12)*/ 104 unsigned long vcc_timeout_period
; 105 /* An LE Client MUST not retry an LE_ARP_REQUEST for a 106 given frame's LAN Destination more than maximum retry count times, 107 after the first LEC_ARP_REQUEST (C13)*/ 108 unsigned short max_retry_count
; 109 /* Max time the client will maintain an entry in its arp cache in 110 absence of a verification of that relationship (C17)*/ 111 unsigned long aging_time
; 112 /* Max time the client will maintain an entry in cache when 113 topology change flag is true (C18) */ 114 unsigned long forward_delay_time
; 115 /* Topology change flag (C19)*/ 117 /* Max time the client expects an LE_ARP_REQUEST/LE_ARP_RESPONSE 118 cycle to take (C20)*/ 119 unsigned long arp_response_time
; 120 /* Time limit ot wait to receive an LE_FLUSH_RESPONSE after the 121 LE_FLUSH_REQUEST has been sent before taking recover action. (C21)*/ 122 unsigned long flush_timeout
; 123 /* The time since sending a frame to the bus after which the 124 LE Client may assume that the frame has been either discarded or 125 delivered to the recipient (C22) */ 126 unsigned long path_switching_delay
; 128 u8
*tlvs
;/* LANE2: TLVs are new */ 129 u32 sizeoftlvs
;/* The size of the tlv array in bytes */ 130 int lane_version
;/* LANE2 */ 131 int itfnum
;/* e.g. 2 for lec2, 5 for lec5 */ 132 struct lane2_ops
*lane2_ops
;/* can be NULL for LANE v1 */ 133 int is_proxy
;/* bridge between ATM and Ethernet */ 134 int is_trdev
;/* Device type, 0 = Ethernet, 1 = TokenRing */ 137 intlecd_attach(struct atm_vcc
*vcc
,int arg
); 138 intlec_vcc_attach(struct atm_vcc
*vcc
,void*arg
); 139 intlec_mcast_attach(struct atm_vcc
*vcc
,int arg
); 140 struct net_device
**get_dev_lec(void); 141 intmake_lec(struct atm_vcc
*vcc
); 142 intsend_to_lecd(struct lec_priv
*priv
, 143 atmlec_msg_type type
,unsigned char*mac_addr
, 144 unsigned char*atm_addr
,struct sk_buff
*data
); 145 voidlec_push(struct atm_vcc
*vcc
,struct sk_buff
*skb
); 147 voidatm_lane_init(void); 148 voidatm_lane_init_ops(struct atm_lane_ops
*ops
);