Lines Matching +full:x +full:- +full:size

3 /*-
4 * SPDX-License-Identifier: BSD-2-Clause
92 if (pkt->len < 1) in bnep_recv()
95 type = pkt->ptr[0]; in bnep_recv()
100 if (pkt->len < (ETHER_ADDR_LEN * 2) + ETHER_TYPE_LEN) { in bnep_recv()
101 log_debug("dropped short packet (type 0x%2.2x)", type); in bnep_recv()
105 pkt->dst = pkt->ptr; in bnep_recv()
107 pkt->src = pkt->ptr; in bnep_recv()
109 pkt->type = pkt->ptr; in bnep_recv()
114 len = bnep_recv_control(pkt->chan, pkt->ptr, pkt->len, false); in bnep_recv()
122 if (pkt->len < ETHER_TYPE_LEN) { in bnep_recv()
123 log_debug("dropped short packet (type 0x%2.2x)", type); in bnep_recv()
127 pkt->dst = pkt->chan->laddr; in bnep_recv()
128 pkt->src = pkt->chan->raddr; in bnep_recv()
129 pkt->type = pkt->ptr; in bnep_recv()
134 if (pkt->len < ETHER_ADDR_LEN + ETHER_TYPE_LEN) { in bnep_recv()
135 log_debug("dropped short packet (type 0x%2.2x)", type); in bnep_recv()
139 pkt->dst = pkt->chan->laddr; in bnep_recv()
140 pkt->src = pkt->ptr; in bnep_recv()
142 pkt->type = pkt->ptr; in bnep_recv()
147 if (pkt->len < ETHER_ADDR_LEN + ETHER_TYPE_LEN) { in bnep_recv()
148 log_debug("dropped short packet (type 0x%2.2x)", type); in bnep_recv()
152 pkt->dst = pkt->ptr; in bnep_recv()
154 pkt->src = pkt->chan->raddr; in bnep_recv()
155 pkt->type = pkt->ptr; in bnep_recv()
165 log_debug("dropped packet with reserved type 0x%2.2x", type); in bnep_recv()
174 || pkt->chan->state != CHANNEL_OPEN) in bnep_recv()
184 size_t len, size; in bnep_recv_extension() local
188 if (pkt->len < 2) in bnep_recv_extension()
191 type = pkt->ptr[0]; in bnep_recv_extension()
192 size = pkt->ptr[1]; in bnep_recv_extension()
194 if (pkt->len < size + 2) in bnep_recv_extension()
199 len = bnep_recv_control(pkt->chan, pkt->ptr + 2, size, true); in bnep_recv_extension()
200 if (len != size) in bnep_recv_extension()
217 eh->ptr = pkt->ptr; in bnep_recv_extension()
218 eh->len = size; in bnep_recv_extension()
219 STAILQ_INSERT_TAIL(&pkt->extlist, eh, next); in bnep_recv_extension()
223 packet_adj(pkt, size + 2); in bnep_recv_extension()
230 bnep_recv_control(channel_t *chan, uint8_t *ptr, size_t size, bool isext) in bnep_recv_control() argument
235 if (size-- < 1) in bnep_recv_control()
242 len = bnep_recv_control_command_not_understood(chan, ptr, size); in bnep_recv_control()
249 len = bnep_recv_setup_connection_req(chan, ptr, size); in bnep_recv_control()
256 len = bnep_recv_setup_connection_rsp(chan, ptr, size); in bnep_recv_control()
260 len = bnep_recv_filter_net_type_set(chan, ptr, size); in bnep_recv_control()
264 len = bnep_recv_filter_net_type_rsp(chan, ptr, size); in bnep_recv_control()
268 len = bnep_recv_filter_multi_addr_set(chan, ptr, size); in bnep_recv_control()
272 len = bnep_recv_filter_multi_addr_rsp(chan, ptr, size); in bnep_recv_control()
287 bnep_recv_control_command_not_understood(channel_t *chan, uint8_t *ptr, size_t size) in bnep_recv_control_command_not_understood() argument
291 if (size < 1) in bnep_recv_control_command_not_understood()
295 log_err("received Control Command Not Understood (0x%2.2x)", type); in bnep_recv_control_command_not_understood()
304 bnep_recv_setup_connection_req(channel_t *chan, uint8_t *ptr, size_t size) in bnep_recv_setup_connection_req() argument
310 if (size < 1) in bnep_recv_setup_connection_req()
314 if (size < (len * 2 + 1)) in bnep_recv_setup_connection_req()
317 if (chan->state != CHANNEL_WAIT_CONNECT_REQ in bnep_recv_setup_connection_req()
318 && chan->state != CHANNEL_OPEN) { in bnep_recv_setup_connection_req()
366 chan->state = CHANNEL_OPEN; in bnep_recv_setup_connection_req()
370 log_debug("addr %s response 0x%2.2x", in bnep_recv_setup_connection_req()
371 ether_ntoa((struct ether_addr *)chan->raddr), rsp); in bnep_recv_setup_connection_req()
378 bnep_recv_setup_connection_rsp(channel_t *chan, uint8_t *ptr, size_t size) in bnep_recv_setup_connection_rsp() argument
382 if (size < 2) in bnep_recv_setup_connection_rsp()
387 if (chan->state != CHANNEL_WAIT_CONNECT_RSP) { in bnep_recv_setup_connection_rsp()
392 log_debug("addr %s response 0x%2.2x", in bnep_recv_setup_connection_rsp()
393 ether_ntoa((struct ether_addr *)chan->raddr), rsp); in bnep_recv_setup_connection_rsp()
396 chan->state = CHANNEL_OPEN; in bnep_recv_setup_connection_rsp()
406 bnep_recv_filter_net_type_set(channel_t *chan, uint8_t *ptr, size_t size) in bnep_recv_filter_net_type_set() argument
412 if (size < 2) in bnep_recv_filter_net_type_set()
418 if (size < (len + 2)) in bnep_recv_filter_net_type_set()
421 if (chan->state != CHANNEL_OPEN) { in bnep_recv_filter_net_type_set()
447 log_debug("pf[%d] = %#4.4x, %#4.4x", i, pf[i].start, pf[i].end); in bnep_recv_filter_net_type_set()
450 if (chan->pfilter) in bnep_recv_filter_net_type_set()
451 free(chan->pfilter); in bnep_recv_filter_net_type_set()
453 chan->pfilter = pf; in bnep_recv_filter_net_type_set()
454 chan->npfilter = nf; in bnep_recv_filter_net_type_set()
459 log_debug("addr %s response 0x%2.2x", in bnep_recv_filter_net_type_set()
460 ether_ntoa((struct ether_addr *)chan->raddr), rsp); in bnep_recv_filter_net_type_set()
467 bnep_recv_filter_net_type_rsp(channel_t *chan, uint8_t *ptr, size_t size) in bnep_recv_filter_net_type_rsp() argument
471 if (size < 2) in bnep_recv_filter_net_type_rsp()
474 if (chan->state != CHANNEL_OPEN) { in bnep_recv_filter_net_type_rsp()
481 log_debug("addr %s response 0x%2.2x", in bnep_recv_filter_net_type_rsp()
482 ether_ntoa((struct ether_addr *)chan->raddr), rsp); in bnep_recv_filter_net_type_rsp()
489 bnep_recv_filter_multi_addr_set(channel_t *chan, uint8_t *ptr, size_t size) in bnep_recv_filter_multi_addr_set() argument
495 if (size < 2) in bnep_recv_filter_multi_addr_set()
501 if (size < (len + 2)) in bnep_recv_filter_multi_addr_set()
504 if (chan->state != CHANNEL_OPEN) { in bnep_recv_filter_multi_addr_set()
532 "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x, " in bnep_recv_filter_multi_addr_set()
533 "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x", i, in bnep_recv_filter_multi_addr_set()
540 if (chan->mfilter) in bnep_recv_filter_multi_addr_set()
541 free(chan->mfilter); in bnep_recv_filter_multi_addr_set()
543 chan->mfilter = mf; in bnep_recv_filter_multi_addr_set()
544 chan->nmfilter = nf; in bnep_recv_filter_multi_addr_set()
549 log_debug("addr %s response 0x%2.2x", in bnep_recv_filter_multi_addr_set()
550 ether_ntoa((struct ether_addr *)chan->raddr), rsp); in bnep_recv_filter_multi_addr_set()
557 bnep_recv_filter_multi_addr_rsp(channel_t *chan, uint8_t *ptr, size_t size) in bnep_recv_filter_multi_addr_rsp() argument
561 if (size < 2) in bnep_recv_filter_multi_addr_rsp()
564 if (chan->state != CHANNEL_OPEN) { in bnep_recv_filter_multi_addr_rsp()
570 log_debug("addr %s response 0x%2.2x", in bnep_recv_filter_multi_addr_rsp()
571 ether_ntoa((struct ether_addr *)chan->raddr), rsp); in bnep_recv_filter_multi_addr_rsp()
584 assert(chan->state != CHANNEL_CLOSED); in bnep_send_control()
590 p = pkt->ptr; in bnep_send_control()
619 log_err("Can't send control type 0x%2.2x", type); in bnep_send_control()
624 pkt->len = p - pkt->ptr; in bnep_send_control()
643 if (pkt->type == NULL) { in bnep_send()
644 iov[0].iov_base = pkt->ptr; in bnep_send()
645 iov[0].iov_len = pkt->len; in bnep_send()
649 p = chan->sendbuf; in bnep_send()
651 dst = (memcmp(pkt->dst, chan->raddr, ETHER_ADDR_LEN) != 0); in bnep_send()
652 src = (memcmp(pkt->src, chan->laddr, ETHER_ADDR_LEN) != 0); in bnep_send()
667 memcpy(p, pkt->dst, ETHER_ADDR_LEN); in bnep_send()
672 memcpy(p, pkt->src, ETHER_ADDR_LEN); in bnep_send()
677 memcpy(p, pkt->type, ETHER_TYPE_LEN); in bnep_send()
680 STAILQ_FOREACH(eh, &pkt->extlist, next) { in bnep_send()
681 if (p + eh->len > chan->sendbuf + chan->mtu) in bnep_send()
687 memcpy(p, eh->ptr, eh->len); in bnep_send()
688 p += eh->len; in bnep_send()
693 iov[0].iov_base = chan->sendbuf; in bnep_send()
694 iov[0].iov_len = (p - chan->sendbuf); in bnep_send()
696 if ((chan->npfilter == 0 || bnep_pfilter(chan, pkt)) in bnep_send()
697 && (chan->nmfilter == 0 || bnep_mfilter(chan, pkt))) { in bnep_send()
698 iov[1].iov_base = pkt->ptr; in bnep_send()
699 iov[1].iov_len = pkt->len; in bnep_send()
701 && pkt->len >= ETHER_VLAN_ENCAP_LEN) { in bnep_send()
702 iov[1].iov_base = pkt->ptr; in bnep_send()
711 if (iov[0].iov_len + iov[1].iov_len > chan->mtu) { in bnep_send()
716 nw = writev(chan->fd, iov, __arraycount(iov)); in bnep_send()
725 proto = be16dec(pkt->type); in bnep_pfilter()
727 if (pkt->len < 4) in bnep_pfilter()
730 proto = be16dec(pkt->ptr + 2); in bnep_pfilter()
733 for (i = 0; i < chan->npfilter; i++) { in bnep_pfilter()
734 if (chan->pfilter[i].start <= proto in bnep_pfilter()
735 && chan->pfilter[i].end >=proto) in bnep_pfilter()
747 if (!ETHER_IS_MULTICAST(pkt->dst)) in bnep_mfilter()
750 for (i = 0; i < chan->nmfilter; i++) { in bnep_mfilter()
751 if (memcmp(pkt->dst, chan->mfilter[i].start, ETHER_ADDR_LEN) >= 0 in bnep_mfilter()
752 && memcmp(pkt->dst, chan->mfilter[i].end, ETHER_ADDR_LEN) <= 0) in bnep_mfilter()