1 /*
2  *
3  * ATM Lan Emulation Daemon vs. driver interface
4  *
5  * mkiiskila@yahoo.com
6  *
7  */
8 
9 #ifndef _ATMLEC_H_
10 #define _ATMLEC_H_
11 
12 #include <linux/atmapi.h>
13 #include <linux/atmioc.h>
14 #include <linux/atm.h>
15 #include <linux/if_ether.h>
16 /* ATM lec daemon control socket */
17 #define ATMLEC_CTRL _IO('a',ATMIOC_LANE)
18 #define ATMLEC_DATA _IO('a',ATMIOC_LANE+1)
19 #define ATMLEC_MCAST _IO('a',ATMIOC_LANE+2)
20 
21 /* Maximum number of LEC interfaces (tweakable) */
22 #define MAX_LEC_ITF 48
23 
24 /* From the total of MAX_LEC_ITF, last NUM_TR_DEVS are reserved for Token Ring.
25  * E.g. if MAX_LEC_ITF = 48 and NUM_TR_DEVS = 8, then lec0-lec39 are for
26  * Ethernet ELANs and lec40-lec47 are for Token Ring ELANS.
27  */
28 #define NUM_TR_DEVS 8
29 
30 typedef enum {
31         l_set_mac_addr,   l_del_mac_addr,
32         l_svc_setup,
33         l_addr_delete,    l_topology_change,
34         l_flush_complete, l_arp_update,
35         l_narp_req, /* LANE2 mandates the use of this */
36         l_config,         l_flush_tran_id,
37         l_set_lecid,      l_arp_xmt,
38         l_rdesc_arp_xmt,
39         l_associate_req,
40         l_should_bridge   /* should we bridge this MAC? */
41 } atmlec_msg_type;
42 
43 #define ATMLEC_MSG_TYPE_MAX l_should_bridge
44 
45 struct atmlec_config_msg {
46         unsigned int maximum_unknown_frame_count;
47         unsigned int max_unknown_frame_time;
48         unsigned short max_retry_count;
49         unsigned int aging_time;
50         unsigned int forward_delay_time;
51         unsigned int arp_response_time;
52         unsigned int flush_timeout;
53         unsigned int path_switching_delay;
54         unsigned int  lane_version; /* LANE2: 1 for LANEv1, 2 for LANEv2 */
55         int mtu;
56         int is_proxy;
57 };
58 
59 struct atmlec_msg {
60         atmlec_msg_type type;
61         int             sizeoftlvs;        /* LANE2: if != 0, tlvs follow */
62         union {
63                 struct {
64                         unsigned char mac_addr[ETH_ALEN];
65                         unsigned char atm_addr[ATM_ESA_LEN];
66                         unsigned int flag;/* Topology_change flag,
67                                               remoteflag, permanent flag,
68                                               lecid, transaction id */
69                         unsigned int targetless_le_arp; /* LANE2 */
70                         unsigned int no_source_le_narp; /* LANE2 */
71                 } normal;
72                 struct atmlec_config_msg config;
73                 struct {
74                         uint16_t lec_id;                     /* requestor lec_id  */
75                         uint32_t tran_id;                    /* transaction id    */
76                         unsigned char mac_addr[ETH_ALEN];    /* dst mac addr      */
77                         unsigned char atm_addr[ATM_ESA_LEN]; /* reqestor ATM addr */
78                 } proxy;
79 		     /* For mapping LE_ARP requests to responses. Filled by */
80         } content;       /* zeppelin, returned by kernel. Used only when proxying */
81 } __ATM_API_ALIGN;
82 
83 struct atmlec_ioc {
84         int dev_num;
85         unsigned char atm_addr[ATM_ESA_LEN];
86         unsigned char receive;    /* 1= receive vcc, 0 = send vcc */
87 };
88 #endif /* _ATMLEC_H_ */
89