Lines Matching refs:pkt
81 bnep_recv(packet_t *pkt)
86 if (pkt->len < 1)
89 type = pkt->ptr[0];
90 packet_adj(pkt, 1);
94 if (pkt->len < (ETHER_ADDR_LEN * 2) + ETHER_TYPE_LEN) {
99 pkt->dst = pkt->ptr;
100 packet_adj(pkt, ETHER_ADDR_LEN);
101 pkt->src = pkt->ptr;
102 packet_adj(pkt, ETHER_ADDR_LEN);
103 pkt->type = pkt->ptr;
104 packet_adj(pkt, ETHER_TYPE_LEN);
108 len = bnep_recv_control(pkt->chan, pkt->ptr, pkt->len, false);
112 packet_adj(pkt, len);
116 if (pkt->len < ETHER_TYPE_LEN) {
121 pkt->dst = pkt->chan->laddr;
122 pkt->src = pkt->chan->raddr;
123 pkt->type = pkt->ptr;
124 packet_adj(pkt, ETHER_TYPE_LEN);
128 if (pkt->len < ETHER_ADDR_LEN + ETHER_TYPE_LEN) {
133 pkt->dst = pkt->chan->laddr;
134 pkt->src = pkt->ptr;
135 packet_adj(pkt, ETHER_ADDR_LEN);
136 pkt->type = pkt->ptr;
137 packet_adj(pkt, ETHER_TYPE_LEN);
141 if (pkt->len < ETHER_ADDR_LEN + ETHER_TYPE_LEN) {
146 pkt->dst = pkt->ptr;
147 packet_adj(pkt, ETHER_ADDR_LEN);
148 pkt->src = pkt->chan->raddr;
149 pkt->type = pkt->ptr;
150 packet_adj(pkt, ETHER_TYPE_LEN);
164 && !bnep_recv_extension(pkt))
168 || pkt->chan->state != CHANNEL_OPEN)
171 if (pkt->len > ETHER_MAX_LEN)
174 type, be16dec(pkt->type), pkt->len);
180 bnep_recv_extension(packet_t *pkt)
187 if (pkt->len < 2)
190 type = pkt->ptr[0];
191 size = pkt->ptr[1];
193 if (pkt->len < size + 2)
198 len = bnep_recv_control(pkt->chan, pkt->ptr + 2, size, true);
216 eh->ptr = pkt->ptr;
218 STAILQ_INSERT_TAIL(&pkt->extlist, eh, next);
222 packet_adj(pkt, size + 2);
592 packet_t *pkt;
598 pkt = packet_alloc(chan);
599 if (pkt == NULL)
602 p = pkt->ptr;
640 pkt->len = p - pkt->ptr;
642 channel_put(chan, pkt);
643 packet_free(pkt);
651 bnep_send(channel_t *chan, packet_t *pkt)
659 if (pkt->type == NULL) {
660 iov[0].iov_base = pkt->ptr;
661 iov[0].iov_len = pkt->len;
667 dst = (memcmp(pkt->dst, chan->raddr, ETHER_ADDR_LEN) != 0);
668 src = (memcmp(pkt->src, chan->laddr, ETHER_ADDR_LEN) != 0);
683 memcpy(p, pkt->dst, ETHER_ADDR_LEN);
688 memcpy(p, pkt->src, ETHER_ADDR_LEN);
693 memcpy(p, pkt->type, ETHER_TYPE_LEN);
696 STAILQ_FOREACH(eh, &pkt->extlist, next) {
712 if ((chan->npfilter == 0 || bnep_pfilter(chan, pkt))
713 && (chan->nmfilter == 0 || bnep_mfilter(chan, pkt))) {
714 iov[1].iov_base = pkt->ptr;
715 iov[1].iov_len = pkt->len;
717 && pkt->len >= ETHER_VLAN_ENCAP_LEN) {
718 iov[1].iov_base = pkt->ptr;
737 bnep_pfilter(channel_t *chan, packet_t *pkt)
741 proto = be16dec(pkt->type);
743 if (pkt->len < 4)
746 proto = be16dec(pkt->ptr + 2);
759 bnep_mfilter(channel_t *chan, packet_t *pkt)
763 if (!ETHER_IS_MULTICAST(pkt->dst))
767 if (memcmp(pkt->dst, chan->mfilter[i].start, ETHER_ADDR_LEN) >= 0
768 && memcmp(pkt->dst, chan->mfilter[i].end, ETHER_ADDR_LEN) <= 0)