diff options
Diffstat (limited to 'sysutils/netbt-hcidump/patches/patch-ao')
-rw-r--r-- | sysutils/netbt-hcidump/patches/patch-ao | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/sysutils/netbt-hcidump/patches/patch-ao b/sysutils/netbt-hcidump/patches/patch-ao new file mode 100644 index 00000000000..758ebb9be30 --- /dev/null +++ b/sysutils/netbt-hcidump/patches/patch-ao @@ -0,0 +1,135 @@ +$NetBSD: patch-ao,v 1.4.4.2 2014/12/27 11:59:22 plunky Exp $ + +--- src/hcidump.c.orig 2011-06-13 01:54:33.000000000 +0000 ++++ src/hcidump.c +@@ -50,6 +50,10 @@ + #include "parser/parser.h" + #include "parser/sdp.h" + ++#ifndef AI_ADDRCONFIG ++#define AI_ADDRCONFIG 0 ++#endif ++ + #define SNAP_LEN HCI_MAX_FRAME_SIZE + #define DEFAULT_PORT "10839"; + +@@ -146,7 +150,7 @@ static inline int write_n(int fd, char * + return t; + } + +-static int process_frames(int dev, int sock, int fd, unsigned long flags) ++static int process_frames(char *dev, int sock, int fd, unsigned long flags) + { + struct cmsghdr *cmsg; + struct msghdr msg; +@@ -188,7 +192,7 @@ static int process_frames(int dev, int s + if (dev == HCI_DEV_NONE) + printf("system: "); + else +- printf("device: hci%d ", dev); ++ printf("device: %s ", dev); + + printf("snap_len: %d filter: 0x%lx\n", snap_len, parser.filter); + +@@ -530,10 +534,13 @@ static int open_file(char *file, int mod + return fd; + } + +-static int open_socket(int dev, unsigned long flags) ++static int open_socket(char *dev, unsigned long flags) + { +- struct sockaddr_hci addr; ++ struct sockaddr_bt addr; + struct hci_filter flt; ++#if 1 ++ int sk, opt; ++#else + struct hci_dev_info di; + int sk, dd, opt; + +@@ -559,6 +566,7 @@ static int open_socket(int dev, unsigned + + hci_close_dev(dd); + } ++#endif + + /* Create HCI socket */ + sk = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI); +@@ -574,12 +582,13 @@ static int open_socket(int dev, unsigned + } + + opt = 1; +- if (setsockopt(sk, SOL_HCI, HCI_TIME_STAMP, &opt, sizeof(opt)) < 0) { ++ if (setsockopt(sk, SOL_SOCKET, SO_TIMESTAMP, &opt, sizeof(opt)) < 0) { + perror("Can't enable time stamp"); + return -1; + } + + /* Setup filter */ ++#if 0 + hci_filter_clear(&flt); + hci_filter_all_ptypes(&flt); + hci_filter_all_events(&flt); +@@ -587,13 +596,34 @@ static int open_socket(int dev, unsigned + perror("Can't set filter"); + return -1; + } ++#else ++ memset(&flt, 0xff, sizeof(flt)); ++ if (setsockopt(sk, BTPROTO_HCI, SO_HCI_EVT_FILTER, &flt, sizeof(flt)) < 0) { ++ perror("Can't set event filter"); ++ exit(1); ++ } ++ ++ if (setsockopt(sk, BTPROTO_HCI, SO_HCI_PKT_FILTER, &flt, sizeof(flt)) < 0) { ++ perror("Can't set packet filter"); ++ exit(1); ++ } ++#endif + + /* Bind socket to the HCI device */ + memset(&addr, 0, sizeof(addr)); ++#if 0 + addr.hci_family = AF_BLUETOOTH; + addr.hci_dev = dev; ++#else ++ addr.bt_len = sizeof(addr); ++ addr.bt_family = AF_BLUETOOTH; ++ if (dev != HCI_DEV_NONE && !bt_devaddr(dev, &addr.bt_bdaddr)) { ++ perror("device"); ++ exit(1); ++ } ++#endif + if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) { +- printf("Can't attach to device hci%d. %s(%d)\n", ++ printf("Can't attach to device %s. %s(%d)\n", + dev, strerror(errno), errno); + return -1; + } +@@ -770,7 +800,7 @@ static int wait_connection(char *addr, c + return -1; + } + +-static int run_server(int dev, char *addr, char *port, unsigned long flags) ++static int run_server(char *dev, char *addr, char *port, unsigned long flags) + { + while (1) { + int dd, sk; +@@ -902,7 +932,7 @@ int main(int argc, char *argv[]) + { + unsigned long flags = 0; + unsigned long filter = 0; +- int device = 0; ++ char *device = HCI_DEV_NONE; + int defpsm = 0; + int defcompid = DEFAULT_COMPID; + int opt, pppdump_fd = -1, audio_fd = -1; +@@ -911,7 +941,7 @@ int main(int argc, char *argv[]) + switch(opt) { + case 'i': + if (strcasecmp(optarg, "none") && strcasecmp(optarg, "system")) +- device = atoi(optarg + 3); ++ device = optarg; + else + device = HCI_DEV_NONE; + break; |