Lines Matching refs:fq
48 static int lowpan_frag_reasm(struct lowpan_frag_queue *fq,
64 const struct lowpan_frag_queue *fq; in lowpan_hashfn() local
66 fq = container_of(q, struct lowpan_frag_queue, q); in lowpan_hashfn()
67 return lowpan_hash_frag(fq->tag, fq->d_size, &fq->saddr, &fq->daddr); in lowpan_hashfn()
72 const struct lowpan_frag_queue *fq; in lowpan_frag_match() local
75 fq = container_of(q, struct lowpan_frag_queue, q); in lowpan_frag_match()
76 return fq->tag == arg->tag && fq->d_size == arg->d_size && in lowpan_frag_match()
77 ieee802154_addr_equal(&fq->saddr, arg->src) && in lowpan_frag_match()
78 ieee802154_addr_equal(&fq->daddr, arg->dst); in lowpan_frag_match()
84 struct lowpan_frag_queue *fq; in lowpan_frag_init() local
86 fq = container_of(q, struct lowpan_frag_queue, q); in lowpan_frag_init()
88 fq->tag = arg->tag; in lowpan_frag_init()
89 fq->d_size = arg->d_size; in lowpan_frag_init()
90 fq->saddr = *arg->src; in lowpan_frag_init()
91 fq->daddr = *arg->dst; in lowpan_frag_init()
96 struct frag_queue *fq; in lowpan_frag_expire() local
99 fq = container_of((struct inet_frag_queue *)data, struct frag_queue, q); in lowpan_frag_expire()
100 net = container_of(fq->q.net, struct net, ieee802154_lowpan.frags); in lowpan_frag_expire()
102 spin_lock(&fq->q.lock); in lowpan_frag_expire()
104 if (fq->q.flags & INET_FRAG_COMPLETE) in lowpan_frag_expire()
107 inet_frag_kill(&fq->q, &lowpan_frags); in lowpan_frag_expire()
109 spin_unlock(&fq->q.lock); in lowpan_frag_expire()
110 inet_frag_put(&fq->q, &lowpan_frags); in lowpan_frag_expire()
140 static int lowpan_frag_queue(struct lowpan_frag_queue *fq, in lowpan_frag_queue() argument
147 if (fq->q.flags & INET_FRAG_COMPLETE) in lowpan_frag_queue()
158 if (end < fq->q.len || in lowpan_frag_queue()
159 ((fq->q.flags & INET_FRAG_LAST_IN) && end != fq->q.len)) in lowpan_frag_queue()
161 fq->q.flags |= INET_FRAG_LAST_IN; in lowpan_frag_queue()
162 fq->q.len = end; in lowpan_frag_queue()
164 if (end > fq->q.len) { in lowpan_frag_queue()
166 if (fq->q.flags & INET_FRAG_LAST_IN) in lowpan_frag_queue()
168 fq->q.len = end; in lowpan_frag_queue()
176 prev = fq->q.fragments_tail; in lowpan_frag_queue()
182 for (next = fq->q.fragments; next != NULL; next = next->next) { in lowpan_frag_queue()
192 fq->q.fragments_tail = skb; in lowpan_frag_queue()
196 fq->q.fragments = skb; in lowpan_frag_queue()
202 fq->q.stamp = skb->tstamp; in lowpan_frag_queue()
205 fq->q.meat += lowpan_uncompress_size(skb, NULL); in lowpan_frag_queue()
206 fq->q.flags |= INET_FRAG_FIRST_IN; in lowpan_frag_queue()
208 fq->q.meat += skb->len; in lowpan_frag_queue()
210 add_frag_mem_limit(&fq->q, skb->truesize); in lowpan_frag_queue()
212 if (fq->q.flags == (INET_FRAG_FIRST_IN | INET_FRAG_LAST_IN) && in lowpan_frag_queue()
213 fq->q.meat == fq->q.len) { in lowpan_frag_queue()
218 res = lowpan_frag_reasm(fq, prev, dev); in lowpan_frag_queue()
237 static int lowpan_frag_reasm(struct lowpan_frag_queue *fq, struct sk_buff *prev, in lowpan_frag_reasm() argument
240 struct sk_buff *fp, *head = fq->q.fragments; in lowpan_frag_reasm()
243 inet_frag_kill(&fq->q, &lowpan_frags); in lowpan_frag_reasm()
255 fq->q.fragments_tail = fp; in lowpan_frag_reasm()
258 skb_morph(head, fq->q.fragments); in lowpan_frag_reasm()
259 head->next = fq->q.fragments->next; in lowpan_frag_reasm()
261 consume_skb(fq->q.fragments); in lowpan_frag_reasm()
262 fq->q.fragments = head; in lowpan_frag_reasm()
290 add_frag_mem_limit(&fq->q, clone->truesize); in lowpan_frag_reasm()
313 sub_frag_mem_limit(&fq->q, sum_truesize); in lowpan_frag_reasm()
317 head->tstamp = fq->q.stamp; in lowpan_frag_reasm()
319 fq->q.fragments = NULL; in lowpan_frag_reasm()
320 fq->q.fragments_tail = NULL; in lowpan_frag_reasm()
356 struct lowpan_frag_queue *fq; in lowpan_frag_rcv() local
374 fq = fq_find(net, frag_info, &source, &dest); in lowpan_frag_rcv()
375 if (fq != NULL) { in lowpan_frag_rcv()
378 spin_lock(&fq->q.lock); in lowpan_frag_rcv()
379 ret = lowpan_frag_queue(fq, skb, frag_type); in lowpan_frag_rcv()
380 spin_unlock(&fq->q.lock); in lowpan_frag_rcv()
382 inet_frag_put(&fq->q, &lowpan_frags); in lowpan_frag_rcv()