diff options
Diffstat (limited to 'patches/0000-upstream-backport-changes/0001-6lowpan-namespace.patch')
-rw-r--r-- | patches/0000-upstream-backport-changes/0001-6lowpan-namespace.patch | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/patches/0000-upstream-backport-changes/0001-6lowpan-namespace.patch b/patches/0000-upstream-backport-changes/0001-6lowpan-namespace.patch new file mode 100644 index 00000000..2f88b288 --- /dev/null +++ b/patches/0000-upstream-backport-changes/0001-6lowpan-namespace.patch @@ -0,0 +1,143 @@ +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 = { |