| /* |
| * |
| * BlueZ - Bluetooth protocol stack for Linux |
| * |
| * Copyright (C) 2000-2001 Qualcomm Incorporated |
| * Copyright (C) 2002-2003 Maxim Krasnyansky <maxk@qualcomm.com> |
| * Copyright (C) 2002-2004 Marcel Holtmann <marcel@holtmann.org> |
| * |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 as |
| * published by the Free Software Foundation; |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. |
| * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY |
| * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES |
| * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
| * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
| * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| * |
| * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, |
| * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS |
| * SOFTWARE IS DISCLAIMED. |
| * |
| * |
| * $Id$ |
| */ |
| |
| #ifndef __L2CAP_H |
| #define __L2CAP_H |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /* L2CAP defaults */ |
| #define L2CAP_DEFAULT_MTU 672 |
| #define L2CAP_DEFAULT_FLUSH_TO 0xFFFF |
| |
| #define L2CAP_CONN_TIMEOUT (HZ * 40) |
| |
| /* L2CAP socket address */ |
| struct sockaddr_l2 { |
| sa_family_t l2_family; |
| unsigned short l2_psm; |
| bdaddr_t l2_bdaddr; |
| }; |
| |
| /* Socket options */ |
| #define L2CAP_OPTIONS 0x01 |
| struct l2cap_options { |
| uint16_t omtu; |
| uint16_t imtu; |
| uint16_t flush_to; |
| }; |
| |
| #define L2CAP_CONNINFO 0x02 |
| struct l2cap_conninfo { |
| uint16_t hci_handle; |
| }; |
| |
| #define L2CAP_LM 0x03 |
| #define L2CAP_LM_MASTER 0x0001 |
| #define L2CAP_LM_AUTH 0x0002 |
| #define L2CAP_LM_ENCRYPT 0x0004 |
| #define L2CAP_LM_TRUSTED 0x0008 |
| #define L2CAP_LM_RELIABLE 0x0010 |
| |
| #define L2CAP_QOS 0x04 |
| struct l2cap_qos { |
| uint16_t service_type; |
| uint32_t token_rate; |
| uint32_t token_bucket_size; |
| uint32_t peak_bandwidth; |
| uint32_t latency; |
| uint32_t delay_variation; |
| }; |
| |
| #define L2CAP_SERV_NO_TRAFFIC 0x00 |
| #define L2CAP_SERV_BEST_EFFORT 0x01 |
| #define L2CAP_SERV_GUARANTEED 0x02 |
| |
| /* L2CAP command codes */ |
| #define L2CAP_COMMAND_REJ 0x01 |
| #define L2CAP_CONN_REQ 0x02 |
| #define L2CAP_CONN_RSP 0x03 |
| #define L2CAP_CONF_REQ 0x04 |
| #define L2CAP_CONF_RSP 0x05 |
| #define L2CAP_DISCONN_REQ 0x06 |
| #define L2CAP_DISCONN_RSP 0x07 |
| #define L2CAP_ECHO_REQ 0x08 |
| #define L2CAP_ECHO_RSP 0x09 |
| #define L2CAP_INFO_REQ 0x0a |
| #define L2CAP_INFO_RSP 0x0b |
| |
| /* L2CAP structures */ |
| typedef struct { |
| uint16_t len; |
| uint16_t cid; |
| } __attribute__ ((packed)) l2cap_hdr; |
| #define L2CAP_HDR_SIZE 4 |
| |
| typedef struct { |
| uint8_t code; |
| uint8_t ident; |
| uint16_t len; |
| } __attribute__ ((packed)) l2cap_cmd_hdr; |
| #define L2CAP_CMD_HDR_SIZE 4 |
| |
| typedef struct { |
| uint16_t reason; |
| } __attribute__ ((packed)) l2cap_cmd_rej; |
| #define L2CAP_CMD_REJ_SIZE 2 |
| |
| typedef struct { |
| uint16_t psm; |
| uint16_t scid; |
| } __attribute__ ((packed)) l2cap_conn_req; |
| #define L2CAP_CONN_REQ_SIZE 4 |
| |
| typedef struct { |
| uint16_t dcid; |
| uint16_t scid; |
| uint16_t result; |
| uint16_t status; |
| } __attribute__ ((packed)) l2cap_conn_rsp; |
| #define L2CAP_CONN_RSP_SIZE 8 |
| |
| /* connect result */ |
| #define L2CAP_CR_SUCCESS 0x0000 |
| #define L2CAP_CR_PEND 0x0001 |
| #define L2CAP_CR_BAD_PSM 0x0002 |
| #define L2CAP_CR_SEC_BLOCK 0x0003 |
| #define L2CAP_CR_NO_MEM 0x0004 |
| |
| /* connect status */ |
| #define L2CAP_CS_NO_INFO 0x0000 |
| #define L2CAP_CS_AUTHEN_PEND 0x0001 |
| #define L2CAP_CS_AUTHOR_PEND 0x0002 |
| |
| typedef struct { |
| uint16_t dcid; |
| uint16_t flags; |
| uint8_t data[0]; |
| } __attribute__ ((packed)) l2cap_conf_req; |
| #define L2CAP_CONF_REQ_SIZE 4 |
| |
| typedef struct { |
| uint16_t scid; |
| uint16_t flags; |
| uint16_t result; |
| uint8_t data[0]; |
| } __attribute__ ((packed)) l2cap_conf_rsp; |
| #define L2CAP_CONF_RSP_SIZE 6 |
| |
| #define L2CAP_CONF_SUCCESS 0x00 |
| #define L2CAP_CONF_UNACCEPT 0x01 |
| |
| typedef struct { |
| uint8_t type; |
| uint8_t len; |
| uint8_t val[0]; |
| } __attribute__ ((packed)) l2cap_conf_opt; |
| #define L2CAP_CONF_OPT_SIZE 2 |
| |
| #define L2CAP_CONF_MTU 0x01 |
| #define L2CAP_CONF_FLUSH_TO 0x02 |
| #define L2CAP_CONF_QOS 0x03 |
| |
| #define L2CAP_CONF_MAX_SIZE 22 |
| |
| typedef struct { |
| uint16_t dcid; |
| uint16_t scid; |
| } __attribute__ ((packed)) l2cap_disconn_req; |
| #define L2CAP_DISCONN_REQ_SIZE 4 |
| |
| typedef struct { |
| uint16_t dcid; |
| uint16_t scid; |
| } __attribute__ ((packed)) l2cap_disconn_rsp; |
| #define L2CAP_DISCONN_RSP_SIZE 4 |
| |
| typedef struct { |
| uint16_t type; |
| uint8_t data[0]; |
| } __attribute__ ((packed)) l2cap_info_req; |
| #define L2CAP_INFO_REQ_SIZE 2 |
| |
| typedef struct { |
| uint16_t type; |
| uint16_t result; |
| uint8_t data[0]; |
| } __attribute__ ((packed)) l2cap_info_rsp; |
| #define L2CAP_INFO_RSP_SIZE 4 |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* __L2CAP_H */ |