reassembly.c (787bea7748a76130566f881c2342a0be4127d182) | reassembly.c (093ba72914b696521e4885756a68a3332782c8de) |
---|---|
1/* 6LoWPAN fragment reassembly 2 * 3 * 4 * Authors: 5 * Alexander Aring <aar@pengutronix.de> 6 * 7 * Based on: net/ipv6/reassembly.c 8 * --- 80 unchanged lines hidden (view full) --- 89 fq = container_of(frag, struct frag_queue, q); 90 net = container_of(fq->q.net, struct net, ieee802154_lowpan.frags); 91 92 spin_lock(&fq->q.lock); 93 94 if (fq->q.flags & INET_FRAG_COMPLETE) 95 goto out; 96 | 1/* 6LoWPAN fragment reassembly 2 * 3 * 4 * Authors: 5 * Alexander Aring <aar@pengutronix.de> 6 * 7 * Based on: net/ipv6/reassembly.c 8 * --- 80 unchanged lines hidden (view full) --- 89 fq = container_of(frag, struct frag_queue, q); 90 net = container_of(fq->q.net, struct net, ieee802154_lowpan.frags); 91 92 spin_lock(&fq->q.lock); 93 94 if (fq->q.flags & INET_FRAG_COMPLETE) 95 goto out; 96 |
97 inet_frag_kill(&fq->q, &lowpan_frags); | 97 inet_frag_kill(&fq->q); |
98out: 99 spin_unlock(&fq->q.lock); | 98out: 99 spin_unlock(&fq->q.lock); |
100 inet_frag_put(&fq->q, &lowpan_frags); | 100 inet_frag_put(&fq->q); |
101} 102 103static inline struct lowpan_frag_queue * 104fq_find(struct net *net, const struct lowpan_802154_cb *cb, 105 const struct ieee802154_addr *src, 106 const struct ieee802154_addr *dst) 107{ 108 struct inet_frag_queue *q; --- 116 unchanged lines hidden (view full) --- 225 * the last and the first frames arrived and all the bits are here. 226 */ 227static int lowpan_frag_reasm(struct lowpan_frag_queue *fq, struct sk_buff *prev, 228 struct net_device *ldev) 229{ 230 struct sk_buff *fp, *head = fq->q.fragments; 231 int sum_truesize; 232 | 101} 102 103static inline struct lowpan_frag_queue * 104fq_find(struct net *net, const struct lowpan_802154_cb *cb, 105 const struct ieee802154_addr *src, 106 const struct ieee802154_addr *dst) 107{ 108 struct inet_frag_queue *q; --- 116 unchanged lines hidden (view full) --- 225 * the last and the first frames arrived and all the bits are here. 226 */ 227static int lowpan_frag_reasm(struct lowpan_frag_queue *fq, struct sk_buff *prev, 228 struct net_device *ldev) 229{ 230 struct sk_buff *fp, *head = fq->q.fragments; 231 int sum_truesize; 232 |
233 inet_frag_kill(&fq->q, &lowpan_frags); | 233 inet_frag_kill(&fq->q); |
234 235 /* Make the one we just received the head. */ 236 if (prev) { 237 head = prev->next; 238 fp = skb_clone(head, GFP_ATOMIC); 239 240 if (!fp) 241 goto out_oom; --- 191 unchanged lines hidden (view full) --- 433 fq = fq_find(net, cb, &hdr.source, &hdr.dest); 434 if (fq != NULL) { 435 int ret; 436 437 spin_lock(&fq->q.lock); 438 ret = lowpan_frag_queue(fq, skb, frag_type); 439 spin_unlock(&fq->q.lock); 440 | 234 235 /* Make the one we just received the head. */ 236 if (prev) { 237 head = prev->next; 238 fp = skb_clone(head, GFP_ATOMIC); 239 240 if (!fp) 241 goto out_oom; --- 191 unchanged lines hidden (view full) --- 433 fq = fq_find(net, cb, &hdr.source, &hdr.dest); 434 if (fq != NULL) { 435 int ret; 436 437 spin_lock(&fq->q.lock); 438 ret = lowpan_frag_queue(fq, skb, frag_type); 439 spin_unlock(&fq->q.lock); 440 |
441 inet_frag_put(&fq->q, &lowpan_frags); | 441 inet_frag_put(&fq->q); |
442 return ret; 443 } 444 445err: 446 kfree_skb(skb); 447 return -1; 448} 449 --- 131 unchanged lines hidden (view full) --- 581{ 582 struct netns_ieee802154_lowpan *ieee802154_lowpan = 583 net_ieee802154_lowpan(net); 584 int res; 585 586 ieee802154_lowpan->frags.high_thresh = IPV6_FRAG_HIGH_THRESH; 587 ieee802154_lowpan->frags.low_thresh = IPV6_FRAG_LOW_THRESH; 588 ieee802154_lowpan->frags.timeout = IPV6_FRAG_TIMEOUT; | 442 return ret; 443 } 444 445err: 446 kfree_skb(skb); 447 return -1; 448} 449 --- 131 unchanged lines hidden (view full) --- 581{ 582 struct netns_ieee802154_lowpan *ieee802154_lowpan = 583 net_ieee802154_lowpan(net); 584 int res; 585 586 ieee802154_lowpan->frags.high_thresh = IPV6_FRAG_HIGH_THRESH; 587 ieee802154_lowpan->frags.low_thresh = IPV6_FRAG_LOW_THRESH; 588 ieee802154_lowpan->frags.timeout = IPV6_FRAG_TIMEOUT; |
589 ieee802154_lowpan->frags.f = &lowpan_frags; |
|
589 590 res = inet_frags_init_net(&ieee802154_lowpan->frags); 591 if (res < 0) 592 return res; 593 res = lowpan_frags_ns_sysctl_register(net); 594 if (res < 0) | 590 591 res = inet_frags_init_net(&ieee802154_lowpan->frags); 592 if (res < 0) 593 return res; 594 res = lowpan_frags_ns_sysctl_register(net); 595 if (res < 0) |
595 inet_frags_exit_net(&ieee802154_lowpan->frags, &lowpan_frags); | 596 inet_frags_exit_net(&ieee802154_lowpan->frags); |
596 return res; 597} 598 599static void __net_exit lowpan_frags_exit_net(struct net *net) 600{ 601 struct netns_ieee802154_lowpan *ieee802154_lowpan = 602 net_ieee802154_lowpan(net); 603 604 lowpan_frags_ns_sysctl_unregister(net); | 597 return res; 598} 599 600static void __net_exit lowpan_frags_exit_net(struct net *net) 601{ 602 struct netns_ieee802154_lowpan *ieee802154_lowpan = 603 net_ieee802154_lowpan(net); 604 605 lowpan_frags_ns_sysctl_unregister(net); |
605 inet_frags_exit_net(&ieee802154_lowpan->frags, &lowpan_frags); | 606 inet_frags_exit_net(&ieee802154_lowpan->frags); |
606} 607 608static struct pernet_operations lowpan_frags_ops = { 609 .init = lowpan_frags_init_net, 610 .exit = lowpan_frags_exit_net, 611}; 612 613int __init lowpan_net_frag_init(void) --- 34 unchanged lines hidden --- | 607} 608 609static struct pernet_operations lowpan_frags_ops = { 610 .init = lowpan_frags_init_net, 611 .exit = lowpan_frags_exit_net, 612}; 613 614int __init lowpan_net_frag_init(void) --- 34 unchanged lines hidden --- |