/*-
 *
 * ===================================
 * HARP  |  Host ATM Research Platform
 * ===================================
 *
 *
 * This Host ATM Research Platform ("HARP") file (the "Software") is
 * made available by Network Computing Services, Inc. ("NetworkCS")
 * "AS IS".  NetworkCS does not provide maintenance, improvements or
 * support of any kind.
 *
 * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
 * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
 * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
 * In no event shall NetworkCS be responsible for any damages, including
 * but not limited to consequential damages, arising from or relating to
 * any use of the Software or related support.
 *
 * Copyright 1994-1998 Network Computing Services, Inc.
 *
 * Copies of this Software may be made, however, the above copyright
 * notice must be reproduced on all copies.
 *
 *	@(#) $FreeBSD: src/sys/netatm/atm.h,v 1.6 2005/01/07 01:45:36 imp Exp $
 *
 */

/*
 * Core ATM Services
 * -----------------
 *
 * ATM address family definitions
 *
 */

#ifndef _NETATM_ATM_H
#define _NETATM_ATM_H


/*
 * The definitions in this file are intended to conform to the 
 * specifications defined in:
 *
 *	The Open Group, Networking Services (XNS) Issue 5
 *
 *	ATM Transport Protocol Information for Sockets
 *
 * which is Copyright (c) 1997, The Open Group.
 *
 * All extensions contained in this file to the base specification 
 * are denoted with a comment string of "XNS_EXT".
 */

/*
 * ATM socket protocols
 */
#define	ATM_PROTO_AAL5		0x5301	/* AAL type 5 protocol */
#define	ATM_PROTO_SSCOP		0x5302	/* SSCOP protocol      */


/*
 * ATM address defintions
 */
/*
 * General format of an ATM address
 */
#define	ATM_ADDR_LEN	20		/* Size of address field (XNS_EXT) */

struct t_atm_addr {
	int8_t		address_format;	/* Address format (see below) */
	u_int8_t	address_length;	/* Length of address field */
	u_int8_t	address[ATM_ADDR_LEN];	/* Address field */
};
typedef struct t_atm_addr	Atm_addr;	/* XNS_EXT */

/*
 * ATM address formats
 */
#define	T_ATM_ABSENT		(-1)	/* No address present */
#define	T_ATM_ENDSYS_ADDR	1	/* ATM Endsystem */
#define	T_ATM_NSAP_ADDR		1	/* NSAP */
#define	T_ATM_E164_ADDR		2	/* E.164 */
#define	T_ATM_SPANS_ADDR	3	/* FORE SPANS (XNS_EXT) */
#define	T_ATM_PVC_ADDR		4	/* PVC (VPI,VCI) (XNS_EXT) */

/*
 * ATM Endsystem / NSAP address format
 */
struct atm_addr_nsap {			/* XNS_EXT */
	u_char		aan_afi;	/* Authority and Format Identifier */
					/* (see below) */
	u_char		aan_afspec[12];	/* AFI specific fields */
	u_char		aan_esi[6];	/* End System Identifier */
	u_char		aan_sel;	/* Selector */
};
typedef struct atm_addr_nsap	Atm_addr_nsap;

/*
 * AFI codes
 */
#define	AFI_DCC		0x39		/* DCC ATM Format (XNS_EXT) */
#define	AFI_ICD		0x47		/* ICD ATM Format (XNS_EXT) */
#define	AFI_E164	0x45		/* E.164 ATM Format (XNS_EXT) */

/*
 * E.164 address format
 */
struct atm_addr_e164 {			/* XNS_EXT */
	u_char		aae_addr[15];	/* E.164 address */
};
typedef struct atm_addr_e164	Atm_addr_e164;

/*
 * SPANS address format
 */
struct atm_addr_spans {			/* XNS_EXT */
	u_char		aas_addr[8];	/* See SPANS code for specific fields */
};
typedef struct atm_addr_spans	Atm_addr_spans;

/*
 * PVC address format
 */
struct atm_addr_pvc {			/* XNS_EXT */
	u_int8_t	aap_vpi[2];	/* VPI */
	u_int8_t	aap_vci[2];	/* VCI */
};
typedef struct atm_addr_pvc	Atm_addr_pvc;

#define	ATM_PVC_GET_VPI(addr)		/* XNS_EXT */		\
	((u_int16_t)(((addr)->aap_vpi[0] << 8) | (addr)->aap_vpi[1]))
#define	ATM_PVC_GET_VCI(addr)		/* XNS_EXT */		\
	((u_int16_t)(((addr)->aap_vci[0] << 8) | (addr)->aap_vci[1]))
#define	ATM_PVC_SET_VPI(addr,vpi) {	/* XNS_EXT */		\
	(addr)->aap_vpi[0] = ((vpi) >> 8) & 0xff;		\
	(addr)->aap_vpi[1] = (vpi) & 0xff;			\
}
#define	ATM_PVC_SET_VCI(addr,vci) {	/* XNS_EXT */		\
	(addr)->aap_vci[0] = ((vci) >> 8) & 0xff;		\
	(addr)->aap_vci[1] = (vci) & 0xff;			\
}


/*
 * ATM service access point (SAP)
 *
 * A SAP address consists of SAP Vector Elements (SVE).  Each SVE consists 
 * of the following fields:
 * 	o tag - defines the interpretation of the SVE;
 * 	o length - the length of the SVE value field;
 * 	o value - the value associated with the SVE;
 *
 * All of the possible SAP field values are either defined below
 * or in the corresponding option value definitions.
 */

/*
 * ATM Address and Selector SVE
 */
struct t_atm_sap_addr {
	int8_t		SVE_tag_addr;	/* SVE tag (address) */
	int8_t		SVE_tag_selector; /* SVE tag (selector) */
					/* Address/selector value */
	int8_t		address_format;	/* Address format */
	u_int8_t	address_length;	/* Length of address field */
	u_int8_t	address[ATM_ADDR_LEN];	/* Address field */
};

/*
 * B-LLI Layer 2 SVE
 */
struct t_atm_sap_layer2 {
	int8_t		SVE_tag;	/* SVE tag */
	u_int8_t	ID_type;	/* Layer 2 protocol discriminator */
	union {				/* Layer 2 protocol */
		u_int8_t	simple_ID;	/* ITU */
		u_int8_t	user_defined_ID;/* User-defined */
	} ID;
};

/*
 * B-LLI Layer 3 SVE
 */
struct t_atm_sap_layer3 {
	int8_t		SVE_tag;	/* SVE tag */
	u_int8_t	ID_type;	/* Layer 3 protocol discriminator */
	union {				/* Layer 3 protocol */
		u_int8_t	simple_ID;	/* ITU */
		u_int8_t	IPI_ID;		/* ISO IPI */
		struct {			/* IEEE 802.1 SNAP ID */
			u_int8_t	OUI[3];
			u_int8_t	PID[2];
		} SNAP_ID;
		u_int8_t	user_defined_ID;/* User-defined */
	} ID;
};

/*
 * B_HLI SVE
 */
struct t_atm_sap_appl {
	int8_t		SVE_tag;	/* SVE tag */
	u_int8_t	ID_type;	/* High Layer type discriminator */
	union {				/* High Layer type */
		u_int8_t	ISO_ID[8];	/* ISO */
		struct {			/* Vendor-specific */
			u_int8_t	OUI[3];
			u_int8_t	app_ID[4];
		} vendor_ID;
		u_int8_t	user_defined_ID[8];/* User-defined */
	} ID;
};

/*
 * ATM SAP (protocol) address structure
 */
struct t_atm_sap {
	struct t_atm_sap_addr		t_atm_sap_addr;
	struct t_atm_sap_layer2		t_atm_sap_layer2;
	struct t_atm_sap_layer3		t_atm_sap_layer3;
	struct t_atm_sap_appl		t_atm_sap_appl;
};

/*
 * SVE Tag values
 */
#define	T_ATM_ABSENT		(-1)	/* Value field invalid; match none */
#define	T_ATM_PRESENT		(-2)	/* Value field valid; match value */
#define	T_ATM_ANY		(-3)	/* Value field invalid; match any */


/*
 * ATM socket address
 */
struct sockaddr_atm {			/* XNS_EXT */
	u_char		satm_len;	/* Length of socket structure */
	u_char		satm_family;	/* Address family */
	struct t_atm_sap	satm_addr;	/* Protocol address */
};


/*
 * ATM socket options for use with [gs]etsockopt()
 */
#define	T_ATM_SIGNALING		0x5301	/* Option level */

#define	T_ATM_AAL5		1	/* ATM adaptation layer 5      */
#define	T_ATM_TRAFFIC		2	/* ATM traffic descriptor      */
#define	T_ATM_BEARER_CAP	3	/* ATM service capabilities    */
#define	T_ATM_BHLI		4	/* Higher-layer protocol       */
#define	T_ATM_BLLI		5	/* Lower-layer protocol        */
#define	T_ATM_DEST_ADDR		6	/* Call responder's address    */
#define	T_ATM_DEST_SUB		7	/* Call responder's subaddress */
#define	T_ATM_ORIG_ADDR		8	/* Call initiator's address    */
#define	T_ATM_ORIG_SUB		9	/* Call initiator's subaddress */
#define	T_ATM_CALLER_ID		10	/* Caller's ID attributes      */
#define	T_ATM_CAUSE		11	/* Cause of disconection       */
#define	T_ATM_QOS		12	/* Quality of service          */
#define	T_ATM_TRANSIT		13	/* Choice of public carrier    */
#define	T_ATM_ADD_LEAF		14	/* Add leaf to connection      */
#define	T_ATM_DROP_LEAF		15	/* Remove leaf from connection */
#define	T_ATM_LEAF_IND		16	/* Indication of leaf status   */
#define	T_ATM_NET_INTF		17	/* Network interface XNS_EXT   */
#define	T_ATM_LLC		18	/* LLC multiplexing XNS_EXT    */
#define	T_ATM_APP_NAME		19	/* Application name XNS_EXT    */


/*
 * Common socket option values
 *
 * See API specification for individual option applicability/meaning
 */
#define	T_ATM_ABSENT		(-1)	/* No option value present */
#define	T_ATM_NULL		0	/* Option value is null */
#define	T_NO			0	/* Option is not requested */
#define	T_YES			1	/* Option is requested */


/*
 * T_ATM_AAL5 option value structure
 */
struct t_atm_aal5 {
	int32_t		forward_max_SDU_size;
	int32_t		backward_max_SDU_size;
	int32_t		SSCS_type;
};

/*
 * T_ATM_AAL5 option values
 */
		/* SSCS_type */
#define	T_ATM_SSCS_SSCOP_REL	1	/* SSCOP assured operation */
#define	T_ATM_SSCS_SSCOP_UNREL	2	/* SSCOP non-assured operation */
#define	T_ATM_SSCS_FR		4	/* Frame relay */


/*
 * T_ATM_TRAFFIC option value structure
 */
struct t_atm_traffic_substruct {
	int32_t		PCR_high_priority;
	int32_t		PCR_all_traffic;
	int32_t		SCR_high_priority;
	int32_t		SCR_all_traffic;
	int32_t		MBS_high_priority;
	int32_t		MBS_all_traffic;
	int32_t		tagging;
};

struct t_atm_traffic {
	struct t_atm_traffic_substruct	forward;
	struct t_atm_traffic_substruct	backward;
	u_int8_t	best_effort;
};


/*
 * T_ATM_BEARER_CAP option value structure
 */
struct t_atm_bearer {
	u_int8_t	bearer_class;
	u_int8_t	traffic_type;
	u_int8_t	timing_requirements;
	u_int8_t	clipping_susceptibility;
	u_int8_t	connection_configuration;
};

/*
 * T_ATM_BEARER_CAP option values
 */
		/* bearer_class */
#define	T_ATM_CLASS_A		0x01	/* Bearer class A                 */
#define	T_ATM_CLASS_C		0x03	/* Bearer class C                 */
#define	T_ATM_CLASS_X		0x10	/* Bearer class X                 */

		/* traffic_type */
#define	T_ATM_CBR		0x01	/* Constant bit rate              */
#define	T_ATM_VBR		0x02	/* Variable bit rate              */
#define	T_ATM_ABR		0x03	/* Available Bit Rate		  */
#define	T_ATM_UBR		0x04	/* Unspecified bit rate		  */

		/* timing_requirements */
#define	T_ATM_END_TO_END	0x01	/* End-to-end timing required     */
#define	T_ATM_NO_END_TO_END	0x02	/* End-to-end timing not required */

		/* connection_configuration */
#define	T_ATM_1_TO_1		0x00	/* Point-to-point connection      */
#define	T_ATM_1_TO_MANY		0x01	/* Point-to-multipoint connection */


/*
 * T_ATM_BHLI option value structure
 */
struct t_atm_bhli {
	int32_t		ID_type;
	union {
		u_int8_t	ISO_ID[8];
		struct {
			u_int8_t	OUI[3];
			u_int8_t	app_ID[4];
		} vendor_ID;
		u_int8_t	user_defined_ID[8];
	} ID;
};

/*
 * T_ATM_BHLI option values
 */
		/* ID_type */
#define	T_ATM_ISO_APP_ID	0	/* ISO codepoint             */
#define	T_ATM_USER_APP_ID	1	/* User-specific codepoint   */
#define	T_ATM_VENDOR_APP_ID	3	/* Vendor-specific codepoint */

/*
 * T_ATM_BLLI option value structure
 */
struct t_atm_blli {
	struct {
		int8_t		ID_type;
		union {
			u_int8_t	simple_ID;
			u_int8_t	user_defined_ID;
		} ID;
		int8_t		mode;
		int8_t		window_size;
	} layer_2_protocol;
	struct {
		int8_t		ID_type;
		union {
			u_int8_t	simple_ID;
			int32_t		IPI_ID;
			struct {
				u_int8_t	OUI[3];
				u_int8_t	PID[2];
			} SNAP_ID;
			u_int8_t	user_defined_ID;
		} ID;
		int8_t		mode;
		int8_t		packet_size;
		int8_t		window_size;
	} layer_3_protocol;
};


/*
 * T_ATM_BLLI option values
 */
		/* layer_[23]_protocol.ID_type */
#define	T_ATM_SIMPLE_ID		1	/* ID via ITU encoding    */
#define	T_ATM_IPI_ID		2	/* ID via ISO/IEC TR 9577 */
#define	T_ATM_SNAP_ID		3	/* ID via SNAP            */
#define	T_ATM_USER_ID		4	/* ID via user codepoints */

		/* layer_[23]_protocol.mode */
#define	T_ATM_BLLI_NORMAL_MODE	1
#define	T_ATM_BLLI_EXTENDED_MODE	2

		/* layer_2_protocol.simple_ID */
#define	T_ATM_BLLI2_I1745	1	/* I.1745           */
#define	T_ATM_BLLI2_Q921	2	/* Q.921            */
#define	T_ATM_BLLI2_X25_LINK	6	/* X.25, link layer */
#define	T_ATM_BLLI2_X25_MLINK	7	/* X.25, multilink  */
#define	T_ATM_BLLI2_LAPB	8	/* Extended LAPB    */
#define	T_ATM_BLLI2_HDLC_ARM	9	/* I.4335, ARM      */
#define	T_ATM_BLLI2_HDLC_NRM	10	/* I.4335, NRM      */
#define	T_ATM_BLLI2_HDLC_ABM	11	/* I.4335, ABM      */
#define	T_ATM_BLLI2_I8802	12	/* I.8802           */
#define	T_ATM_BLLI2_X75		13	/* X.75             */
#define	T_ATM_BLLI2_Q922	14	/* Q.922            */
#define	T_ATM_BLLI2_I7776	17	/* I.7776           */

		/* layer_3_protocol.simple_ID */
#define	T_ATM_BLLI3_X25		6	/* X.25             */
#define	T_ATM_BLLI3_I8208	7	/* I.8208           */
#define	T_ATM_BLLI3_X223	8	/* X.223            */
#define	T_ATM_BLLI3_I8473	9	/* I.8473           */
#define	T_ATM_BLLI3_T70		10	/* T.70             */
#define	T_ATM_BLLI3_I9577	11	/* I.9577           */

		/* layer_3_protocol.packet_size */
#define	T_ATM_PACKET_SIZE_16	4
#define	T_ATM_PACKET_SIZE_32	5
#define	T_ATM_PACKET_SIZE_64	6
#define	T_ATM_PACKET_SIZE_128	7
#define	T_ATM_PACKET_SIZE_256	8
#define	T_ATM_PACKET_SIZE_512	9
#define	T_ATM_PACKET_SIZE_1024	10
#define	T_ATM_PACKET_SIZE_2048	11
#define	T_ATM_PACKET_SIZE_4096	12


/*
 * T_ATM_CALLER_ID option value structure
 */
struct t_atm_caller_id {
	int8_t		presentation;
	u_int8_t	screening;
};

/*
 * T_ATM_CALLER_ID option values
 */
		/* presentation */
#define	T_ATM_PRES_ALLOWED		0
#define	T_ATM_PRES_RESTRICTED		1
#define	T_ATM_PRES_UNAVAILABLE		2
		/* screening */
#define	T_ATM_USER_ID_NOT_SCREENED	0
#define	T_ATM_USER_ID_PASSED_SCREEN	1
#define	T_ATM_USER_ID_FAILED_SCREEN	2
#define	T_ATM_NETWORK_PROVIDED_ID	3


/*
 * T_ATM_CAUSE option value structure
 */
struct t_atm_cause {
	int8_t		coding_standard;
	u_int8_t	location;
	u_int8_t	cause_value;
	u_int8_t	diagnostics[4];
};

/*
 * T_ATM_CAUSE option values
 */
		/* coding_standard */
#define	T_ATM_ITU_CODING		0
#define	T_ATM_NETWORK_CODING		3

		/* location */
#define	T_ATM_LOC_USER			0
#define	T_ATM_LOC_LOCAL_PRIVATE_NET	1
#define	T_ATM_LOC_LOCAL_PUBLIC_NET	2
#define	T_ATM_LOC_TRANSIT_NET		3
#define	T_ATM_LOC_REMOTE_PUBLIC_NET	4
#define	T_ATM_LOC_REMOTE_PRIVATE_NET	5
#define	T_ATM_LOC_INTERNATIONAL_NET	7
#define	T_ATM_LOC_BEYOND_INTERWORKING	10

		/* cause_value */
#define	T_ATM_CAUSE_UNALLOCATED_NUMBER				1
#define	T_ATM_CAUSE_NO_ROUTE_TO_TRANSIT_NETWORK			2
#define	T_ATM_CAUSE_NO_ROUTE_TO_DESTINATION			3
#define	T_ATM_CAUSE_NORMAL_CALL_CLEARING			16
#define	T_ATM_CAUSE_USER_BUSY					17
#define	T_ATM_CAUSE_NO_USER_RESPONDING				18
#define	T_ATM_CAUSE_CALL_REJECTED				21
#define	T_ATM_CAUSE_NUMBER_CHANGED				22
#define	T_ATM_CAUSE_ALL_CALLS_WITHOUT_CALLER_ID_REJECTED	23
#define	T_ATM_CAUSE_DESTINATION_OUT_OF_ORDER			27
#define	T_ATM_CAUSE_INVALID_NUMBER_FORMAT			28
#define	T_ATM_CAUSE_RESPONSE_TO_STATUS_ENQUIRY			30
#define	T_ATM_CAUSE_UNSPECIFIED_NORMAL				31
#define	T_ATM_CAUSE_REQUESTED_VPCI_VCI_NOT_AVAILABLE		35
#define	T_ATM_CAUSE_VPCI_VCI_ASSIGNMENT_FAILURE			36
#define	T_ATM_CAUSE_USER_CELL_RATE_NOT_AVAILABLE		37
#define	T_ATM_CAUSE_NETWORK_OUT_OF_ORDER			38
#define	T_ATM_CAUSE_TEMPORARY_FAILURE				41
#define	T_ATM_CAUSE_ACCESS_INFO_DISCARDED			43
#define	T_ATM_CAUSE_NO_VPCI_VCI_AVAILABLE			45
#define	T_ATM_CAUSE_UNSPECIFIED_RESOURCE_UNAVAILABLE		47
#define	T_ATM_CAUSE_QUALITY_OF_SERVICE_UNAVAILABLE		49
#define	T_ATM_CAUSE_BEARER_CAPABILITY_NOT_AUTHORIZED		57
#define	T_ATM_CAUSE_BEARER_CAPABILITY_UNAVAILABLE		58
#define	T_ATM_CAUSE_SERVICE_OR_OPTION_UNAVAILABLE		63
#define	T_ATM_CAUSE_BEARER_CAPABILITY_NOT_IMPLEMENTED		65
#define	T_ATM_CAUSE_INVALID_TRAFFIC_PARAMETERS			73
#define	T_ATM_CAUSE_AAL_PARAMETERS_NOT_SUPPORTED		78
#define	T_ATM_CAUSE_INVALID_CALL_REFERENCE_VALUE		81
#define	T_ATM_CAUSE_IDENTIFIED_CHANNEL_DOES_NOT_EXIST		82
#define	T_ATM_CAUSE_INCOMPATIBLE_DESTINATION			88
#define	T_ATM_CAUSE_INVALID_ENDPOINT_REFERENCE			89
#define	T_ATM_CAUSE_INVALID_TRANSIT_NETWORK_SELECTION		91
#define	T_ATM_CAUSE_TOO_MANY_PENDING_ADD_PARTY_REQUESTS		92
#define	T_ATM_CAUSE_MANDITORY_INFO_ELEMENT_MISSING		96
#define	T_ATM_CAUSE_MESSAGE_TYPE_NOT_IMPLEMENTED		97
#define	T_ATM_CAUSE_INFO_ELEMENT_NOT_IMPLEMENTED		99
#define	T_ATM_CAUSE_INVALID_INFO_ELEMENT_CONTENTS		100
#define	T_ATM_CAUSE_MESSAGE_INCOMPATIBLE_WITH_CALL_STATE	101
#define	T_ATM_CAUSE_RECOVERY_ON_TIMER_EXPIRY			102
#define	T_ATM_CAUSE_INCORRECT_MESSAGE_LENGTH			104
#define	T_ATM_CAUSE_UNSPECIFIED_PROTOCOL_ERROR			111


/*
 * T_ATM_QOS option value structure
 */
struct t_atm_qos_substruct {
	int32_t		qos_class;
};

struct t_atm_qos {
	int8_t		coding_standard;
	struct t_atm_qos_substruct	forward;
	struct t_atm_qos_substruct	backward;
};

/*
 * T_ATM_QOS option values
 */
		/* qos_class */
#define	T_ATM_QOS_CLASS_0	0
#define	T_ATM_QOS_CLASS_1	1
#define	T_ATM_QOS_CLASS_2	2
#define	T_ATM_QOS_CLASS_3	3
#define	T_ATM_QOS_CLASS_4	4


/*
 * T_ATM_TRANSIT structure
 */
#define	T_ATM_MAX_NET_ID	4		/* XNS_EXT */
struct t_atm_transit {
	u_int8_t	length;
	u_int8_t	network_id[T_ATM_MAX_NET_ID];
};


/*
 * T_ATM_ADD_LEAF option value structure
 */
struct t_atm_add_leaf {
	int32_t		leaf_ID;
	struct t_atm_addr	leaf_address;
};


/*
 * T_ATM_DROP_LEAF option value structure
 */
struct t_atm_drop_leaf {
	int32_t		leaf_ID;
	int32_t		reason;
};

/*
 * T_ATM_LEAF_IND option value structure
 */
struct t_atm_leaf_ind {
	int32_t		status;
	int32_t		leaf_ID;
	int32_t		reason;
};

/*
 * T_ATM_LEAF_IND option values
 */
		/* status */
#define	T_LEAF_NOCHANGE		0
#define	T_LEAF_CONNECTED	1
#define	T_LEAF_DISCONNECTED	2

/*
 * T_ATM_NET_INTF option value structure	(XNS_EXT)
 */
struct t_atm_net_intf {				/* XNS_EXT */
	char		net_intf[IFNAMSIZ];
};

/*
 * T_ATM_LLC option value structure		(XNS_EXT)
 */
#define	T_ATM_LLC_MIN_LEN	3
#define	T_ATM_LLC_MAX_LEN	8

struct t_atm_llc {				/* XNS_EXT */
	u_int8_t	flags;			/* LLC flags (see below) */
	u_int8_t	llc_len;		/* Length of LLC information */
	u_int8_t	llc_info[T_ATM_LLC_MAX_LEN];	/* LLC information */
};

/*
 * T_ATM_LLC option values
 */
		/* flags */
#define	T_ATM_LLC_SHARING	0x01		/* LLC sharing allowed */

/*
 * T_ATM_APP_NAME option value structure	(XNS_EXT)
 */
#define	T_ATM_APP_NAME_LEN	8
struct t_atm_app_name {				/* XNS_EXT */
	char		app_name[T_ATM_APP_NAME_LEN];
};

#endif	/* _NETATM_ATM_H */
