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