| @@ -1,14 +1,14 @@ | | | @@ -1,14 +1,14 @@ |
1 | $NetBSD: patch-ao,v 1.2 2011/01/30 20:41:30 plunky Exp $ | | 1 | $NetBSD: patch-ao,v 1.3 2011/03/20 19:56:48 plunky Exp $ |
2 | | | 2 | |
3 | --- src/hcidump.c.orig 2011-01-27 04:11:41.000000000 +0000 | | 3 | --- src/hcidump.c.orig 2011-01-27 04:11:41.000000000 +0000 |
4 | +++ src/hcidump.c | | 4 | +++ src/hcidump.c |
5 | @@ -50,6 +50,10 @@ | | 5 | @@ -50,6 +50,10 @@ |
6 | #include "parser/parser.h" | | 6 | #include "parser/parser.h" |
7 | #include "parser/sdp.h" | | 7 | #include "parser/sdp.h" |
8 | | | 8 | |
9 | +#ifndef AI_ADDRCONFIG | | 9 | +#ifndef AI_ADDRCONFIG |
10 | +#define AI_ADDRCONFIG 0 | | 10 | +#define AI_ADDRCONFIG 0 |
11 | +#endif | | 11 | +#endif |
12 | + | | 12 | + |
13 | #if __BYTE_ORDER == __LITTLE_ENDIAN | | 13 | #if __BYTE_ORDER == __LITTLE_ENDIAN |
14 | static inline uint64_t ntoh64(uint64_t n) | | 14 | static inline uint64_t ntoh64(uint64_t n) |
| @@ -21,66 +21,76 @@ $NetBSD: patch-ao,v 1.2 2011/01/30 20:41 | | | @@ -21,66 +21,76 @@ $NetBSD: patch-ao,v 1.2 2011/01/30 20:41 |
21 | +static int process_frames(char *dev, int sock, int fd, unsigned long flags) | | 21 | +static int process_frames(char *dev, int sock, int fd, unsigned long flags) |
22 | { | | 22 | { |
23 | struct cmsghdr *cmsg; | | 23 | struct cmsghdr *cmsg; |
24 | struct msghdr msg; | | 24 | struct msghdr msg; |
25 | @@ -204,7 +208,7 @@ static int process_frames(int dev, int s | | 25 | @@ -204,7 +208,7 @@ static int process_frames(int dev, int s |
26 | if (dev == HCI_DEV_NONE) | | 26 | if (dev == HCI_DEV_NONE) |
27 | printf("system: "); | | 27 | printf("system: "); |
28 | else | | 28 | else |
29 | - printf("device: hci%d ", dev); | | 29 | - printf("device: hci%d ", dev); |
30 | + printf("device: %s ", dev); | | 30 | + printf("device: %s ", dev); |
31 | | | 31 | |
32 | printf("snap_len: %d filter: 0x%lx\n", snap_len, parser.filter); | | 32 | printf("snap_len: %d filter: 0x%lx\n", snap_len, parser.filter); |
33 | | | 33 | |
34 | @@ -544,10 +548,13 @@ static int open_file(char *file, int mod | | 34 | @@ -299,7 +303,8 @@ static int process_frames(int dev, int s |
| | | 35 | while (cmsg) { |
| | | 36 | switch (cmsg->cmsg_type) { |
| | | 37 | case HCI_CMSG_DIR: |
| | | 38 | - memcpy(&frm.in, CMSG_DATA(cmsg), sizeof(int)); |
| | | 39 | + memcpy(&i, CMSG_DATA(cmsg), sizeof(int)); |
| | | 40 | + frm.in = (uint8_t)i; |
| | | 41 | break; |
| | | 42 | case HCI_CMSG_TSTAMP: |
| | | 43 | memcpy(&frm.ts, CMSG_DATA(cmsg), |
| | | 44 | @@ -544,10 +549,13 @@ static int open_file(char *file, int mod |
35 | return fd; | | 45 | return fd; |
36 | } | | 46 | } |
37 | | | 47 | |
38 | -static int open_socket(int dev, unsigned long flags) | | 48 | -static int open_socket(int dev, unsigned long flags) |
39 | +static int open_socket(char *dev, unsigned long flags) | | 49 | +static int open_socket(char *dev, unsigned long flags) |
40 | { | | 50 | { |
41 | - struct sockaddr_hci addr; | | 51 | - struct sockaddr_hci addr; |
42 | + struct sockaddr_bt addr; | | 52 | + struct sockaddr_bt addr; |
43 | struct hci_filter flt; | | 53 | struct hci_filter flt; |
44 | +#if 1 | | 54 | +#if 1 |
45 | + int sk, opt; | | 55 | + int sk, opt; |
46 | +#else | | 56 | +#else |
47 | struct hci_dev_info di; | | 57 | struct hci_dev_info di; |
48 | int sk, dd, opt; | | 58 | int sk, dd, opt; |
49 | | | 59 | |
50 | @@ -573,6 +580,7 @@ static int open_socket(int dev, unsigned | | 60 | @@ -573,6 +581,7 @@ static int open_socket(int dev, unsigned |
51 | | | 61 | |
52 | hci_close_dev(dd); | | 62 | hci_close_dev(dd); |
53 | } | | 63 | } |
54 | +#endif | | 64 | +#endif |
55 | | | 65 | |
56 | /* Create HCI socket */ | | 66 | /* Create HCI socket */ |
57 | sk = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI); | | 67 | sk = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI); |
58 | @@ -588,12 +596,13 @@ static int open_socket(int dev, unsigned | | 68 | @@ -588,12 +597,13 @@ static int open_socket(int dev, unsigned |
59 | } | | 69 | } |
60 | | | 70 | |
61 | opt = 1; | | 71 | opt = 1; |
62 | - if (setsockopt(sk, SOL_HCI, HCI_TIME_STAMP, &opt, sizeof(opt)) < 0) { | | 72 | - if (setsockopt(sk, SOL_HCI, HCI_TIME_STAMP, &opt, sizeof(opt)) < 0) { |
63 | + if (setsockopt(sk, SOL_SOCKET, SO_TIMESTAMP, &opt, sizeof(opt)) < 0) { | | 73 | + if (setsockopt(sk, SOL_SOCKET, SO_TIMESTAMP, &opt, sizeof(opt)) < 0) { |
64 | perror("Can't enable time stamp"); | | 74 | perror("Can't enable time stamp"); |
65 | return -1; | | 75 | return -1; |
66 | } | | 76 | } |
67 | | | 77 | |
68 | /* Setup filter */ | | 78 | /* Setup filter */ |
69 | +#if 0 | | 79 | +#if 0 |
70 | hci_filter_clear(&flt); | | 80 | hci_filter_clear(&flt); |
71 | hci_filter_all_ptypes(&flt); | | 81 | hci_filter_all_ptypes(&flt); |
72 | hci_filter_all_events(&flt); | | 82 | hci_filter_all_events(&flt); |
73 | @@ -601,13 +610,34 @@ static int open_socket(int dev, unsigned | | 83 | @@ -601,13 +611,34 @@ static int open_socket(int dev, unsigned |
74 | perror("Can't set filter"); | | 84 | perror("Can't set filter"); |
75 | return -1; | | 85 | return -1; |
76 | } | | 86 | } |
77 | +#else | | 87 | +#else |
78 | + memset(&flt, 0xff, sizeof(flt)); | | 88 | + memset(&flt, 0xff, sizeof(flt)); |
79 | + if (setsockopt(sk, BTPROTO_HCI, SO_HCI_EVT_FILTER, &flt, sizeof(flt)) < 0) { | | 89 | + if (setsockopt(sk, BTPROTO_HCI, SO_HCI_EVT_FILTER, &flt, sizeof(flt)) < 0) { |
80 | + perror("Can't set event filter"); | | 90 | + perror("Can't set event filter"); |
81 | + exit(1); | | 91 | + exit(1); |
82 | + } | | 92 | + } |
83 | + | | 93 | + |
84 | + if (setsockopt(sk, BTPROTO_HCI, SO_HCI_PKT_FILTER, &flt, sizeof(flt)) < 0) { | | 94 | + if (setsockopt(sk, BTPROTO_HCI, SO_HCI_PKT_FILTER, &flt, sizeof(flt)) < 0) { |
85 | + perror("Can't set packet filter"); | | 95 | + perror("Can't set packet filter"); |
86 | + exit(1); | | 96 | + exit(1); |
| @@ -96,40 +106,40 @@ $NetBSD: patch-ao,v 1.2 2011/01/30 20:41 | | | @@ -96,40 +106,40 @@ $NetBSD: patch-ao,v 1.2 2011/01/30 20:41 |
96 | + addr.bt_len = sizeof(addr); | | 106 | + addr.bt_len = sizeof(addr); |
97 | + addr.bt_family = AF_BLUETOOTH; | | 107 | + addr.bt_family = AF_BLUETOOTH; |
98 | + if (dev != HCI_DEV_NONE && !bt_devaddr(dev, &addr.bt_bdaddr)) { | | 108 | + if (dev != HCI_DEV_NONE && !bt_devaddr(dev, &addr.bt_bdaddr)) { |
99 | + perror("device"); | | 109 | + perror("device"); |
100 | + exit(1); | | 110 | + exit(1); |
101 | + } | | 111 | + } |
102 | +#endif | | 112 | +#endif |
103 | if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) { | | 113 | if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) { |
104 | - printf("Can't attach to device hci%d. %s(%d)\n", | | 114 | - printf("Can't attach to device hci%d. %s(%d)\n", |
105 | + printf("Can't attach to device %s. %s(%d)\n", | | 115 | + printf("Can't attach to device %s. %s(%d)\n", |
106 | dev, strerror(errno), errno); | | 116 | dev, strerror(errno), errno); |
107 | return -1; | | 117 | return -1; |
108 | } | | 118 | } |
109 | @@ -784,7 +814,7 @@ static int wait_connection(char *addr, c | | 119 | @@ -784,7 +815,7 @@ static int wait_connection(char *addr, c |
110 | return -1; | | 120 | return -1; |
111 | } | | 121 | } |
112 | | | 122 | |
113 | -static int run_server(int dev, char *addr, char *port, unsigned long flags) | | 123 | -static int run_server(int dev, char *addr, char *port, unsigned long flags) |
114 | +static int run_server(char *dev, char *addr, char *port, unsigned long flags) | | 124 | +static int run_server(char *dev, char *addr, char *port, unsigned long flags) |
115 | { | | 125 | { |
116 | while (1) { | | 126 | while (1) { |
117 | int dd, sk; | | 127 | int dd, sk; |
118 | @@ -914,7 +944,7 @@ int main(int argc, char *argv[]) | | 128 | @@ -914,7 +945,7 @@ int main(int argc, char *argv[]) |
119 | { | | 129 | { |
120 | unsigned long flags = 0; | | 130 | unsigned long flags = 0; |
121 | unsigned long filter = 0; | | 131 | unsigned long filter = 0; |
122 | - int device = 0; | | 132 | - int device = 0; |
123 | + char *device = HCI_DEV_NONE; | | 133 | + char *device = HCI_DEV_NONE; |
124 | int defpsm = 0; | | 134 | int defpsm = 0; |
125 | int defcompid = DEFAULT_COMPID; | | 135 | int defcompid = DEFAULT_COMPID; |
126 | int opt, pppdump_fd = -1, audio_fd = -1; | | 136 | int opt, pppdump_fd = -1, audio_fd = -1; |
127 | @@ -923,7 +953,7 @@ int main(int argc, char *argv[]) | | 137 | @@ -923,7 +954,7 @@ int main(int argc, char *argv[]) |
128 | switch(opt) { | | 138 | switch(opt) { |
129 | case 'i': | | 139 | case 'i': |
130 | if (strcasecmp(optarg, "none") && strcasecmp(optarg, "system")) | | 140 | if (strcasecmp(optarg, "none") && strcasecmp(optarg, "system")) |
131 | - device = atoi(optarg + 3); | | 141 | - device = atoi(optarg + 3); |
132 | + device = optarg; | | 142 | + device = optarg; |
133 | else | | 143 | else |
134 | device = HCI_DEV_NONE; | | 144 | device = HCI_DEV_NONE; |
135 | break; | | 145 | break; |