130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * ATM Lan Emulation Daemon driver interface
330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Marko Kiiskila <mkiiskila@yahoo.com>
530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef _ATMLEC_H_
830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define _ATMLEC_H_
930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/atmapi.h>
1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/atmioc.h>
1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/atm.h>
1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/if_ether.h>
1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/types.h>
1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* ATM lec daemon control socket */
1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define ATMLEC_CTRL	_IO('a', ATMIOC_LANE)
1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define ATMLEC_DATA	_IO('a', ATMIOC_LANE+1)
1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define ATMLEC_MCAST	_IO('a', ATMIOC_LANE+2)
2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Maximum number of LEC interfaces (tweakable) */
2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MAX_LEC_ITF 48
2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
2430692c65c4174412c90e79489e98ab85c1a7412fBen Chengtypedef enum {
2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	l_set_mac_addr,
2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	l_del_mac_addr,
2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	l_svc_setup,
2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	l_addr_delete,
2930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	l_topology_change,
3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	l_flush_complete,
3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	l_arp_update,
3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	l_narp_req,		/* LANE2 mandates the use of this */
3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	l_config,
3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	l_flush_tran_id,
3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	l_set_lecid,
3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	l_arp_xmt,
3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	l_rdesc_arp_xmt,
3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	l_associate_req,
3930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	l_should_bridge		/* should we bridge this MAC? */
4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} atmlec_msg_type;
4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define ATMLEC_MSG_TYPE_MAX l_should_bridge
4330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
4430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct atmlec_config_msg {
4530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int maximum_unknown_frame_count;
4630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int max_unknown_frame_time;
4730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned short max_retry_count;
4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int aging_time;
4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int forward_delay_time;
5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int arp_response_time;
5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int flush_timeout;
5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int path_switching_delay;
5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int lane_version;	/* LANE2: 1 for LANEv1, 2 for LANEv2 */
5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int mtu;
5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int is_proxy;
5630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
5830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct atmlec_msg {
5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	atmlec_msg_type type;
6030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int sizeoftlvs;		/* LANE2: if != 0, tlvs follow */
6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	union {
6230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct {
6330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			unsigned char mac_addr[ETH_ALEN];
6430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			unsigned char atm_addr[ATM_ESA_LEN];
6530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			unsigned int flag;	/*
6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng						 * Topology_change flag,
6730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng						 * remoteflag, permanent flag,
6830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng						 * lecid, transaction id
6930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng						 */
7030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			unsigned int targetless_le_arp;	/* LANE2 */
7130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			unsigned int no_source_le_narp;	/* LANE2 */
7230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		} normal;
7330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct atmlec_config_msg config;
7430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct {
7530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			__u16 lec_id;				/* requestor lec_id  */
7630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			__u32 tran_id;				/* transaction id    */
7730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			unsigned char mac_addr[ETH_ALEN];	/* dst mac addr      */
7830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			unsigned char atm_addr[ATM_ESA_LEN];	/* reqestor ATM addr */
7930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		} proxy;	/*
8030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng				 * For mapping LE_ARP requests to responses. Filled by
8130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng				 * zeppelin, returned by kernel. Used only when proxying
8230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng				 */
8330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	} content;
8430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __ATM_API_ALIGN;
8530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
8630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct atmlec_ioc {
8730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int dev_num;
8830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char atm_addr[ATM_ESA_LEN];
8930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char receive;	/* 1= receive vcc, 0 = send vcc */
9030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
9130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif /* _ATMLEC_H_ */
92