Home | History | Annotate | Download | only in libpcap

Lines Matching refs:handle

183 bt_activate(pcap_t* handle)
185 struct pcap_bt *handlep = handle->priv;
193 if (sscanf(handle->opt.device, BT_IFACE"%d", &dev_id) != 1)
195 pcap_snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
197 handle->opt.device);
202 handle->bufsize = BT_CTRL_SIZE+sizeof(pcap_bluetooth_h4_header)+handle->snapshot;
203 handle->linktype = DLT_BLUETOOTH_HCI_H4_WITH_PHDR;
205 handle->read_op = bt_read_linux;
206 handle->inject_op = bt_inject_linux;
207 handle->setfilter_op = install_bpf_program; /* no kernel filtering */
208 handle->setdirection_op = bt_setdirection_linux;
209 handle->set_datalink_op = NULL; /* can't change data link type */
210 handle->getnonblock_op = pcap_getnonblock_fd;
211 handle->setnonblock_op = pcap_setnonblock_fd;
212 handle->stats_op = bt_stats_linux;
216 handle->fd = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI);
217 if (handle->fd < 0) {
218 pcap_snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
223 handle->buffer = malloc(handle->bufsize);
224 if (!handle->buffer) {
225 pcap_snprintf(handle->errbuf, PCAP_ERRBUF_SIZE, "Can't allocate dump buffer: %s",
231 if (setsockopt(handle->fd, SOL_HCI, HCI_DATA_DIR, &opt, sizeof(opt)) < 0) {
232 pcap_snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
238 if (setsockopt(handle->fd, SOL_HCI, HCI_TIME_STAMP, &opt, sizeof(opt)) < 0) {
239 pcap_snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
249 if (setsockopt(handle->fd, SOL_HCI, HCI_FILTER, &flt, sizeof(flt)) < 0) {
250 pcap_snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
262 if (bind(handle->fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
263 pcap_snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
269 if (handle->opt.rfmon) {
277 if (handle->opt.buffer_size != 0) {
281 if (setsockopt(handle->fd, SOL_SOCKET, SO_RCVBUF,
282 &handle->opt.buffer_size,
283 sizeof(handle->opt.buffer_size)) == -1) {
284 pcap_snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
290 handle->selectable_fd = handle->fd;
294 pcap_cleanup_live_common(handle);
299 bt_read_linux(pcap_t *handle, int max_packets, pcap_handler callback, u_char *user)
310 pktd = (u_char *)handle->buffer + BT_CTRL_SIZE;
313 iv.iov_len = handle->snapshot;
318 msg.msg_control = handle->buffer;
323 ret = recvmsg(handle->fd, &msg, 0);
324 if (handle->break_loop)
326 handle->break_loop = 0;
332 pcap_snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
353 if ((in && (handle->direction == PCAP_D_OUT)) ||
354 ((!in) && (handle->direction == PCAP_D_IN)))
360 if (handle->fcode.bf_insns == NULL ||
361 bpf_filter(handle->fcode.bf_insns, pktd, pkth.len, pkth.caplen)) {
369 bt_inject_linux(pcap_t *handle, const void *buf, size_t size)
371 pcap_snprintf(handle->errbuf, PCAP_ERRBUF_SIZE, "inject not supported on "
378 bt_stats_linux(pcap_t *handle, struct pcap_stat *stats)
380 struct pcap_bt *handlep = handle->priv;
388 ret = ioctl(handle->fd, HCIGETDEVINFO, (void *)&dev_info);
392 pcap_snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,