Skip to content

Commit

Permalink
Bluetooth: Send transport open and close monitor events
Browse files Browse the repository at this point in the history
When the core starts or shuts down the actual HCI transport, send a new
monitor event that indicates that this is happening. These new events
correspond to HCI_DEV_OPEN and HCI_DEV_CLOSE events.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
  • Loading branch information
Marcel Holtmann authored and Johan Hedberg committed Oct 5, 2015
1 parent e9ca8bf commit 22db3cb
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 0 deletions.
2 changes: 2 additions & 0 deletions include/net/bluetooth/hci_mon.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ struct hci_mon_hdr {
#define HCI_MON_ACL_RX_PKT 5
#define HCI_MON_SCO_TX_PKT 6
#define HCI_MON_SCO_RX_PKT 7
#define HCI_MON_OPEN_INDEX 8
#define HCI_MON_CLOSE_INDEX 9

struct hci_mon_new_index {
__u8 type;
Expand Down
26 changes: 26 additions & 0 deletions net/bluetooth/hci_sock.c
Original file line number Diff line number Diff line change
Expand Up @@ -329,6 +329,22 @@ static struct sk_buff *create_monitor_event(struct hci_dev *hdev, int event)
opcode = cpu_to_le16(HCI_MON_DEL_INDEX);
break;

case HCI_DEV_OPEN:
skb = bt_skb_alloc(0, GFP_ATOMIC);
if (!skb)
return NULL;

opcode = cpu_to_le16(HCI_MON_OPEN_INDEX);
break;

case HCI_DEV_CLOSE:
skb = bt_skb_alloc(0, GFP_ATOMIC);
if (!skb)
return NULL;

opcode = cpu_to_le16(HCI_MON_CLOSE_INDEX);
break;

default:
return NULL;
}
Expand Down Expand Up @@ -358,6 +374,16 @@ static void send_monitor_replay(struct sock *sk)

if (sock_queue_rcv_skb(sk, skb))
kfree_skb(skb);

if (!test_bit(HCI_RUNNING, &hdev->flags))
continue;

skb = create_monitor_event(hdev, HCI_DEV_OPEN);
if (!skb)
continue;

if (sock_queue_rcv_skb(sk, skb))
kfree_skb(skb);
}

read_unlock(&hci_dev_list_lock);
Expand Down

0 comments on commit 22db3cb

Please sign in to comment.