--- /dev/null
+This will be sent upstream, then we can remove this.
+The first hunk however was removed as it doesn't apply to
+our backport framework which declared net_ieee802154_lowpan(),
+for now we carry that for older and newer kernels in our own
+backport/backport-include/net/net_namespace.h file.
+
+From 2e509dac53558fda87061b06f081fde5a7cb8051 Mon Sep 17 00:00:00 2001
+From: "Luis R. Rodriguez" <mcgrof@suse.com>
+Date: Mon, 31 Mar 2014 01:53:22 -0700
+Subject: [PATCH] 6lowpan: add helper to get 6lowpan namespace
+
+This will simplify the new reassembly backport
+with no code changes.
+
+Cc:Alexander Aring <alex.aring@gmail.com>
+Signed-off-by: Luis R. Rodriguez <mcgrof@suse.com>
+---
+diff --git a/net/ieee802154/reassembly.c b/net/ieee802154/reassembly.c
+index f4ac957..0bcbef3 100644
+--
+1.9.0
+
+--- a/net/ieee802154/reassembly.c
++++ b/net/ieee802154/reassembly.c
+@@ -123,6 +123,8 @@ fq_find(struct net *net, const struct ie
+ struct inet_frag_queue *q;
+ struct lowpan_create_arg arg;
+ unsigned int hash;
++ struct netns_ieee802154_lowpan *ieee802154_lowpan =
++ net_ieee802154_lowpan(net);
+
+ arg.tag = frag_info->d_tag;
+ arg.d_size = frag_info->d_size;
+@@ -132,7 +134,7 @@ fq_find(struct net *net, const struct ie
+ read_lock(&lowpan_frags.lock);
+ hash = lowpan_hash_frag(frag_info->d_tag, frag_info->d_size, src, dst);
+
+- q = inet_frag_find(&net->ieee802154_lowpan.frags,
++ q = inet_frag_find(&ieee802154_lowpan->frags,
+ &lowpan_frags, &arg, hash);
+ if (IS_ERR_OR_NULL(q)) {
+ inet_frag_maybe_warn_overflow(q, pr_fmt());
+@@ -361,16 +363,18 @@ int lowpan_frag_rcv(struct sk_buff *skb,
+ struct lowpan_frag_queue *fq;
+ struct net *net = dev_net(skb->dev);
+ struct ieee802154_frag_info *frag_info = &mac_cb(skb)->frag_info;
++ struct netns_ieee802154_lowpan *ieee802154_lowpan =
++ net_ieee802154_lowpan(net);
+ int err;
+
+ err = lowpan_get_frag_info(skb, frag_type, frag_info);
+ if (err < 0)
+ goto err;
+
+- if (frag_info->d_size > net->ieee802154_lowpan.max_dsize)
++ if (frag_info->d_size > ieee802154_lowpan->max_dsize)
+ goto err;
+
+- inet_frag_evictor(&net->ieee802154_lowpan.frags, &lowpan_frags, false);
++ inet_frag_evictor(&ieee802154_lowpan->frags, &lowpan_frags, false);
+
+ fq = fq_find(net, frag_info, &mac_cb(skb)->sa, &mac_cb(skb)->da);
+ if (fq != NULL) {
+@@ -453,6 +457,8 @@ static int __net_init lowpan_frags_ns_sy
+ {
+ struct ctl_table *table;
+ struct ctl_table_header *hdr;
++ struct netns_ieee802154_lowpan *ieee802154_lowpan =
++ net_ieee802154_lowpan(net);
+
+ table = lowpan_frags_ns_ctl_table;
+ if (!net_eq(net, &init_net)) {
+@@ -461,10 +467,10 @@ static int __net_init lowpan_frags_ns_sy
+ if (table == NULL)
+ goto err_alloc;
+
+- table[0].data = &net->ieee802154_lowpan.frags.high_thresh;
+- table[1].data = &net->ieee802154_lowpan.frags.low_thresh;
+- table[2].data = &net->ieee802154_lowpan.frags.timeout;
+- table[3].data = &net->ieee802154_lowpan.max_dsize;
++ table[0].data = &ieee802154_lowpan->frags.high_thresh;
++ table[1].data = &ieee802154_lowpan->frags.low_thresh;
++ table[2].data = &ieee802154_lowpan->frags.timeout;
++ table[3].data = &ieee802154_lowpan->max_dsize;
+
+ /* Don't export sysctls to unprivileged users */
+ if (net->user_ns != &init_user_ns)
+@@ -475,7 +481,7 @@ static int __net_init lowpan_frags_ns_sy
+ if (hdr == NULL)
+ goto err_reg;
+
+- net->ieee802154_lowpan.sysctl.frags_hdr = hdr;
++ ieee802154_lowpan->sysctl.frags_hdr = hdr;
+ return 0;
+
+ err_reg:
+@@ -488,9 +494,11 @@ err_alloc:
+ static void __net_exit lowpan_frags_ns_sysctl_unregister(struct net *net)
+ {
+ struct ctl_table *table;
++ struct netns_ieee802154_lowpan *ieee802154_lowpan =
++ net_ieee802154_lowpan(net);
+
+- table = net->ieee802154_lowpan.sysctl.frags_hdr->ctl_table_arg;
+- unregister_net_sysctl_table(net->ieee802154_lowpan.sysctl.frags_hdr);
++ table = ieee802154_lowpan->sysctl.frags_hdr->ctl_table_arg;
++ unregister_net_sysctl_table(ieee802154_lowpan->sysctl.frags_hdr);
+ if (!net_eq(net, &init_net))
+ kfree(table);
+ }
+@@ -531,20 +539,26 @@ static inline void lowpan_frags_sysctl_u
+
+ static int __net_init lowpan_frags_init_net(struct net *net)
+ {
+- net->ieee802154_lowpan.frags.high_thresh = IPV6_FRAG_HIGH_THRESH;
+- net->ieee802154_lowpan.frags.low_thresh = IPV6_FRAG_LOW_THRESH;
+- net->ieee802154_lowpan.frags.timeout = IPV6_FRAG_TIMEOUT;
+- net->ieee802154_lowpan.max_dsize = 0xFFFF;
++ struct netns_ieee802154_lowpan *ieee802154_lowpan =
++ net_ieee802154_lowpan(net);
+
+- inet_frags_init_net(&net->ieee802154_lowpan.frags);
++ ieee802154_lowpan->frags.high_thresh = IPV6_FRAG_HIGH_THRESH;
++ ieee802154_lowpan->frags.low_thresh = IPV6_FRAG_LOW_THRESH;
++ ieee802154_lowpan->frags.timeout = IPV6_FRAG_TIMEOUT;
++ ieee802154_lowpan->max_dsize = 0xFFFF;
++
++ inet_frags_init_net(&ieee802154_lowpan->frags);
+
+ return lowpan_frags_ns_sysctl_register(net);
+ }
+
+ static void __net_exit lowpan_frags_exit_net(struct net *net)
+ {
++ struct netns_ieee802154_lowpan *ieee802154_lowpan =
++ net_ieee802154_lowpan(net);
++
+ lowpan_frags_ns_sysctl_unregister(net);
+- inet_frags_exit_net(&net->ieee802154_lowpan.frags, &lowpan_frags);
++ inet_frags_exit_net(&ieee802154_lowpan->frags, &lowpan_frags);
+ }
+
+ static struct pernet_operations lowpan_frags_ops = {
--- /dev/null
+This is required unless we add some macro wrappers for this
+type of static work upstream but not sure if that is a good
+idea yet.
+
+--- a/net/ieee802154/reassembly.c
++++ b/net/ieee802154/reassembly.c
+@@ -104,7 +104,11 @@ static void lowpan_frag_expire(unsigned
+ struct net *net;
+
+ fq = container_of((struct inet_frag_queue *)data, struct frag_queue, q);
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,15,0))
+ net = container_of(fq->q.net, struct net, ieee802154_lowpan.frags);
++#else
++ net = &init_net;
++#endif
+
+ lowpan_expire_frag_queue(fq, &lowpan_frags);
+ }
+@@ -386,28 +390,44 @@ EXPORT_SYMBOL(lowpan_frag_rcv);
+ static struct ctl_table lowpan_frags_ns_ctl_table[] = {
+ {
+ .procname = "6lowpanfrag_high_thresh",
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,15,0))
+ .data = &init_net.ieee802154_lowpan.frags.high_thresh,
++#else
++ .data = &ieee802154_lowpan.frags.high_thresh,
++#endif
+ .maxlen = sizeof(int),
+ .mode = 0644,
+ .proc_handler = proc_dointvec
+ },
+ {
+ .procname = "6lowpanfrag_low_thresh",
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,15,0))
+ .data = &init_net.ieee802154_lowpan.frags.low_thresh,
++#else
++ .data = &ieee802154_lowpan.frags.low_thresh,
++#endif
+ .maxlen = sizeof(int),
+ .mode = 0644,
+ .proc_handler = proc_dointvec
+ },
+ {
+ .procname = "6lowpanfrag_time",
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,15,0))
+ .data = &init_net.ieee802154_lowpan.frags.timeout,
++#else
++ .data = &ieee802154_lowpan.frags.timeout,
++#endif
+ .maxlen = sizeof(int),
+ .mode = 0644,
+ .proc_handler = proc_dointvec_jiffies,
+ },
+ {
+ .procname = "6lowpanfrag_max_datagram_size",
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,15,0))
+ .data = &init_net.ieee802154_lowpan.max_dsize,
++#else
++ .data = &ieee802154_lowpan.max_dsize,
++#endif
+ .maxlen = sizeof(int),
+ .mode = 0644,
+ .proc_handler = proc_dointvec