bnep.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:4k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.   BNEP protocol definition for Linux Bluetooth stack (BlueZ).
  3.   Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
  4.   This program is free software; you can redistribute it and/or modify
  5.   it under the terms of the GNU General Public License, version 2, as
  6.   published by the Free Software Foundation.
  7.   This program is distributed in the hope that it will be useful,
  8.   but WITHOUT ANY WARRANTY; without even the implied warranty of
  9.   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10.   GNU General Public License for more details.
  11.   You should have received a copy of the GNU General Public License
  12.   along with this program; if not, write to the Free Software
  13.   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  14. */
  15. /*
  16.  * $Id: bnep2.h,v 1.9 2002/07/14 07:09:19 maxk Exp $
  17.  */
  18. #ifndef _BNEP_H
  19. #define _BNEP_H
  20. #include <linux/types.h>
  21. #include <net/bluetooth/bluetooth.h>
  22. #include "crc32.h"
  23. // Limits
  24. #define BNEP_MAX_PROTO_FILTERS     5
  25. #define BNEP_MAX_MULTICAST_FILTERS 20
  26. // UUIDs
  27. #define BNEP_BASE_UUID 0x0000000000001000800000805F9B34FB
  28. #define BNEP_UUID16    0x02
  29. #define BNEP_UUID32    0x04
  30. #define BNEP_UUID128   0x16
  31. #define BNEP_SVC_PANU  0x1115
  32. #define BNEP_SVC_NAP   0x1116
  33. #define BNEP_SVC_GN    0x1117
  34. // Packet types
  35. #define BNEP_GENERAL               0x00
  36. #define BNEP_CONTROL               0x01
  37. #define BNEP_COMPRESSED            0x02
  38. #define BNEP_COMPRESSED_SRC_ONLY   0x03
  39. #define BNEP_COMPRESSED_DST_ONLY   0x04
  40. // Control types
  41. #define BNEP_CMD_NOT_UNDERSTOOD    0x00
  42. #define BNEP_SETUP_CONN_REQ        0x01
  43. #define BNEP_SETUP_CONN_RSP        0x02
  44. #define BNEP_FILTER_NET_TYPE_SET   0x03
  45. #define BNEP_FILTER_NET_TYPE_RSP   0x04
  46. #define BNEP_FILTER_MULTI_ADDR_SET 0x05
  47. #define BNEP_FILTER_MULTI_ADDR_RSP 0x06
  48. // Extension types
  49. #define BNEP_EXT_CONTROL           0x00
  50. // Response messages 
  51. #define BNEP_SUCCESS               0x00
  52. #define BNEP_CONN_INVALID_DST      0x01
  53. #define BNEP_CONN_INVALID_SRC      0x02
  54. #define BNEP_CONN_INVALID_SVC      0x03
  55. #define BNEP_CONN_NOT_ALLOWED      0x04
  56. #define BNEP_FILTER_UNSUPPORTED_REQ    0x01
  57. #define BNEP_FILTER_INVALID_RANGE      0x02
  58. #define BNEP_FILTER_INVALID_MCADDR     0x02
  59. #define BNEP_FILTER_LIMIT_REACHED      0x03
  60. #define BNEP_FILTER_DENIED_SECURITY    0x04
  61. // L2CAP settings
  62. #define BNEP_MTU         1691
  63. #define BNEP_PSM  0x0f
  64. #define BNEP_FLUSH_TO    0xffff
  65. #define BNEP_CONNECT_TO  15
  66. #define BNEP_FILTER_TO   15
  67. // Headers 
  68. #define BNEP_TYPE_MASK  0x7f
  69. #define BNEP_EXT_HEADER  0x80
  70. struct bnep_setup_conn_req {
  71. __u8  type;
  72. __u8  ctrl;
  73. __u8  uuid_size;
  74. __u8  service[0];
  75. } __attribute__((packed));
  76. struct bnep_set_filter_req {
  77. __u8  type;
  78. __u8  ctrl;
  79. __u16 len;
  80. __u8  list[0];
  81. } __attribute__((packed));
  82. struct bnep_control_rsp {
  83. __u8  type;
  84. __u8  ctrl;
  85. __u16 resp;
  86. } __attribute__((packed));
  87. struct bnep_ext_hdr {
  88. __u8  type;
  89. __u8  len;
  90. __u8  data[0];
  91. } __attribute__((packed));
  92. // Ioctl interface
  93. #define BNEPCONADD      1
  94. #define BNEPCONDEL      2
  95. #define BNEPGETCONLIST  3
  96. #define BNEPGETCONINFO  4
  97. struct bnep_conadd_req {
  98. int   sock;       // Connected socket
  99. __u32 flags;
  100. __u16 role;
  101. char  device[16]; // Name of the Ethernet device
  102. };
  103. struct bnep_condel_req {
  104. __u32 flags;
  105. __u8  dst[ETH_ALEN];
  106. };
  107. struct bnep_coninfo {
  108. __u32 flags;
  109. __u16 role;
  110. __u16 state;
  111. __u8  dst[ETH_ALEN];
  112. char  device[16];
  113. };
  114. struct bnep_conlist_req {
  115. __u32  cnum;
  116. struct bnep_coninfo *ci;
  117. };
  118. struct bnep_proto_filter {
  119. __u16 start;
  120. __u16 end;
  121. };
  122. int bnep_add_connection(struct bnep_conadd_req *req, struct socket *sock);
  123. int bnep_del_connection(struct bnep_condel_req *req);
  124. int bnep_get_conlist(struct bnep_conlist_req *req);
  125. int bnep_get_coninfo(struct bnep_coninfo *ci);
  126. // BNEP sessions
  127. struct bnep_session {
  128. struct list_head list;
  129. unsigned int  role;
  130.         unsigned long state;
  131.         unsigned long flags;
  132. atomic_t      killed;
  133. struct ethhdr eh;
  134. struct msghdr msg;
  135. struct bnep_proto_filter proto_filter[BNEP_MAX_PROTO_FILTERS];
  136. u64    mc_filter;
  137. struct socket    *sock;
  138. struct net_device dev;
  139. struct net_device_stats stats;
  140. };
  141. int bnep_net_init(struct net_device *dev);
  142. int bnep_sock_init(void);
  143. int bnep_sock_cleanup(void);
  144. static inline int bnep_mc_hash(__u8 *addr)
  145. {
  146.         return (bnep_crc32(~0, addr, ETH_ALEN) >> 26);
  147. }
  148. #endif