Browse Source

bluez-hcidump: fix compilation and bugs by incorporating upstream patches

stable/0.2
Christian Wiese 14 years ago
parent
commit
d6f86efa9e
  1. 54
      network/bluez-hcidump/0001-Fix-time-intervals-dumping-of-LE-commands.patch
  2. 50
      network/bluez-hcidump/0002-Add-missing-const-to-utility-functions.patch
  3. 49
      network/bluez-hcidump/0003-Add-check-for-ACL_START_NO_FLUSH.patch
  4. 231
      network/bluez-hcidump/0004-Fix-HCI-LE-advertising-report-dump.patch
  5. 57
      network/bluez-hcidump/0005-Fix-compilation-against-latest-BlueZ.patch
  6. 48
      network/bluez-hcidump/0006-hcidump-use-correct-size-to-copy-direction-value.patch

54
network/bluez-hcidump/0001-Fix-time-intervals-dumping-of-LE-commands.patch

@ -0,0 +1,54 @@
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
#
# Filename: package/.../bluez-hcidump/0001-Fix-time-intervals-dumping-of-LE-commands.patch
# Copyright (C) 2011 The OpenSDE Project
#
# More information can be found in the files COPYING and README.
#
# This patch file is dual-licensed. It is available under the license the
# patched project is licensed under, as long as it is an OpenSource license
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
# of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
# --- SDE-COPYRIGHT-NOTE-END ---
From 4299bde37959993cdc81a6e55a2969c8542391e1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Dieb=20Martins?= <andre.dieb@signove.com>
Date: Mon, 24 Jan 2011 16:32:38 -0300
Subject: [PATCH 1/6] Fix time intervals dumping of LE commands.
Add missing btohs() convertions and spec. constants for converting time
intervals for LE Set Scan Parameters and LE Set Advertising Parameters.
---
parser/hci.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/parser/hci.c b/parser/hci.c
index f9f01c9..8299403 100644
--- a/parser/hci.c
+++ b/parser/hci.c
@@ -1582,7 +1582,8 @@ static inline void le_set_advertising_parameters_dump(int level, struct frame *f
le_set_advertising_parameters_cp *cp = frm->ptr;
p_indent(level, frm);
- printf("min 0x%04xms max 0x%04xms\n", cp->min_interval, cp->max_interval);
+ printf("min %.3fms, max %.3fms\n", btohs(cp->min_interval) * 0.625,
+ btohs(cp->max_interval) * 0.625);
p_indent(level, frm);
printf("type 0x%02x (%s) ownbdaddr 0x%02x (%s)\n", cp->advtype,
@@ -1608,7 +1609,8 @@ static inline void le_set_scan_parameters_dump(int level, struct frame *frm)
cp->type == 0x00 ? "passive" : "active");
p_indent(level, frm);
- printf("interval %04xms window %04xms\n", cp->interval, cp->window);
+ printf("interval %.3fms window %.3fms\n", btohs(cp->interval) * 0.625,
+ btohs(cp->window) * 0.625);
p_indent(level, frm);
printf("own address: 0x%02x (%s) policy: %s\n", cp->own_bdaddr_type,
--
1.7.2.3

50
network/bluez-hcidump/0002-Add-missing-const-to-utility-functions.patch

@ -0,0 +1,50 @@
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
#
# Filename: package/.../bluez-hcidump/0002-Add-missing-const-to-utility-functions.patch
# Copyright (C) 2011 The OpenSDE Project
#
# More information can be found in the files COPYING and README.
#
# This patch file is dual-licensed. It is available under the license the
# patched project is licensed under, as long as it is an OpenSource license
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
# of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
# --- SDE-COPYRIGHT-NOTE-END ---
From 54e0c6f46b2a13a66083a98831d515395fb43757 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Dieb=20Martins?= <andre.dieb@signove.com>
Date: Mon, 31 Jan 2011 16:09:32 -0300
Subject: [PATCH 2/6] Add missing const to utility functions
---
parser/hci.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/parser/hci.c b/parser/hci.c
index 8299403..fbbebde 100644
--- a/parser/hci.c
+++ b/parser/hci.c
@@ -704,7 +704,7 @@ static char *authentication2str(uint8_t authentication)
}
}
-static char *eventmask2str(uint8_t mask[8])
+static char *eventmask2str(const uint8_t mask[8])
{
int i;
@@ -733,7 +733,7 @@ static char *eventmask2str(uint8_t mask[8])
}
}
-static char *lefeatures2str(uint8_t features[8])
+static char *lefeatures2str(const uint8_t features[8])
{
if (features[0] & 0x01)
return "Link Layer supports LE Encryption";
--
1.7.2.3

49
network/bluez-hcidump/0003-Add-check-for-ACL_START_NO_FLUSH.patch

@ -0,0 +1,49 @@
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
#
# Filename: package/.../bluez-hcidump/0003-Add-check-for-ACL_START_NO_FLUSH.patch
# Copyright (C) 2011 The OpenSDE Project
#
# More information can be found in the files COPYING and README.
#
# This patch file is dual-licensed. It is available under the license the
# patched project is licensed under, as long as it is an OpenSource license
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
# of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
# --- SDE-COPYRIGHT-NOTE-END ---
From 3b1e22fbe09ec0e3cbdbf535b652148a19369c1c Mon Sep 17 00:00:00 2001
From: Daniel Orstadius <daniel.orstadius@nokia.com>
Date: Thu, 10 Feb 2011 12:34:01 +0200
Subject: [PATCH 3/6] Add check for ACL_START_NO_FLUSH
In addition to ACL_START, hcidump should check for the flag
ACL_START_NO_FLUSH to indicate the start of a frame.
Using '==' instead of '&' for the comparison since
ACL_START_NO_FLUSH is defined to zero.
The flag was introduced in BlueZ commit
2430512c983cad8c20252f1df8f297399993ca3d
---
parser/l2cap.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/parser/l2cap.c b/parser/l2cap.c
index 5c5371f..673aed6 100644
--- a/parser/l2cap.c
+++ b/parser/l2cap.c
@@ -934,7 +934,7 @@ void l2cap_dump(int level, struct frame *frm)
l2cap_hdr *hdr;
uint16_t dlen;
- if (frm->flags & ACL_START) {
+ if ((frm->flags & ACL_START) || frm->flags == ACL_START_NO_FLUSH) {
hdr = frm->ptr;
dlen = btohs(hdr->len);
--
1.7.2.3

231
network/bluez-hcidump/0004-Fix-HCI-LE-advertising-report-dump.patch

@ -0,0 +1,231 @@
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
#
# Filename: package/.../bluez-hcidump/0004-Fix-HCI-LE-advertising-report-dump.patch
# Copyright (C) 2011 The OpenSDE Project
#
# More information can be found in the files COPYING and README.
#
# This patch file is dual-licensed. It is available under the license the
# patched project is licensed under, as long as it is an OpenSource license
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
# of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
# --- SDE-COPYRIGHT-NOTE-END ---
From 70fb86e548eef4d54bb659c76a47c0891ba5f99a Mon Sep 17 00:00:00 2001
From: Andre Dieb Martins <andre.dieb@signove.com>
Date: Mon, 28 Feb 2011 00:58:22 -0300
Subject: [PATCH 4/6] Fix HCI LE advertising report dump
LE advertising report event has only one data block for each report.
Thus, we can't reuse ext_inquiry_response_dump(), which loops over
successive data blocks until reaches a zero-length one.
This commit introduces ext_inquiry_data_dump(), which dumps a frame
containing data formatted according to [Vol 3] Part C, Section 8. This
function is reused by ext_inquiry_response_dump().
Also adds RSSI parsing to each advertising report.
---
parser/hci.c | 146 +++++++++++++++++++++++++++++++++------------------------
1 files changed, 84 insertions(+), 62 deletions(-)
diff --git a/parser/hci.c b/parser/hci.c
index fbbebde..4d9a315 100644
--- a/parser/hci.c
+++ b/parser/hci.c
@@ -757,67 +757,83 @@ static char *filterpolicy2str(uint8_t policy)
}
}
-static inline void ext_inquiry_response_dump(int level, struct frame *frm)
+static inline void ext_inquiry_data_dump(int level, struct frame *frm,
+ uint8_t *data)
{
- void *ptr = frm->ptr;
- uint32_t len = frm->len;
- uint8_t type, length;
+ uint8_t len = data[0];
+ uint8_t type;
char *str;
int i;
- length = get_u8(frm);
+ if (len == 0)
+ return;
- while (length > 0) {
- type = get_u8(frm);
- length--;
+ type = data[1];
+ data += 2;
+ len -= 1;
- switch (type) {
- case 0x01:
- p_indent(level, frm);
- printf("Flags:");
- for (i = 0; i < length; i++)
- printf(" 0x%2.2x", *((uint8_t *) (frm->ptr + i)));
- printf("\n");
- break;
+ switch (type) {
+ case 0x01:
+ p_indent(level, frm);
+ printf("Flags:");
+ for (i = 0; i < len; i++)
+ printf(" 0x%2.2x", data[i]);
+ printf("\n");
+ break;
- case 0x02:
- case 0x03:
- p_indent(level, frm);
- printf("%s service classes:",
- type == 0x02 ? "Shortened" : "Complete");
- for (i = 0; i < length / 2; i++) {
- uint16_t val = btohs(bt_get_unaligned((uint16_t *) (frm->ptr + (i * 2))));
- printf(" 0x%4.4x", val);
- }
- printf("\n");
- break;
+ case 0x02:
+ case 0x03:
+ p_indent(level, frm);
+ printf("%s service classes:",
+ type == 0x02 ? "Shortened" : "Complete");
- case 0x08:
- case 0x09:
- str = malloc(length + 1);
- if (str) {
- snprintf(str, length + 1, "%s", (char *) frm->ptr);
- for (i = 0; i < length; i++)
- if (!isprint(str[i]))
- str[i] = '.';
- p_indent(level, frm);
- printf("%s local name: \'%s\'\n",
- type == 0x08 ? "Shortened" : "Complete", str);
- free(str);
- }
- break;
+ for (i = 0; i < len / 2; i++) {
+ uint16_t val;
- case 0x0a:
- p_indent(level, frm);
- printf("TX power level: %d\n", *((uint8_t *) frm->ptr));
- break;
+ val = btohs(bt_get_unaligned(((uint16_t *) (data + i * 2))));
+ printf(" 0x%4.4x", val);
+ }
+ printf("\n");
+ break;
- default:
+ case 0x08:
+ case 0x09:
+ str = malloc(len + 1);
+ if (str) {
+ snprintf(str, len + 1, "%s", (char *) data);
+ for (i = 0; i < len; i++)
+ if (!isprint(str[i]))
+ str[i] = '.';
p_indent(level, frm);
- printf("Unknown type 0x%02x with %d bytes data\n",
- type, length);
- break;
+ printf("%s local name: \'%s\'\n",
+ type == 0x08 ? "Shortened" : "Complete", str);
+ free(str);
}
+ break;
+
+ case 0x0a:
+ p_indent(level, frm);
+ printf("TX power level: %d\n", *((uint8_t *) data));
+ break;
+
+ default:
+ p_indent(level, frm);
+ printf("Unknown type 0x%02x with %d bytes data\n",
+ type, len);
+ break;
+ }
+}
+
+static inline void ext_inquiry_response_dump(int level, struct frame *frm)
+{
+ void *ptr = frm->ptr;
+ uint32_t len = frm->len;
+ uint8_t length;
+
+ length = get_u8(frm);
+
+ while (length > 0) {
+ ext_inquiry_data_dump(level, frm, frm->ptr);
frm->ptr += length;
frm->len -= length;
@@ -825,8 +841,10 @@ static inline void ext_inquiry_response_dump(int level, struct frame *frm)
length = get_u8(frm);
}
- frm->ptr = ptr + (EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE);
- frm->len = len + (EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE);
+ frm->ptr = ptr +
+ (EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE);
+ frm->len = len +
+ (EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE);
}
static inline void bdaddr_command_dump(int level, struct frame *frm)
@@ -3504,14 +3522,12 @@ static inline void evt_le_conn_complete_dump(int level, struct frame *frm)
static inline void evt_le_advertising_report_dump(int level, struct frame *frm)
{
- uint8_t num = get_u8(frm);
- char addr[18];
- int i;
+ uint8_t num_reports = get_u8(frm);
+ const uint8_t RSSI_SIZE = 1;
- for (i = 0; i < num; i++) {
+ while (num_reports--) {
+ char addr[18];
le_advertising_info *info = frm->ptr;
- void *ptr = frm->ptr;
- uint32_t len = frm->len;
p_ba2str(&info->bdaddr, addr);
@@ -3522,13 +3538,19 @@ static inline void evt_le_advertising_report_dump(int level, struct frame *frm)
printf("bdaddr %s (%s)\n", addr,
bdaddrtype2str(info->bdaddr_type));
- frm->ptr += LE_ADVERTISING_INFO_SIZE;
- frm->len -= LE_ADVERTISING_INFO_SIZE;
+ if (info->length > 0) {
+ ext_inquiry_data_dump(level, frm,
+ ((uint8_t *) &info->length) + 1);
+ }
- ext_inquiry_response_dump(level, frm);
+ frm->ptr += LE_ADVERTISING_INFO_SIZE + info->length;
+ frm->len -= LE_ADVERTISING_INFO_SIZE + info->length;
+
+ p_indent(level, frm);
+ printf("RSSI: %d\n", ((int8_t *) frm->ptr)[frm->len - 1]);
- frm->ptr = ptr + 1;
- frm->len = len - 1;
+ frm->ptr += RSSI_SIZE;
+ frm->len -= RSSI_SIZE;
}
}
--
1.7.2.3

57
network/bluez-hcidump/0005-Fix-compilation-against-latest-BlueZ.patch

@ -0,0 +1,57 @@
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
#
# Filename: package/.../bluez-hcidump/0005-Fix-compilation-against-latest-BlueZ.patch
# Copyright (C) 2011 The OpenSDE Project
#
# More information can be found in the files COPYING and README.
#
# This patch file is dual-licensed. It is available under the license the
# patched project is licensed under, as long as it is an OpenSource license
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
# of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
# --- SDE-COPYRIGHT-NOTE-END ---
From 79a379cf1d576f7dd02c3c9cc25d418d856bf9ad Mon Sep 17 00:00:00 2001
From: Anderson Lizardo <anderson.lizardo@openbossa.org>
Date: Fri, 18 Mar 2011 15:10:19 -0400
Subject: [PATCH 5/6] Fix compilation against latest BlueZ
BlueZ now has ntoh64()/hton64() functions in bluetooth.h, therefore the
hcidump local copy is not necessary.
---
src/hcidump.c | 16 ----------------
1 files changed, 0 insertions(+), 16 deletions(-)
diff --git a/src/hcidump.c b/src/hcidump.c
index b344489..2f406db 100644
--- a/src/hcidump.c
+++ b/src/hcidump.c
@@ -50,22 +50,6 @@
#include "parser/parser.h"
#include "parser/sdp.h"
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-static inline uint64_t ntoh64(uint64_t n)
-{
- uint64_t h;
- uint64_t tmp = ntohl(n & 0x00000000ffffffff);
- h = ntohl(n >> 32);
- h |= tmp << 32;
- return h;
-}
-#elif __BYTE_ORDER == __BIG_ENDIAN
-#define ntoh64(x) (x)
-#else
-#error "Unknown byte order"
-#endif
-#define hton64(x) ntoh64(x)
-
#define SNAP_LEN HCI_MAX_FRAME_SIZE
#define DEFAULT_PORT "10839";
--
1.7.2.3

48
network/bluez-hcidump/0006-hcidump-use-correct-size-to-copy-direction-value.patch

@ -0,0 +1,48 @@
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
#
# Filename: package/.../bluez-hcidump/0006-hcidump-use-correct-size-to-copy-direction-value.patch
# Copyright (C) 2011 The OpenSDE Project
#
# More information can be found in the files COPYING and README.
#
# This patch file is dual-licensed. It is available under the license the
# patched project is licensed under, as long as it is an OpenSource license
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
# of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
# --- SDE-COPYRIGHT-NOTE-END ---
From 4c52001490ef09a95d4521967e89a8ce2801fd30 Mon Sep 17 00:00:00 2001
From: Iain Hibbert <plunky@rya-online.net>
Date: Thu, 14 Apr 2011 10:08:36 +0100
Subject: [PATCH 6/6] hcidump: use correct size to copy 'direction' value
frm.in is stored as an uint8_t, so we cannot copy an int there
directly. use an intermediate variable so that it also works
on big-endian systems.
---
src/hcidump.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/src/hcidump.c b/src/hcidump.c
index 2f406db..a966ab2 100644
--- a/src/hcidump.c
+++ b/src/hcidump.c
@@ -281,9 +281,11 @@ static int process_frames(int dev, int sock, int fd, unsigned long flags)
cmsg = CMSG_FIRSTHDR(&msg);
while (cmsg) {
+ int dir;
switch (cmsg->cmsg_type) {
case HCI_CMSG_DIR:
- memcpy(&frm.in, CMSG_DATA(cmsg), sizeof(int));
+ memcpy(&dir, CMSG_DATA(cmsg), sizeof(int));
+ frm.in = (uint8_t) dir;
break;
case HCI_CMSG_TSTAMP:
memcpy(&frm.ts, CMSG_DATA(cmsg),
--
1.7.2.3
Loading…
Cancel
Save