blob: 476c62d9055cb9596549d58479bcfd1d7c0ec6d1 [file] [log] [blame]
Zach Johnsonfbbd42b2014-08-15 17:00:17 -07001/******************************************************************************
2 *
Jakub Pawlowski5b790fe2017-09-18 09:00:20 -07003 * Copyright 2014 Google, Inc.
Zach Johnsonfbbd42b2014-08-15 17:00:17 -07004 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at:
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 ******************************************************************************/
18
Sharvil Nanavatia7d7eb72014-06-14 23:45:16 -070019#pragma once
20
21#include <stdbool.h>
22
Zach Johnsonfbbd42b2014-08-15 17:00:17 -070023#include "bt_types.h"
Sharvil Nanavatidd28edb2014-07-17 00:53:01 -070024
Sharvil Nanavati06ef2052014-11-06 18:34:06 -080025static const char BTSNOOP_MODULE[] = "btsnoop_module";
26
Zach Johnsonbf8193b2014-09-08 09:56:35 -070027typedef struct btsnoop_t {
Zach Johnsonfbbd42b2014-08-15 17:00:17 -070028 // Capture |packet| and dump it to the btsnoop logs. If |is_received| is
29 // true, the packet is marked as incoming. Otherwise, the packet is marked
30 // as outgoing.
Myles Watson5ff20a22016-10-31 10:53:52 -070031 void (*capture)(const BT_HDR* packet, bool is_received);
Ajay Panicker83036292018-11-16 13:06:47 -080032
33 // Set a L2CAP channel as whitelisted, allowing packets with that L2CAP CID
34 // to show up in the snoop logs.
35 void (*whitelist_l2c_channel)(uint16_t conn_handle, uint16_t local_cid,
36 uint16_t remote_cid);
37
38 // Set a RFCOMM dlci as whitelisted, allowing packets with that RFCOMM CID
39 // to show up in the snoop logs. The local_cid is used to associate it with
40 // its corrisponding ACL connection. The dlci is the channel with direction
41 // so there is no chance of a collision if two services are using the same
42 // channel but in different directions.
43 void (*whitelist_rfc_dlci)(uint16_t local_cid, uint8_t dlci);
44
45 // Indicate that the provided L2CAP channel is being used for RFCOMM.
46 // If packets with the provided L2CAP CID are encountered, they will be
47 // filtered on RFCOMM based on channels provided to |filter_rfc_channel|.
48 void (*add_rfc_l2c_channel)(uint16_t conn_handle, uint16_t local_cid,
49 uint16_t remote_cid);
50
51 // Clear an L2CAP channel from being filtered.
52 void (*clear_l2cap_whitelist)(uint16_t conn_handle, uint16_t local_cid,
53 uint16_t remote_cid);
Zach Johnsonbf8193b2014-09-08 09:56:35 -070054} btsnoop_t;
Zach Johnsonfbbd42b2014-08-15 17:00:17 -070055
Myles Watson5ff20a22016-10-31 10:53:52 -070056const btsnoop_t* btsnoop_get_interface(void);