Lines Matching refs:pkt
88 bnep_recv(packet_t *pkt)
93 if (pkt->len < 1)
96 type = pkt->ptr[0];
97 packet_adj(pkt, 1);
101 if (pkt->len < (ETHER_ADDR_LEN * 2) + ETHER_TYPE_LEN) {
106 pkt->dst = pkt->ptr;
107 packet_adj(pkt, ETHER_ADDR_LEN);
108 pkt->src = pkt->ptr;
109 packet_adj(pkt, ETHER_ADDR_LEN);
110 pkt->type = pkt->ptr;
111 packet_adj(pkt, ETHER_TYPE_LEN);
115 len = bnep_recv_control(pkt->chan, pkt->ptr, pkt->len, false);
119 packet_adj(pkt, len);
123 if (pkt->len < ETHER_TYPE_LEN) {
128 pkt->dst = pkt->chan->laddr;
129 pkt->src = pkt->chan->raddr;
130 pkt->type = pkt->ptr;
131 packet_adj(pkt, ETHER_TYPE_LEN);
135 if (pkt->len < ETHER_ADDR_LEN + ETHER_TYPE_LEN) {
140 pkt->dst = pkt->chan->laddr;
141 pkt->src = pkt->ptr;
142 packet_adj(pkt, ETHER_ADDR_LEN);
143 pkt->type = pkt->ptr;
144 packet_adj(pkt, ETHER_TYPE_LEN);
148 if (pkt->len < ETHER_ADDR_LEN + ETHER_TYPE_LEN) {
153 pkt->dst = pkt->ptr;
154 packet_adj(pkt, ETHER_ADDR_LEN);
155 pkt->src = pkt->chan->raddr;
156 pkt->type = pkt->ptr;
157 packet_adj(pkt, ETHER_TYPE_LEN);
171 && !bnep_recv_extension(pkt))
175 || pkt->chan->state != CHANNEL_OPEN)
182 bnep_recv_extension(packet_t *pkt)
189 if (pkt->len < 2)
192 type = pkt->ptr[0];
193 size = pkt->ptr[1];
195 if (pkt->len < size + 2)
200 len = bnep_recv_control(pkt->chan, pkt->ptr + 2, size, true);
218 eh->ptr = pkt->ptr;
220 STAILQ_INSERT_TAIL(&pkt->extlist, eh, next);
224 packet_adj(pkt, size + 2);
581 packet_t *pkt;
587 pkt = packet_alloc(chan);
588 if (pkt == NULL)
591 p = pkt->ptr;
625 pkt->len = p - pkt->ptr;
627 channel_put(chan, pkt);
628 packet_free(pkt);
636 bnep_send(channel_t *chan, packet_t *pkt)
644 if (pkt->type == NULL) {
645 iov[0].iov_base = pkt->ptr;
646 iov[0].iov_len = pkt->len;
652 dst = (memcmp(pkt->dst, chan->raddr, ETHER_ADDR_LEN) != 0);
653 src = (memcmp(pkt->src, chan->laddr, ETHER_ADDR_LEN) != 0);
668 memcpy(p, pkt->dst, ETHER_ADDR_LEN);
673 memcpy(p, pkt->src, ETHER_ADDR_LEN);
678 memcpy(p, pkt->type, ETHER_TYPE_LEN);
681 STAILQ_FOREACH(eh, &pkt->extlist, next) {
697 if ((chan->npfilter == 0 || bnep_pfilter(chan, pkt))
698 && (chan->nmfilter == 0 || bnep_mfilter(chan, pkt))) {
699 iov[1].iov_base = pkt->ptr;
700 iov[1].iov_len = pkt->len;
702 && pkt->len >= ETHER_VLAN_ENCAP_LEN) {
703 iov[1].iov_base = pkt->ptr;
722 bnep_pfilter(channel_t *chan, packet_t *pkt)
726 proto = be16dec(pkt->type);
728 if (pkt->len < 4)
731 proto = be16dec(pkt->ptr + 2);
744 bnep_mfilter(channel_t *chan, packet_t *pkt)
748 if (!ETHER_IS_MULTICAST(pkt->dst))
752 if (memcmp(pkt->dst, chan->mfilter[i].start, ETHER_ADDR_LEN) >= 0
753 && memcmp(pkt->dst, chan->mfilter[i].end, ETHER_ADDR_LEN) <= 0)