aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap
diff options
context:
space:
mode:
Diffstat (limited to 'wiretap')
-rw-r--r--wiretap/btsnoop.c22
-rw-r--r--wiretap/wtap.c4
-rw-r--r--wiretap/wtap.h12
3 files changed, 25 insertions, 13 deletions
diff --git a/wiretap/btsnoop.c b/wiretap/btsnoop.c
index 69aaf1d108..9fc2cb06f4 100644
--- a/wiretap/btsnoop.c
+++ b/wiretap/btsnoop.c
@@ -63,8 +63,8 @@ struct btsnooprec_hdr {
#define KHciLoggerDatalinkTypeBCSP 1003
/* H5 is the official three wire serial protocol derived from BCSP*/
#define KHciLoggerDatalinkTypeH5 1004
-/* BlueZ 5 Monitor */
-#define KHciLoggerDatalinkBlueZ5Monitor 2001
+/* Linux Monitor */
+#define KHciLoggerDatalinkLinuxMonitor 2001
/* BlueZ 5 Simulator */
#define KHciLoggerDatalinkBlueZ5Simulator 2002
@@ -140,10 +140,9 @@ int btsnoop_open(wtap *wth, int *err, gchar **err_info)
*err = WTAP_ERR_UNSUPPORTED;
*err_info = g_strdup_printf("btsnoop: H5 capture logs unsupported");
return -1;
- case KHciLoggerDatalinkBlueZ5Monitor:
- *err = WTAP_ERR_UNSUPPORTED;
- *err_info = g_strdup_printf("btsnoop: BlueZ 5 Monitor capture logs unsupported");
- return -1;
+ case KHciLoggerDatalinkLinuxMonitor:
+ file_encap=WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR;
+ break;
case KHciLoggerDatalinkBlueZ5Simulator:
*err = WTAP_ERR_UNSUPPORTED;
*err_info = g_strdup_printf("btsnoop: BlueZ 5 Simulator capture logs unsupported");
@@ -227,9 +226,7 @@ static gboolean btsnoop_read_record(wtap *wth, FILE_T fh,
if(wth->file_encap == WTAP_ENCAP_BLUETOOTH_H4_WITH_PHDR)
{
phdr->pseudo_header.p2p.sent = (flags & KHciLoggerControllerToHost) ? FALSE : TRUE;
- }
- else if(wth->file_encap == WTAP_ENCAP_BLUETOOTH_HCI)
- {
+ } else if(wth->file_encap == WTAP_ENCAP_BLUETOOTH_HCI) {
phdr->pseudo_header.bthci.sent = (flags & KHciLoggerControllerToHost) ? FALSE : TRUE;
if(flags & KHciLoggerCommandOrEvent)
{
@@ -246,6 +243,9 @@ static gboolean btsnoop_read_record(wtap *wth, FILE_T fh,
{
phdr->pseudo_header.bthci.channel = BTHCI_CHANNEL_ACL;
}
+ } else if (wth->file_encap == WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR) {
+ phdr->pseudo_header.btmon.opcode = flags & 0xFFFF;
+ phdr->pseudo_header.btmon.adapter_id = flags >> 16;
}
@@ -261,8 +261,8 @@ int btsnoop_dump_can_write_encap(int encap)
if (encap == WTAP_ENCAP_PER_PACKET)
return WTAP_ERR_ENCAP_PER_PACKET_UNSUPPORTED;
- /* XXX - for now we only support WTAP_ENCAP_BLUETOOTH_H4_WITH_PHDR */
- if (encap != WTAP_ENCAP_BLUETOOTH_H4_WITH_PHDR)
+ /* XXX - for now we only support WTAP_ENCAP_BLUETOOTH_H4_WITH_PHDR and WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR */
+ if (encap != WTAP_ENCAP_BLUETOOTH_H4_WITH_PHDR && encap != WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR)
return WTAP_ERR_UNSUPPORTED_ENCAP;
return 0;
diff --git a/wiretap/wtap.c b/wiretap/wtap.c
index 64fbcf8d69..d5b4c89e6d 100644
--- a/wiretap/wtap.c
+++ b/wiretap/wtap.c
@@ -695,6 +695,10 @@ static struct encap_type_info encap_table_base[] = {
/* WTAP_ENCAP_NETLINK */
{ "Netlink", "Linux netlink" },
+
+ /* WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR */
+ { "Bluetooth Linux Monitor", "bluetooth-linux-monitor" },
+
};
WS_DLL_LOCAL
diff --git a/wiretap/wtap.h b/wiretap/wtap.h
index d9dbae6e03..b70c893df7 100644
--- a/wiretap/wtap.h
+++ b/wiretap/wtap.h
@@ -252,6 +252,7 @@ extern "C" {
#define WTAP_ENCAP_STANAG_4607 157
#define WTAP_ENCAP_STANAG_5066_D_PDU 158
#define WTAP_ENCAP_NETLINK 159
+#define WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR 160
/* After adding new item here, please also add new item to encap_table_base array */
#define WTAP_NUM_ENCAP_TYPES wtap_get_num_encap_types()
@@ -804,8 +805,8 @@ struct sita_phdr {
/*pseudo header for Bluetooth HCI*/
struct bthci_phdr {
- gboolean sent;
- guint8 channel;
+ gboolean sent;
+ guint32 channel;
};
#define BTHCI_CHANNEL_COMMAND 1
@@ -813,6 +814,12 @@ struct bthci_phdr {
#define BTHCI_CHANNEL_SCO 3
#define BTHCI_CHANNEL_EVENT 4
+/* pseudo header for WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR */
+struct btmon_phdr {
+ guint16 adapter_id;
+ guint16 opcode;
+};
+
/* pseudo header for WTAP_ENCAP_LAYER1_EVENT */
struct l1event_phdr {
gboolean uton;
@@ -865,6 +872,7 @@ union wtap_pseudo_header {
struct erf_mc_phdr erf;
struct sita_phdr sita;
struct bthci_phdr bthci;
+ struct btmon_phdr btmon;
struct l1event_phdr l1event;
struct i2c_phdr i2c;
struct gsm_um_phdr gsm_um;