From 9910167d1cf90514cdf54e688c080b0fc08aaa26 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Sun, 28 Aug 2016 04:11:24 +0200 Subject: [PATCH] monitor: Close the mgmt channel if control tracing is available --- monitor/control.c | 14 ++++++++++++-- monitor/control.h | 1 + monitor/packet.c | 1 + 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/monitor/control.c b/monitor/control.c index 26aecfdeb..f6b2291de 100644 --- a/monitor/control.c +++ b/monitor/control.c @@ -57,6 +57,7 @@ static struct btsnoop *btsnoop_file = NULL; static bool hcidump_fallback = false; +static int mgmt_control_fd = -1; struct control_data { uint16_t channel; @@ -1043,7 +1044,7 @@ static int open_channel(uint16_t channel) mainloop_add_fd(data->fd, EPOLLIN, data_callback, data, free_data); - return 0; + return data->fd; } static void client_callback(int fd, uint32_t events, void *user_data) @@ -1446,7 +1447,16 @@ int control_tracing(void) return 0; } - open_channel(HCI_CHANNEL_CONTROL); + mgmt_control_fd = open_channel(HCI_CHANNEL_CONTROL); return 0; } + +void control_disable_legacy(void) +{ + if (mgmt_control_fd < 0) + return; + + close(mgmt_control_fd); + mgmt_control_fd = -1; +} diff --git a/monitor/control.h b/monitor/control.h index 55384dbd9..05db635d8 100644 --- a/monitor/control.h +++ b/monitor/control.h @@ -29,5 +29,6 @@ void control_reader(const char *path); void control_server(const char *path); int control_tty(const char *path, unsigned int speed); int control_tracing(void); +void control_disable_legacy(void); void control_message(uint16_t opcode, const void *data, uint16_t size); diff --git a/monitor/packet.c b/monitor/packet.c index 42bcf69a2..e708507b0 100644 --- a/monitor/packet.c +++ b/monitor/packet.c @@ -3894,6 +3894,7 @@ void packet_monitor(struct timeval *tv, struct ucred *cred, data + sizeof(*ul) + ul->ident_len); break; case BTSNOOP_OPCODE_CTRL_OPEN: + control_disable_legacy(); packet_ctrl_open(tv, cred, index, data, size); break; case BTSNOOP_OPCODE_CTRL_CLOSE: -- 2.47.3