* Re: [PATCH net] ipv6: don't stop backtracking in fib6_lookup_1 if subtree does not match
From: Hannes Frederic Sowa @ 2013-08-14 10:06 UTC (permalink / raw)
To: Teco Boot; +Cc: David Miller, netdev
In-Reply-To: <64621FDB-9618-40A7-82EE-6056156580F6@inf-net.nl>
On Wed, Aug 14, 2013 at 10:06:23AM +0200, Teco Boot wrote:
> Many excuses to send before adding text. Hitted wrong button.
>
> I don't want to enforce something. Nor I want to spam. Nor I want to bypass. I just spend some cycles to get IPv6 with multi-homing work as designed. Subtrees was broken, maybe from day one. I'm glad there is progress.
>
> I also do not want broken fixes in stable. I know what it is. As I posed, I had to deal with broken fixes when testing the subtree fix. I double checked the fix Hannes made, because Hannes asked me to do so. I'm in for doing more work here.
Teco, I don't see the problem. The patch is on its way. It is in stable and
will be included in the next kernel, 3.11. That is all the luxus a patch can
possibly have.
^ permalink raw reply
* Re: [PATCH 1/3 v4] ipv6: do not disable temp_address when reaching max_address
From: Hannes Frederic Sowa @ 2013-08-14 10:15 UTC (permalink / raw)
To: Ding Tianhong
Cc: David S. Miller, Alexey Kuznetsov, James Morris,
Hideaki YOSHIFUJI, Patrick McHardy, Jon Maloy, Eric Dumazet,
Netdev
In-Reply-To: <520B48AE.8050103@huawei.com>
On Wed, Aug 14, 2013 at 05:06:54PM +0800, Ding Tianhong wrote:
> A LAN user can remotely disable temporary address which may lead
> to privacy violatins and information disclosure.
>
> The reason is that the linux kernel uses the 'ipv6.max_addresses'
> option to specify how many ipv6 addresses and interface may have.
> The 'ipv6.regen_max_retry' (default value 3) option specifies
> how many times the kernel will try to create a new address.
>
> But the kernel is not distinguish between the event of reaching
> max_addresses for an interface and failing to generate a new address.
> the kernel disable the temporary address after regenerate a new
> address 'regen_max_retry' times.
>
> According RFC4941 3.3.7:
>
> ---------------------------------------
>
> If DAD indicates the address is already in use,
> the node must generate a new randomized interface
> identifier as described in section 3.2 above, and
> repeat the previous steps as appropriate up to
> TEMP_IDGEN_RETRIES times.
>
> If after TEMP_IDGEN_RETRIES consecutive attempts no
> non-unique address was generated, the node must log
> a system error and must not attempt to generate
> temporary address for that interface.
>
> ------------------------------------------
>
> RFC4941 3.3.7 specifies that disabling the temp_address must happen
> upon the address is already in use, not reach the max_address,
> So we have to check the return err and distinguish the correct retry path.
>
> This fixes CVE-2013-0343
I don't think this patch fixes CVE-2013-0343.
>
> Signed-off-by: Ding Tianhong <dingtianhong@huawei.com>
> Tested-by: Wang Weidong <wangweidong1@huawei.com>
> Cc: David S. Miller <davem@davemloft.net>
> Cc: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
> Cc: Eric Dumazet <edumazet@google.com>
> ---
> net/ipv6/addrconf.c | 26 ++++++++++++++++++++++----
> 1 file changed, 22 insertions(+), 4 deletions(-)
>
> diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
> index da4241c..7b55464 100644
> --- a/net/ipv6/addrconf.c
> +++ b/net/ipv6/addrconf.c
> @@ -1134,10 +1134,28 @@ retry:
> if (IS_ERR_OR_NULL(ift)) {
> in6_ifa_put(ifp);
> in6_dev_put(idev);
> - pr_info("%s: retry temporary address regeneration\n", __func__);
> - tmpaddr = &addr;
> - write_lock(&idev->lock);
> - goto retry;
> +
> + /* According RFC4941 3.3.7:
> + * If DAD indicates the address is already in use,
> + * the node must generate a new randomized interface
> + * identifier as described in section 3.2 above, and
> + * repeat the previous steps as appropriate up to
> + * TEMP_IDGEN_RETRIES times.
> + * If after TEMP_IDGEN_RETRIES consecutive attempts no
> + * non-unique address was generated, the node must log
> + * a system error and must not attempt to generate
> + * temporary address for that interface.
> + * So we have to check the return err and distinguish
> + * the correct retry path.
> + */
> + if (PTR_ERR(ift) == -EEXIST) {
-EEXIST is not the same as "ipv6 address is is already used on the
subnet". I really don't see the point here. IMHO this breaks the intended
regeneration logic.
I fear a fix of CVE-2013-0343 will be a bit more complicated. ;) I give it a
thought.
Greetings,
Hannes
^ permalink raw reply
* Re: [PATCH net] skge: dma_sync the whole receive buffer
From: poma @ 2013-08-14 10:20 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: David Miller, netdev
In-Reply-To: <20130813180036.3e639789@nehalam.linuxnetplumber.net>
On 14.08.2013 03:00, Stephen Hemminger wrote:
> On Tue, 13 Aug 2013 15:09:55 -0700 (PDT)
> David Miller <davem@davemloft.net> wrote:
>
>> From: Stephen Hemminger <stephen@networkplumber.org>
>> Date: Sat, 10 Aug 2013 15:02:07 -0700
>>
>>> The DMA sync should sync the whole receive buffer, not just
>>> part of it. Fixes log messages dma_sync_check.
>>>
>>> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
>>
>> Applied, but I really suspect that your "check DMA mapping errors"
>> patch has added a serious regression. A regression much worse than
>> the bug you were trying to fix with that change.
>
> Argh. The problem is deeper than that. Device got broken somewhere between
> 3.2 and 3.4. My old Dlink card works on 3.2 but gets DMA errors on 3.4.
> The config's are different though so checking that as well.
>
Can I help you with debugging?
DGE-530T is rather solid device.
poma
^ permalink raw reply
* Re: [Linux-zigbee-devel] [PATCH] 6lowpan: handle only real link-local addresses
From: Werner Almesberger @ 2013-08-14 10:24 UTC (permalink / raw)
To: David Miller; +Cc: alex.aring, netdev, linux-zigbee-devel
In-Reply-To: <20130813.151230.1608414279292576217.davem@davemloft.net>
David Miller wrote:
> You're submitting 7 patches, one set is numbered 1-6 and this
> one has no number.
The unnumbered patch is independent from the rest. But yes, he
shouldn't have sent it in the same thread.
To provide a bit of context, 6LoWPAN support in the kernel is
currently in an embarrassingly badly broken state. On a good day,
you can get ping to an RFC-compliant peer to work, sometimes even
both ways, but only as long as you use link-local addresses and
keep the payload small. Beyond that, it's all bugland.
Alexander thus started to fix the 6LoWPAN issues he and others,
myself included, had bumped into. It's a lot of changes for a
relatively small file (6lowpan.c) and later on he'll have at
least one more batch for fragmentation, but when all that is
done, we'll finally have a stack that can actually do real work.
Alexander, since you'll have to re-submit anyway, you may want to
add a
Reviewed-by: Werner Almesberger <werner@almesberger.net>
to all the patches.
- Werner
^ permalink raw reply
* Re: question about netif_rx
From: Rami Rosen @ 2013-08-14 10:44 UTC (permalink / raw)
To: Francois Romieu
Cc: David Shwatrz, Julia Lawall, grant.likely, rob.herring, Netdev,
linux-kernel@vger.kernel.org, devicetree
In-Reply-To: <20130813204131.GA4696@electric-eye.fr.zoreil.com>
Hi,
BTW, this is not the only NAPI issue here. When looking into cleanup
of resources in this driver, a call to netif_napi_del() is missing
(though there is a call to napi_disable(), which is not enough for
proper cleanup).
Best,
Rami Rosen
http://ramirose.wix.com/ramirosen
On Tue, Aug 13, 2013 at 11:41 PM, Francois Romieu <romieu@fr.zoreil.com> wrote:
> (no top-post nor lazy quote please)
>
> David Shwatrz <dshwatrz@gmail.com> :
> [...]
>> In the napi_gro_receive() we check that the device supports
>> NETIF_F_GRO, but I don't see that we inspect checksum or that
>> NETIF_F_GRO is depends on checksum.
>
> napi_gro_receive is irrelevant. Let aside tunnel, the real work happens
> in the protocol specific gro_receive handlers.
>
> However I am an happy retard and I missed that tcp gro stopped depending
> on Rx checksum since commit 861b650101eb0c627d171eb18de81dddb93d395e. :o/
>
> So, yes, napi_gro_receive could be used.
>
> --
> Ueimor
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* [PATCHv2 net-next] 6lowpan: handle only real link-local addresses
From: Alexander Aring @ 2013-08-14 11:01 UTC (permalink / raw)
To: alex.bluesman.smirnov-Re5JQEeQqe8AvxtiuMwx3w
Cc: netdev-u79uwXL29TY76Z2rM5mHXA, davem-fT/PcQaiUtIeIZ0/mPfg9Q,
linux-zigbee-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
A link-local address isn't fe80::/10 it's fe80::/64
see http://tools.ietf.org/html/rfc4291#section-2.5.6
for more details.
Also fix a comment issue "local link" -> "link-local"
Signed-off-by: Alexander Aring <alex.aring-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Reviewed-by: Werner Almesberger <werner-SEdMjqphH88wryQfseakQg@public.gmane.org>
---
v2:
- Add "net-next" tag
net/ieee802154/6lowpan.h | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/net/ieee802154/6lowpan.h b/net/ieee802154/6lowpan.h
index 4b8f917..61f0ce9 100644
--- a/net/ieee802154/6lowpan.h
+++ b/net/ieee802154/6lowpan.h
@@ -83,8 +83,11 @@
#define ipaddr_prefixcmp(addr1, addr2, length) \
(memcmp(addr1, addr2, length >> 3) == 0)
-/* local link, i.e. FE80::/10 */
-#define is_addr_link_local(a) (((a)->s6_addr16[0]) == htons(0xFE80))
+/* link-local, i.e. FE80::/64 */
+#define is_addr_link_local(a) (((a)->s6_addr16[0]) == htons(0xFE80) && \
+ (((a)->s6_addr16[1]) == 0) && \
+ (((a)->s6_addr16[2]) == 0) && \
+ (((a)->s6_addr16[3]) == 0))
/*
* check whether we can compress the IID to 16 bits,
--
1.8.3.3
------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead.
Download for free and get started troubleshooting in minutes.
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
^ permalink raw reply related
* [PATCHv2 net-next 0/6] 6lowpan: uncompress of addresses fix
From: Alexander Aring @ 2013-08-14 11:01 UTC (permalink / raw)
To: alex.bluesman.smirnov-Re5JQEeQqe8AvxtiuMwx3w
Cc: netdev-u79uwXL29TY76Z2rM5mHXA, davem-fT/PcQaiUtIeIZ0/mPfg9Q,
linux-zigbee-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
The current implementation to uncompress addresses in a 6lowpan header
is completely broken.
This patch series fixes the parsing of addresses in a 6lowpan header.
It contains a major rewrite of the uncompress address function to parse
the address in a correct way.
Changes since v2:
- Add tags for net-next
- Change commit msg in Patch 1/6 that this patch depends for the following
patches
Alexander Aring (5):
6lowpan: init ipv6hdr buffer to zero
6lowpan: introduce lowpan_fetch_skb function
6lowpan: add function to uncompress multicast addr
6lowpan: lowpan_uncompress_addr with address_mode
6lowpan: handle context based source address
David Hauweele (1):
6lowpan: Fix fragmentation with link-local compressed addresses
net/ieee802154/6lowpan.c | 284 +++++++++++++++++++++++++++++++----------------
net/ieee802154/6lowpan.h | 20 +++-
2 files changed, 203 insertions(+), 101 deletions(-)
--
1.8.3.3
------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead.
Download for free and get started troubleshooting in minutes.
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
^ permalink raw reply
* [PATCH 1/6] 6lowpan: init ipv6hdr buffer to zero
From: Alexander Aring @ 2013-08-14 11:01 UTC (permalink / raw)
To: alex.bluesman.smirnov-Re5JQEeQqe8AvxtiuMwx3w
Cc: netdev-u79uwXL29TY76Z2rM5mHXA, davem-fT/PcQaiUtIeIZ0/mPfg9Q,
linux-zigbee-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
In-Reply-To: <1376478108-3539-1-git-send-email-alex.aring-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
This patch simplify the handling to set fields inside of struct ipv6hdr
to zero. Instead of setting some memory regions with memset to zero we
initialize the whole ipv6hdr to zero.
This is a simplification for parsing the 6lowpan header for the upcomming
patches.
Signed-off-by: Alexander Aring <alex.aring-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Reviewed-by: Werner Almesberger <werner-SEdMjqphH88wryQfseakQg@public.gmane.org>
---
net/ieee802154/6lowpan.c | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)
diff --git a/net/ieee802154/6lowpan.c b/net/ieee802154/6lowpan.c
index 3b9d5f2..92429db 100644
--- a/net/ieee802154/6lowpan.c
+++ b/net/ieee802154/6lowpan.c
@@ -223,10 +223,6 @@ lowpan_uncompress_addr(struct sk_buff *skb, struct in6_addr *ipaddr,
if (prefcount > 0)
memcpy(ipaddr, prefix, prefcount);
- if (prefcount + postcount < 16)
- memset(&ipaddr->s6_addr[prefcount], 0,
- 16 - (prefcount + postcount));
-
if (postcount > 0) {
memcpy(&ipaddr->s6_addr[16 - postcount], skb->data, postcount);
skb_pull(skb, postcount);
@@ -723,7 +719,7 @@ frame_err:
static int
lowpan_process_data(struct sk_buff *skb)
{
- struct ipv6hdr hdr;
+ struct ipv6hdr hdr = {};
u8 tmp, iphc0, iphc1, num_context = 0;
u8 *_saddr, *_daddr;
int err;
@@ -868,8 +864,6 @@ lowpan_process_data(struct sk_buff *skb)
hdr.priority = ((tmp >> 2) & 0x0f);
hdr.flow_lbl[0] = ((tmp << 6) & 0xC0) | ((tmp >> 2) & 0x30);
- hdr.flow_lbl[1] = 0;
- hdr.flow_lbl[2] = 0;
break;
/*
* Flow Label carried in-line
@@ -885,10 +879,6 @@ lowpan_process_data(struct sk_buff *skb)
break;
/* Traffic Class and Flow Label are elided */
case 3: /* 11b */
- hdr.priority = 0;
- hdr.flow_lbl[0] = 0;
- hdr.flow_lbl[1] = 0;
- hdr.flow_lbl[2] = 0;
break;
default:
break;
--
1.8.3.3
------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead.
Download for free and get started troubleshooting in minutes.
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
^ permalink raw reply related
* [PATCH net-next 2/6] 6lowpan: Fix fragmentation with link-local compressed addresses
From: Alexander Aring @ 2013-08-14 11:01 UTC (permalink / raw)
To: alex.bluesman.smirnov-Re5JQEeQqe8AvxtiuMwx3w
Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
linux-zigbee-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
David Hauweele, davem-fT/PcQaiUtIeIZ0/mPfg9Q
In-Reply-To: <1376478108-3539-1-git-send-email-alex.aring-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
From: David Hauweele <david-1EggE+PRa6vk1uMJSBkQmQ@public.gmane.org>
When a new 6lowpan fragment is received, a skbuff is allocated for
the reassembled packet. However when a 6lowpan packet compresses
link-local addresses based on link-layer addresses, the processing
function relies on the skb mac control block to find the related
link-layer address.
This patch copies the control block from the first fragment into
the newly allocated skb to keep a trace of the link-layer addresses
in case of a link-local compressed address.
Edit: small changes on comment issue
Signed-off-by: David Hauweele <david-1EggE+PRa6vk1uMJSBkQmQ@public.gmane.org>
Signed-off-by: Alexander Aring <alex.aring-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Reviewed-by: Werner Almesberger <werner-SEdMjqphH88wryQfseakQg@public.gmane.org>
---
net/ieee802154/6lowpan.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/net/ieee802154/6lowpan.c b/net/ieee802154/6lowpan.c
index 92429db..632b3fd 100644
--- a/net/ieee802154/6lowpan.c
+++ b/net/ieee802154/6lowpan.c
@@ -698,6 +698,12 @@ lowpan_alloc_new_frame(struct sk_buff *skb, u16 len, u16 tag)
skb_reserve(frame->skb, sizeof(struct ipv6hdr));
skb_put(frame->skb, frame->length);
+ /* copy the first control block to keep a
+ * trace of the link-layer addresses in case
+ * of a link-local compressed address
+ */
+ memcpy(frame->skb->cb, skb->cb, sizeof(skb->cb));
+
init_timer(&frame->timer);
/* time out is the same as for ipv6 - 60 sec */
frame->timer.expires = jiffies + LOWPAN_FRAG_TIMEOUT;
--
1.8.3.3
------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead.
Download for free and get started troubleshooting in minutes.
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
^ permalink raw reply related
* [PATCH net-next 3/6] 6lowpan: introduce lowpan_fetch_skb function
From: Alexander Aring @ 2013-08-14 11:01 UTC (permalink / raw)
To: alex.bluesman.smirnov-Re5JQEeQqe8AvxtiuMwx3w
Cc: netdev-u79uwXL29TY76Z2rM5mHXA, davem-fT/PcQaiUtIeIZ0/mPfg9Q,
linux-zigbee-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
In-Reply-To: <1376478108-3539-1-git-send-email-alex.aring-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
This patch adds a helper function to parse the ipv6 header to a
6lowpan header in stream.
This function checks first if we can pull data with a specific
length from a skb. If this seems to be okay, we copy skb data to
a destination pointer and run skb_pull.
Signed-off-by: Alexander Aring <alex.aring-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Reviewed-by: Werner Almesberger <werner-SEdMjqphH88wryQfseakQg@public.gmane.org>
---
net/ieee802154/6lowpan.h | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/net/ieee802154/6lowpan.h b/net/ieee802154/6lowpan.h
index 61f0ce9..e3348ec 100644
--- a/net/ieee802154/6lowpan.h
+++ b/net/ieee802154/6lowpan.h
@@ -233,4 +233,16 @@
dest = 16 bit inline */
#define LOWPAN_NHC_UDP_CS_P_11 0xF3 /* source & dest = 0xF0B + 4bit inline */
+static inline bool lowpan_fetch_skb(struct sk_buff *skb,
+ void *data, const unsigned int len)
+{
+ if (unlikely(!pskb_may_pull(skb, len)))
+ return true;
+
+ skb_copy_from_linear_data(skb, data, len);
+ skb_pull(skb, len);
+
+ return false;
+}
+
#endif /* __6LOWPAN_H__ */
--
1.8.3.3
------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead.
Download for free and get started troubleshooting in minutes.
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
^ permalink raw reply related
* [PATCH net-next 4/6] 6lowpan: add function to uncompress multicast addr
From: Alexander Aring @ 2013-08-14 11:01 UTC (permalink / raw)
To: alex.bluesman.smirnov-Re5JQEeQqe8AvxtiuMwx3w
Cc: netdev-u79uwXL29TY76Z2rM5mHXA, davem-fT/PcQaiUtIeIZ0/mPfg9Q,
linux-zigbee-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
In-Reply-To: <1376478108-3539-1-git-send-email-alex.aring-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Add function to uncompress multicast address.
This function split the uncompress function for a multicast address
in a seperate function.
To uncompress a multicast address is different than a other
non-multicasts addresses according to rfc6282.
Signed-off-by: Alexander Aring <alex.aring-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Reviewed-by: Werner Almesberger <werner-SEdMjqphH88wryQfseakQg@public.gmane.org>
---
net/ieee802154/6lowpan.c | 78 ++++++++++++++++++++++++++++++++++++------------
1 file changed, 59 insertions(+), 19 deletions(-)
diff --git a/net/ieee802154/6lowpan.c b/net/ieee802154/6lowpan.c
index 632b3fd..0df8874 100644
--- a/net/ieee802154/6lowpan.c
+++ b/net/ieee802154/6lowpan.c
@@ -88,15 +88,6 @@ static const u8 lowpan_unc_llconf[] = {0x0f, 0x28, 0x22, 0x20};
*/
static const u8 lowpan_unc_ctxconf[] = {0x00, 0x88, 0x82, 0x80};
-/*
- * Uncompression of ctx-base
- * 0 -> 0 bits from packet
- * 1 -> 2 bytes from prefix - bunch of zeroes 5 from packet
- * 2 -> 2 bytes from prefix - zeroes + 3 from packet
- * 3 -> 2 bytes from prefix - infer 1 bytes from lladdr
- */
-static const u8 lowpan_unc_mxconf[] = {0x0f, 0x25, 0x23, 0x21};
-
/* Link local prefix */
static const u8 lowpan_llprefix[] = {0xfe, 0x80};
@@ -240,6 +231,63 @@ lowpan_uncompress_addr(struct sk_buff *skb, struct in6_addr *ipaddr,
return 0;
}
+/* Uncompress function for multicast destination address,
+ * when M bit is set.
+ */
+static int
+lowpan_uncompress_multicast_daddr(struct sk_buff *skb,
+ struct in6_addr *ipaddr,
+ const u8 dam)
+{
+ bool fail;
+
+ switch (dam) {
+ case LOWPAN_IPHC_DAM_00:
+ /* 00: 128 bits. The full address
+ * is carried in-line.
+ */
+ fail = lowpan_fetch_skb(skb, ipaddr->s6_addr, 16);
+ break;
+ case LOWPAN_IPHC_DAM_01:
+ /* 01: 48 bits. The address takes
+ * the form ffXX::00XX:XXXX:XXXX.
+ */
+ ipaddr->s6_addr[0] = 0xFF;
+ fail = lowpan_fetch_skb(skb, &ipaddr->s6_addr[1], 1);
+ fail |= lowpan_fetch_skb(skb, &ipaddr->s6_addr[11], 5);
+ break;
+ case LOWPAN_IPHC_DAM_10:
+ /* 10: 32 bits. The address takes
+ * the form ffXX::00XX:XXXX.
+ */
+ ipaddr->s6_addr[0] = 0xFF;
+ fail = lowpan_fetch_skb(skb, &ipaddr->s6_addr[1], 1);
+ fail |= lowpan_fetch_skb(skb, &ipaddr->s6_addr[13], 3);
+ break;
+ case LOWPAN_IPHC_DAM_11:
+ /* 11: 8 bits. The address takes
+ * the form ff02::00XX.
+ */
+ ipaddr->s6_addr[0] = 0xFF;
+ ipaddr->s6_addr[1] = 0x02;
+ fail = lowpan_fetch_skb(skb, &ipaddr->s6_addr[15], 1);
+ break;
+ default:
+ pr_debug("DAM value has a wrong value: 0x%x\n", dam);
+ return -EINVAL;
+ }
+
+ if (fail) {
+ pr_debug("Failed to fetch skb data\n");
+ return -EIO;
+ }
+
+ pr_debug("Reconstructed ipv6 multicast addr is:\n");
+ lowpan_raw_dump_inline(NULL, NULL, ipaddr->s6_addr, 16);
+
+ return 0;
+}
+
static void
lowpan_compress_udp_header(u8 **hc06_ptr, struct sk_buff *skb)
{
@@ -927,16 +975,8 @@ lowpan_process_data(struct sk_buff *skb)
pr_debug("dest: context-based mcast compression\n");
/* TODO: implement this */
} else {
- u8 prefix[] = {0xff, 0x02};
-
- pr_debug("dest: non context-based mcast compression\n");
- if (0 < tmp && tmp < 3) {
- if (lowpan_fetch_skb_u8(skb, &prefix[1]))
- goto drop;
- }
-
- err = lowpan_uncompress_addr(skb, &hdr.daddr, prefix,
- lowpan_unc_mxconf[tmp], NULL);
+ err = lowpan_uncompress_multicast_daddr(
+ skb, &hdr.daddr, tmp);
if (err)
goto drop;
}
--
1.8.3.3
------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead.
Download for free and get started troubleshooting in minutes.
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
^ permalink raw reply related
* [PATCH net-next 5/6] 6lowpan: lowpan_uncompress_addr with address_mode
From: Alexander Aring @ 2013-08-14 11:01 UTC (permalink / raw)
To: alex.bluesman.smirnov-Re5JQEeQqe8AvxtiuMwx3w
Cc: netdev-u79uwXL29TY76Z2rM5mHXA, davem-fT/PcQaiUtIeIZ0/mPfg9Q,
linux-zigbee-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
In-Reply-To: <1376478108-3539-1-git-send-email-alex.aring-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
This patch drop the pre and postcount calculation from the
lowpan_uncompress_addr function.
We use instead a switch case over address_mode value, it's easier
to understand what's going on there.
Signed-off-by: Alexander Aring <alex.aring-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Reviewed-by: Werner Almesberger <werner-SEdMjqphH88wryQfseakQg@public.gmane.org>
---
net/ieee802154/6lowpan.c | 144 +++++++++++++++++++++++++----------------------
net/ieee802154/6lowpan.h | 8 ++-
2 files changed, 82 insertions(+), 70 deletions(-)
diff --git a/net/ieee802154/6lowpan.c b/net/ieee802154/6lowpan.c
index 0df8874..d299560 100644
--- a/net/ieee802154/6lowpan.c
+++ b/net/ieee802154/6lowpan.c
@@ -67,30 +67,6 @@ static const u8 lowpan_ttl_values[] = {0, 1, 64, 255};
static LIST_HEAD(lowpan_devices);
-/*
- * Uncompression of linklocal:
- * 0 -> 16 bytes from packet
- * 1 -> 2 bytes from prefix - bunch of zeroes and 8 from packet
- * 2 -> 2 bytes from prefix - zeroes + 2 from packet
- * 3 -> 2 bytes from prefix - infer 8 bytes from lladdr
- *
- * NOTE: => the uncompress function does change 0xf to 0x10
- * NOTE: 0x00 => no-autoconfig => unspecified
- */
-static const u8 lowpan_unc_llconf[] = {0x0f, 0x28, 0x22, 0x20};
-
-/*
- * Uncompression of ctx-based:
- * 0 -> 0 bits from packet [unspecified / reserved]
- * 1 -> 8 bytes from prefix - bunch of zeroes and 8 from packet
- * 2 -> 8 bytes from prefix - zeroes + 2 from packet
- * 3 -> 8 bytes from prefix - infer 8 bytes from lladdr
- */
-static const u8 lowpan_unc_ctxconf[] = {0x00, 0x88, 0x82, 0x80};
-
-/* Link local prefix */
-static const u8 lowpan_llprefix[] = {0xfe, 0x80};
-
/* private device info */
struct lowpan_dev_info {
struct net_device *real_dev; /* real WPAN device ptr */
@@ -182,50 +158,86 @@ lowpan_compress_addr_64(u8 **hc06_ptr, u8 shift, const struct in6_addr *ipaddr,
return rol8(val, shift);
}
-static void
-lowpan_uip_ds6_set_addr_iid(struct in6_addr *ipaddr, unsigned char *lladdr)
-{
- memcpy(&ipaddr->s6_addr[8], lladdr, IEEE802154_ADDR_LEN);
- /* second bit-flip (Universe/Local) is done according RFC2464 */
- ipaddr->s6_addr[8] ^= 0x02;
-}
-
/*
- * Uncompress addresses based on a prefix and a postfix with zeroes in
- * between. If the postfix is zero in length it will use the link address
- * to configure the IP address (autoconf style).
- * pref_post_count takes a byte where the first nibble specify prefix count
- * and the second postfix count (NOTE: 15/0xf => 16 bytes copy).
+ * Uncompress address function for source and
+ * destination address(non-multicast).
+ *
+ * address_mode is sam value or dam value.
*/
static int
-lowpan_uncompress_addr(struct sk_buff *skb, struct in6_addr *ipaddr,
- u8 const *prefix, u8 pref_post_count, unsigned char *lladdr)
+lowpan_uncompress_addr(struct sk_buff *skb,
+ struct in6_addr *ipaddr,
+ const u8 address_mode,
+ const struct ieee802154_addr *lladdr)
{
- u8 prefcount = pref_post_count >> 4;
- u8 postcount = pref_post_count & 0x0f;
-
- /* full nibble 15 => 16 */
- prefcount = (prefcount == 15 ? 16 : prefcount);
- postcount = (postcount == 15 ? 16 : postcount);
-
- if (lladdr)
- lowpan_raw_dump_inline(__func__, "linklocal address",
- lladdr, IEEE802154_ADDR_LEN);
- if (prefcount > 0)
- memcpy(ipaddr, prefix, prefcount);
-
- if (postcount > 0) {
- memcpy(&ipaddr->s6_addr[16 - postcount], skb->data, postcount);
- skb_pull(skb, postcount);
- } else if (prefcount > 0) {
- if (lladdr == NULL)
+ bool fail;
+
+ switch (address_mode) {
+ case LOWPAN_IPHC_ADDR_00:
+ /* for global link addresses */
+ fail = lowpan_fetch_skb(skb, ipaddr->s6_addr, 16);
+ break;
+ case LOWPAN_IPHC_ADDR_01:
+ /* fe:80::XXXX:XXXX:XXXX:XXXX */
+ ipaddr->s6_addr[0] = 0xFE;
+ ipaddr->s6_addr[1] = 0x80;
+ fail = lowpan_fetch_skb(skb, &ipaddr->s6_addr[8], 8);
+ break;
+ case LOWPAN_IPHC_ADDR_02:
+ /* fe:80::ff:fe00:XXXX */
+ ipaddr->s6_addr[0] = 0xFE;
+ ipaddr->s6_addr[1] = 0x80;
+ ipaddr->s6_addr[11] = 0xFF;
+ ipaddr->s6_addr[12] = 0xFE;
+ fail = lowpan_fetch_skb(skb, &ipaddr->s6_addr[14], 2);
+ break;
+ case LOWPAN_IPHC_ADDR_03:
+ fail = false;
+ switch (lladdr->addr_type) {
+ case IEEE802154_ADDR_LONG:
+ /* fe:80::XXXX:XXXX:XXXX:XXXX
+ * \_________________/
+ * hwaddr
+ */
+ ipaddr->s6_addr[0] = 0xFE;
+ ipaddr->s6_addr[1] = 0x80;
+ memcpy(&ipaddr->s6_addr[8], lladdr->hwaddr,
+ IEEE802154_ADDR_LEN);
+ /* second bit-flip (Universe/Local)
+ * is done according RFC2464
+ */
+ ipaddr->s6_addr[8] ^= 0x02;
+ break;
+ case IEEE802154_ADDR_SHORT:
+ /* fe:80::ff:fe00:XXXX
+ * \__/
+ * short_addr
+ *
+ * Universe/Local bit is zero.
+ */
+ ipaddr->s6_addr[0] = 0xFE;
+ ipaddr->s6_addr[1] = 0x80;
+ ipaddr->s6_addr[11] = 0xFF;
+ ipaddr->s6_addr[12] = 0xFE;
+ memcpy(&ipaddr->s6_addr[14], &lladdr->short_addr,
+ UIP_802154_SHORTADDR_LEN);
+ break;
+ default:
+ pr_debug("Invalid addr_type set\n");
return -EINVAL;
+ }
+ break;
+ default:
+ pr_debug("Invalid address mode value: 0x%x\n", address_mode);
+ return -EINVAL;
+ }
- /* no IID based configuration if no prefix and no data */
- lowpan_uip_ds6_set_addr_iid(ipaddr, lladdr);
+ if (fail) {
+ pr_debug("Failed to fetch skb data\n");
+ return -EIO;
}
- pr_debug("uncompressing %d + %d => ", prefcount, postcount);
+ pr_debug("Reconstructed ipv6 addr is:\n");
lowpan_raw_dump_inline(NULL, NULL, ipaddr->s6_addr, 16);
return 0;
@@ -775,7 +787,7 @@ lowpan_process_data(struct sk_buff *skb)
{
struct ipv6hdr hdr = {};
u8 tmp, iphc0, iphc1, num_context = 0;
- u8 *_saddr, *_daddr;
+ const struct ieee802154_addr *_saddr, *_daddr;
int err;
lowpan_raw_dump_table(__func__, "raw skb data dump", skb->data,
@@ -878,8 +890,8 @@ lowpan_process_data(struct sk_buff *skb)
if (lowpan_fetch_skb_u8(skb, &iphc1))
goto drop;
- _saddr = mac_cb(skb)->sa.hwaddr;
- _daddr = mac_cb(skb)->da.hwaddr;
+ _saddr = &mac_cb(skb)->sa;
+ _daddr = &mac_cb(skb)->da;
pr_debug("iphc0 = %02x, iphc1 = %02x\n", iphc0, iphc1);
@@ -961,8 +973,7 @@ lowpan_process_data(struct sk_buff *skb)
/* Source address uncompression */
pr_debug("source address stateless compression\n");
- err = lowpan_uncompress_addr(skb, &hdr.saddr, lowpan_llprefix,
- lowpan_unc_llconf[tmp], skb->data);
+ err = lowpan_uncompress_addr(skb, &hdr.saddr, tmp, _saddr);
if (err)
goto drop;
@@ -982,8 +993,7 @@ lowpan_process_data(struct sk_buff *skb)
}
} else {
pr_debug("dest: stateless compression\n");
- err = lowpan_uncompress_addr(skb, &hdr.daddr, lowpan_llprefix,
- lowpan_unc_llconf[tmp], skb->data);
+ err = lowpan_uncompress_addr(skb, &hdr.daddr, tmp, _daddr);
if (err)
goto drop;
}
diff --git a/net/ieee802154/6lowpan.h b/net/ieee802154/6lowpan.h
index e3348ec..6596644 100644
--- a/net/ieee802154/6lowpan.h
+++ b/net/ieee802154/6lowpan.h
@@ -196,10 +196,12 @@
/* Values of fields within the IPHC encoding second byte */
#define LOWPAN_IPHC_CID 0x80
+#define LOWPAN_IPHC_ADDR_00 0x00
+#define LOWPAN_IPHC_ADDR_01 0x01
+#define LOWPAN_IPHC_ADDR_02 0x02
+#define LOWPAN_IPHC_ADDR_03 0x03
+
#define LOWPAN_IPHC_SAC 0x40
-#define LOWPAN_IPHC_SAM_00 0x00
-#define LOWPAN_IPHC_SAM_01 0x10
-#define LOWPAN_IPHC_SAM_10 0x20
#define LOWPAN_IPHC_SAM 0x30
#define LOWPAN_IPHC_SAM_BIT 4
--
1.8.3.3
------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead.
Download for free and get started troubleshooting in minutes.
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
^ permalink raw reply related
* [PATCH net-next 6/6] 6lowpan: handle context based source address
From: Alexander Aring @ 2013-08-14 11:01 UTC (permalink / raw)
To: alex.bluesman.smirnov-Re5JQEeQqe8AvxtiuMwx3w
Cc: netdev-u79uwXL29TY76Z2rM5mHXA, davem-fT/PcQaiUtIeIZ0/mPfg9Q,
linux-zigbee-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
In-Reply-To: <1376478108-3539-1-git-send-email-alex.aring-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Handle context based address when a unspecific address is specified.
For other context based address we print a warning and drop the packet
currently because we don't support it right now.
Signed-off-by: Alexander Aring <alex.aring-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Reviewed-by: Werner Almesberger <werner-SEdMjqphH88wryQfseakQg@public.gmane.org>
---
net/ieee802154/6lowpan.c | 48 +++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 45 insertions(+), 3 deletions(-)
diff --git a/net/ieee802154/6lowpan.c b/net/ieee802154/6lowpan.c
index d299560..90eddce 100644
--- a/net/ieee802154/6lowpan.c
+++ b/net/ieee802154/6lowpan.c
@@ -243,6 +243,39 @@ lowpan_uncompress_addr(struct sk_buff *skb,
return 0;
}
+/* Uncompress address function for source context
+ * based address(non-multicast).
+ */
+static int
+lowpan_uncompress_context_based_src_addr(struct sk_buff *skb,
+ struct in6_addr *ipaddr,
+ const u8 sam)
+{
+ switch (sam) {
+ case LOWPAN_IPHC_ADDR_00:
+ /* unspec address ::
+ * Do nothing, address is already ::
+ */
+ break;
+ case LOWPAN_IPHC_ADDR_01:
+ /* TODO */
+ case LOWPAN_IPHC_ADDR_02:
+ /* TODO */
+ case LOWPAN_IPHC_ADDR_03:
+ /* TODO */
+ netdev_warn(skb->dev, "SAM value 0x%x not supported\n", sam);
+ return -EINVAL;
+ default:
+ pr_debug("Invalid sam value: 0x%x\n", sam);
+ return -EINVAL;
+ }
+
+ pr_debug("Reconstructed context based ipv6 src addr is:\n");
+ lowpan_raw_dump_inline(NULL, NULL, ipaddr->s6_addr, 16);
+
+ return 0;
+}
+
/* Uncompress function for multicast destination address,
* when M bit is set.
*/
@@ -971,9 +1004,18 @@ lowpan_process_data(struct sk_buff *skb)
/* Extract SAM to the tmp variable */
tmp = ((iphc1 & LOWPAN_IPHC_SAM) >> LOWPAN_IPHC_SAM_BIT) & 0x03;
- /* Source address uncompression */
- pr_debug("source address stateless compression\n");
- err = lowpan_uncompress_addr(skb, &hdr.saddr, tmp, _saddr);
+ if (iphc1 & LOWPAN_IPHC_SAC) {
+ /* Source address context based uncompression */
+ pr_debug("SAC bit is set. Handle context based source address.\n");
+ err = lowpan_uncompress_context_based_src_addr(
+ skb, &hdr.saddr, tmp);
+ } else {
+ /* Source address uncompression */
+ pr_debug("source address stateless compression\n");
+ err = lowpan_uncompress_addr(skb, &hdr.saddr, tmp, _saddr);
+ }
+
+ /* Check on error of previous branch */
if (err)
goto drop;
--
1.8.3.3
------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead.
Download for free and get started troubleshooting in minutes.
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
^ permalink raw reply related
* Re: [PATCHv3 net-next ] xfrm: Update xfrm_state lifetime expire after clock_was_set
From: Steffen Klassert @ 2013-08-14 11:04 UTC (permalink / raw)
To: Fan Du; +Cc: davem, herbert, netdev
In-Reply-To: <520B14EA.4080903@windriver.com>
On Wed, Aug 14, 2013 at 01:26:02PM +0800, Fan Du wrote:
>
> From bf282199fd172d1bbc6dcd0e38d1b8fc2192e5f5 Mon Sep 17 00:00:00 2001
> From: Fan Du <fan.du@windriver.com>
> Date: Wed, 14 Aug 2013 12:59:11 +0800
> Subject: [PATCHv3 net-next ] xfrm: Update xfrm_state lifetime expire after clock_was_set
>
> After clock_was_set called to set new time or host resume from suspend
> state. Notify IKED with soft timeout for SAs which haven't reach its
> soft timeout limit. For those dying SAs, arrange them to hard expire.
>
> This modification is characterized by SA is sensible to any degree of
> clock changes while as SA lifetime is marked by second.
>
> Another point is clock_was_set is traversing all net name space to
> update SA time while holding rtnl_lock, it may not scale very well.
>
> Signed-off-by: Fan Du <fan.du@windriver.com>
>
> v3:
> - Fix lockdep complaint about circular locking with trying to acquire
> state->clock while holding xfrm_state_lock.
Fan, please resubmit the whole patchset and not single patches from a
patchset. Also, please Cc Thomas Gleixner for review of the hrtimer
changes when you resubmit.
Thanks!
^ permalink raw reply
* [PATCH net v3] xfrm: make local error reporting more robust
From: Hannes Frederic Sowa @ 2013-08-14 11:05 UTC (permalink / raw)
To: netdev; +Cc: steffen.klassert
In xfrm4 and xfrm6 we need to take care about sockets of the other
address family. This could happen because a 6in4 or 4in6 tunnel could
get protected by ipsec.
Because we don't want to have a run-time dependency on ipv6 when only
using ipv4 xfrm we have to embed a pointer to the correct local_error
function in xfrm_state_afinet and look it up when returning an error
depending on the socket address family.
Thanks to vi0ss for the great bug report:
<https://bugzilla.kernel.org/show_bug.cgi?id=58691>
v2:
a) fix two more unsafe interpretations of skb->sk as ipv6 socket
(xfrm6_local_dontfrag and __xfrm6_output)
v3:
a) add an EXPORT_SYMBOL_GPL(xfrm_local_error) to fix a link error when
building ipv6 as a module (thanks to Steffen Klassert)
Reported-by: <vi0oss@gmail.com>
Cc: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
---
include/net/xfrm.h | 6 ++++++
net/ipv4/xfrm4_output.c | 12 ++++++++++--
net/ipv4/xfrm4_state.c | 1 +
net/ipv6/xfrm6_output.c | 10 ++++++----
net/ipv6/xfrm6_state.c | 1 +
net/xfrm/xfrm_output.c | 13 +++++++++++++
net/xfrm/xfrm_state.c | 7 ++-----
7 files changed, 39 insertions(+), 11 deletions(-)
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
index 94ce082..e823786 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -341,10 +341,13 @@ struct xfrm_state_afinfo {
struct sk_buff *skb);
int (*transport_finish)(struct sk_buff *skb,
int async);
+ void (*local_error)(struct sk_buff *skb, u32 mtu);
};
extern int xfrm_state_register_afinfo(struct xfrm_state_afinfo *afinfo);
extern int xfrm_state_unregister_afinfo(struct xfrm_state_afinfo *afinfo);
+extern struct xfrm_state_afinfo *xfrm_state_get_afinfo(unsigned int family);
+extern void xfrm_state_put_afinfo(struct xfrm_state_afinfo *afinfo);
extern void xfrm_state_delete_tunnel(struct xfrm_state *x);
@@ -1477,6 +1480,7 @@ extern int xfrm_input_resume(struct sk_buff *skb, int nexthdr);
extern int xfrm_output_resume(struct sk_buff *skb, int err);
extern int xfrm_output(struct sk_buff *skb);
extern int xfrm_inner_extract_output(struct xfrm_state *x, struct sk_buff *skb);
+extern void xfrm_local_error(struct sk_buff *skb, int mtu);
extern int xfrm4_extract_header(struct sk_buff *skb);
extern int xfrm4_extract_input(struct xfrm_state *x, struct sk_buff *skb);
extern int xfrm4_rcv_encap(struct sk_buff *skb, int nexthdr, __be32 spi,
@@ -1497,6 +1501,7 @@ extern int xfrm4_tunnel_register(struct xfrm_tunnel *handler, unsigned short fam
extern int xfrm4_tunnel_deregister(struct xfrm_tunnel *handler, unsigned short family);
extern int xfrm4_mode_tunnel_input_register(struct xfrm_tunnel *handler);
extern int xfrm4_mode_tunnel_input_deregister(struct xfrm_tunnel *handler);
+extern void xfrm4_local_error(struct sk_buff *skb, u32 mtu);
extern int xfrm6_extract_header(struct sk_buff *skb);
extern int xfrm6_extract_input(struct xfrm_state *x, struct sk_buff *skb);
extern int xfrm6_rcv_spi(struct sk_buff *skb, int nexthdr, __be32 spi);
@@ -1514,6 +1519,7 @@ extern int xfrm6_output(struct sk_buff *skb);
extern int xfrm6_output_finish(struct sk_buff *skb);
extern int xfrm6_find_1stfragopt(struct xfrm_state *x, struct sk_buff *skb,
u8 **prevhdr);
+extern void xfrm6_local_error(struct sk_buff *skb, u32 mtu);
#ifdef CONFIG_XFRM
extern int xfrm4_udp_encap_rcv(struct sock *sk, struct sk_buff *skb);
diff --git a/net/ipv4/xfrm4_output.c b/net/ipv4/xfrm4_output.c
index 327a617..7a5491f 100644
--- a/net/ipv4/xfrm4_output.c
+++ b/net/ipv4/xfrm4_output.c
@@ -33,8 +33,7 @@ static int xfrm4_tunnel_check_size(struct sk_buff *skb)
mtu = dst_mtu(dst);
if (skb->len > mtu) {
if (skb->sk)
- ip_local_error(skb->sk, EMSGSIZE, ip_hdr(skb)->daddr,
- inet_sk(skb->sk)->inet_dport, mtu);
+ xfrm_local_error(skb, mtu);
else
icmp_send(skb, ICMP_DEST_UNREACH,
ICMP_FRAG_NEEDED, htonl(mtu));
@@ -99,3 +98,12 @@ int xfrm4_output(struct sk_buff *skb)
x->outer_mode->afinfo->output_finish,
!(IPCB(skb)->flags & IPSKB_REROUTED));
}
+
+void xfrm4_local_error(struct sk_buff *skb, u32 mtu)
+{
+ struct iphdr *hdr;
+
+ hdr = skb->encapsulation ? inner_ip_hdr(skb) : ip_hdr(skb);
+ ip_local_error(skb->sk, EMSGSIZE, hdr->daddr,
+ inet_sk(skb->sk)->inet_dport, mtu);
+}
diff --git a/net/ipv4/xfrm4_state.c b/net/ipv4/xfrm4_state.c
index 9258e75..0b2a064 100644
--- a/net/ipv4/xfrm4_state.c
+++ b/net/ipv4/xfrm4_state.c
@@ -83,6 +83,7 @@ static struct xfrm_state_afinfo xfrm4_state_afinfo = {
.extract_input = xfrm4_extract_input,
.extract_output = xfrm4_extract_output,
.transport_finish = xfrm4_transport_finish,
+ .local_error = xfrm4_local_error,
};
void __init xfrm4_state_init(void)
diff --git a/net/ipv6/xfrm6_output.c b/net/ipv6/xfrm6_output.c
index 8755a30..b64fff3 100644
--- a/net/ipv6/xfrm6_output.c
+++ b/net/ipv6/xfrm6_output.c
@@ -34,8 +34,10 @@ static int xfrm6_local_dontfrag(struct sk_buff *skb)
struct sock *sk = skb->sk;
if (sk) {
- proto = sk->sk_protocol;
+ if (sk->sk_family != AF_INET6)
+ return 0;
+ proto = sk->sk_protocol;
if (proto == IPPROTO_UDP || proto == IPPROTO_RAW)
return inet6_sk(sk)->dontfrag;
}
@@ -54,7 +56,7 @@ static void xfrm6_local_rxpmtu(struct sk_buff *skb, u32 mtu)
ipv6_local_rxpmtu(sk, &fl6, mtu);
}
-static void xfrm6_local_error(struct sk_buff *skb, u32 mtu)
+void xfrm6_local_error(struct sk_buff *skb, u32 mtu)
{
struct flowi6 fl6;
struct sock *sk = skb->sk;
@@ -80,7 +82,7 @@ static int xfrm6_tunnel_check_size(struct sk_buff *skb)
if (xfrm6_local_dontfrag(skb))
xfrm6_local_rxpmtu(skb, mtu);
else if (skb->sk)
- xfrm6_local_error(skb, mtu);
+ xfrm_local_error(skb, mtu);
else
icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu);
ret = -EMSGSIZE;
@@ -142,7 +144,7 @@ static int __xfrm6_output(struct sk_buff *skb)
xfrm6_local_rxpmtu(skb, mtu);
return -EMSGSIZE;
} else if (!skb->local_df && skb->len > mtu && skb->sk) {
- xfrm6_local_error(skb, mtu);
+ xfrm_local_error(skb, mtu);
return -EMSGSIZE;
}
diff --git a/net/ipv6/xfrm6_state.c b/net/ipv6/xfrm6_state.c
index d8c70b8..3fc9701 100644
--- a/net/ipv6/xfrm6_state.c
+++ b/net/ipv6/xfrm6_state.c
@@ -183,6 +183,7 @@ static struct xfrm_state_afinfo xfrm6_state_afinfo = {
.extract_input = xfrm6_extract_input,
.extract_output = xfrm6_extract_output,
.transport_finish = xfrm6_transport_finish,
+ .local_error = xfrm6_local_error,
};
int __init xfrm6_state_init(void)
diff --git a/net/xfrm/xfrm_output.c b/net/xfrm/xfrm_output.c
index eb4a842..6f5fc61 100644
--- a/net/xfrm/xfrm_output.c
+++ b/net/xfrm/xfrm_output.c
@@ -214,5 +214,18 @@ int xfrm_inner_extract_output(struct xfrm_state *x, struct sk_buff *skb)
return inner_mode->afinfo->extract_output(x, skb);
}
+void xfrm_local_error(struct sk_buff *skb, int mtu)
+{
+ struct xfrm_state_afinfo *afinfo;
+
+ afinfo = xfrm_state_get_afinfo(skb->sk->sk_family);
+ if (!afinfo)
+ return;
+
+ afinfo->local_error(skb, mtu);
+ xfrm_state_put_afinfo(afinfo);
+}
+
EXPORT_SYMBOL_GPL(xfrm_output);
EXPORT_SYMBOL_GPL(xfrm_inner_extract_output);
+EXPORT_SYMBOL_GPL(xfrm_local_error);
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
index 78f66fa..54c0acd 100644
--- a/net/xfrm/xfrm_state.c
+++ b/net/xfrm/xfrm_state.c
@@ -39,9 +39,6 @@ static DEFINE_SPINLOCK(xfrm_state_lock);
static unsigned int xfrm_state_hashmax __read_mostly = 1 * 1024 * 1024;
-static struct xfrm_state_afinfo *xfrm_state_get_afinfo(unsigned int family);
-static void xfrm_state_put_afinfo(struct xfrm_state_afinfo *afinfo);
-
static inline unsigned int xfrm_dst_hash(struct net *net,
const xfrm_address_t *daddr,
const xfrm_address_t *saddr,
@@ -1860,7 +1857,7 @@ int xfrm_state_unregister_afinfo(struct xfrm_state_afinfo *afinfo)
}
EXPORT_SYMBOL(xfrm_state_unregister_afinfo);
-static struct xfrm_state_afinfo *xfrm_state_get_afinfo(unsigned int family)
+struct xfrm_state_afinfo *xfrm_state_get_afinfo(unsigned int family)
{
struct xfrm_state_afinfo *afinfo;
if (unlikely(family >= NPROTO))
@@ -1872,7 +1869,7 @@ static struct xfrm_state_afinfo *xfrm_state_get_afinfo(unsigned int family)
return afinfo;
}
-static void xfrm_state_put_afinfo(struct xfrm_state_afinfo *afinfo)
+void xfrm_state_put_afinfo(struct xfrm_state_afinfo *afinfo)
{
rcu_read_unlock();
}
--
1.8.3.1
^ permalink raw reply related
* Re: [PATCH 1/6] 6lowpan: init ipv6hdr buffer to zero
From: Alexander Aring @ 2013-08-14 11:06 UTC (permalink / raw)
To: alex.bluesman.smirnov-Re5JQEeQqe8AvxtiuMwx3w
Cc: netdev-u79uwXL29TY76Z2rM5mHXA, davem-fT/PcQaiUtIeIZ0/mPfg9Q,
linux-zigbee-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
In-Reply-To: <1376478108-3539-2-git-send-email-alex.aring-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Hi,
I forgot a "net-next" in the subject, sry.
So this patch is for "net-next"
Regards
Alex
------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead.
Download for free and get started troubleshooting in minutes.
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
^ permalink raw reply
* Re: [PATCHv2 net-next] 6lowpan: handle only real link-local addresses
From: Hannes Frederic Sowa @ 2013-08-14 11:08 UTC (permalink / raw)
To: Alexander Aring
Cc: alex.bluesman.smirnov, dbaryshkov, davem, linux-zigbee-devel,
netdev
In-Reply-To: <1376478067-3371-1-git-send-email-alex.aring@gmail.com>
On Wed, Aug 14, 2013 at 01:01:07PM +0200, Alexander Aring wrote:
> diff --git a/net/ieee802154/6lowpan.h b/net/ieee802154/6lowpan.h
> index 4b8f917..61f0ce9 100644
> --- a/net/ieee802154/6lowpan.h
> +++ b/net/ieee802154/6lowpan.h
> @@ -83,8 +83,11 @@
> #define ipaddr_prefixcmp(addr1, addr2, length) \
> (memcmp(addr1, addr2, length >> 3) == 0)
>
> -/* local link, i.e. FE80::/10 */
> -#define is_addr_link_local(a) (((a)->s6_addr16[0]) == htons(0xFE80))
> +/* link-local, i.e. FE80::/64 */
> +#define is_addr_link_local(a) (((a)->s6_addr16[0]) == htons(0xFE80) && \
> + (((a)->s6_addr16[1]) == 0) && \
> + (((a)->s6_addr16[2]) == 0) && \
> + (((a)->s6_addr16[3]) == 0))
>
Can't you use ipv6_addr_type(a)&IPV6_ADDR_LINKLOCAL?
Greetings,
Hannes
^ permalink raw reply
* Re: [PATCHv2 net-next 0/6] 6lowpan: uncompress of addresses fix
From: Alexander Smirnov @ 2013-08-14 11:23 UTC (permalink / raw)
To: Alexander Aring; +Cc: dbaryshkov, davem, linux-zigbee-devel, netdev
In-Reply-To: <1376478108-3539-1-git-send-email-alex.aring@gmail.com>
On 08/14/2013 03:01 PM, Alexander Aring wrote:
> The current implementation to uncompress addresses in a 6lowpan header
> is completely broken.
>
> This patch series fixes the parsing of addresses in a 6lowpan header.
> It contains a major rewrite of the uncompress address function to parse
> the address in a correct way.
>
Could you please describe in a few words how have you tested the changes?
Small cosmetic hint: lowpan_raw_dump_inline() already has an argument to
print debug message, so there is no need to add extra pr_debug calls
before it to print static text.
Alex
> Changes since v2:
> - Add tags for net-next
> - Change commit msg in Patch 1/6 that this patch depends for the following
> patches
>
> Alexander Aring (5):
> 6lowpan: init ipv6hdr buffer to zero
> 6lowpan: introduce lowpan_fetch_skb function
> 6lowpan: add function to uncompress multicast addr
> 6lowpan: lowpan_uncompress_addr with address_mode
> 6lowpan: handle context based source address
>
> David Hauweele (1):
> 6lowpan: Fix fragmentation with link-local compressed addresses
>
> net/ieee802154/6lowpan.c | 284 +++++++++++++++++++++++++++++++----------------
> net/ieee802154/6lowpan.h | 20 +++-
> 2 files changed, 203 insertions(+), 101 deletions(-)
>
^ permalink raw reply
* Re: [PATCHv2 net-next] 6lowpan: handle only real link-local addresses
From: Alexander Aring @ 2013-08-14 11:29 UTC (permalink / raw)
To: alex.bluesman.smirnov, dbaryshkov, davem, linux-zigbee-devel,
netdev
In-Reply-To: <20130814110821.GH16264@order.stressinduktion.org>
Hi Hannes,
On Wed, Aug 14, 2013 at 01:08:21PM +0200, Hannes Frederic Sowa wrote:
> On Wed, Aug 14, 2013 at 01:01:07PM +0200, Alexander Aring wrote:
> > diff --git a/net/ieee802154/6lowpan.h b/net/ieee802154/6lowpan.h
> > index 4b8f917..61f0ce9 100644
> > --- a/net/ieee802154/6lowpan.h
> > +++ b/net/ieee802154/6lowpan.h
> > @@ -83,8 +83,11 @@
> > #define ipaddr_prefixcmp(addr1, addr2, length) \
> > (memcmp(addr1, addr2, length >> 3) == 0)
> >
> > -/* local link, i.e. FE80::/10 */
> > -#define is_addr_link_local(a) (((a)->s6_addr16[0]) == htons(0xFE80))
> > +/* link-local, i.e. FE80::/64 */
> > +#define is_addr_link_local(a) (((a)->s6_addr16[0]) == htons(0xFE80) && \
> > + (((a)->s6_addr16[1]) == 0) && \
> > + (((a)->s6_addr16[2]) == 0) && \
> > + (((a)->s6_addr16[3]) == 0))
> >
>
> Can't you use ipv6_addr_type(a)&IPV6_ADDR_LINKLOCAL?
>
Of course, thanks for this hint I will take this on the list to change
it for checking for a multicast address, too.
I looked in the implementation of ipv6_addr_type and some little thing
confusing me.
A local-link address is FE80::/64, but the __ipv6_addr_type function
checks for FE80::/32.
-- snip
...
__be32 st;
st = addr->s6_addr32[0];
...
if ((st & htonl(0xFFC00000)) == htonl(0xFE800000))
return ...
-- end snip
Is there some (addr->s6_addr32[1] == 0) check which I don't see?
Regards
Alex
^ permalink raw reply
* Re: [PATCHv2 net-next] xfrm: Make xfrm_state timer monotonic
From: Steffen Klassert @ 2013-08-14 11:34 UTC (permalink / raw)
To: Fan Du; +Cc: davem, netdev
In-Reply-To: <52087537.6060200@windriver.com>
On Mon, Aug 12, 2013 at 01:40:07PM +0800, Fan Du wrote:
>
>
> On 2013年08月06日 17:22, Steffen Klassert wrote:
> >On Tue, Aug 06, 2013 at 02:57:05PM +0800, Fan Du wrote:
> >>xfrm_state timer should be independent of system clock change,
> >>so switch to monotonic clock base.
> >>
> >
> >I think a monotonic timer will reintroduce a bug on suspend/resume
> >that was fixed by commit 9e0d57fd6
> >(xfrm: SAD entries do not expire correctly after suspend-resume)
> >
> >Please make sure that this does not happen.
>
> What about using CLOCK_BOOTTIME? it's monotonic, but includes suspend time as well.
>
>
> From 1dae5a22c203224ee46e2a2f95b569a04b74117b Mon Sep 17 00:00:00 2001
> From: Fan Du <fan.du@windriver.com>
> Date: Mon, 12 Aug 2013 13:33:45 +0800
> Subject: [PATCHv2 net-next] xfrm: Make xfrm_state timer monotonic
>
> xfrm_state timer should be independent of system clock change,
> so switch to CLOCK_BOOTTIME base which is not only monotonic but
> also counting suspend time.
>
> Signed-off-by: Fan Du <fan.du@windriver.com>
> ---
> net/xfrm/xfrm_state.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
> index 78f66fa..1df4436 100644
> --- a/net/xfrm/xfrm_state.c
> +++ b/net/xfrm/xfrm_state.c
> @@ -499,7 +499,7 @@ struct xfrm_state *xfrm_state_alloc(struct net *net)
> INIT_HLIST_NODE(&x->bydst);
> INIT_HLIST_NODE(&x->bysrc);
> INIT_HLIST_NODE(&x->byspi);
> - tasklet_hrtimer_init(&x->mtimer, xfrm_timer_handler, CLOCK_REALTIME, HRTIMER_MODE_ABS);
> + tasklet_hrtimer_init(&x->mtimer, xfrm_timer_handler, CLOCK_BOOTTIME, HRTIMER_MODE_ABS);
> setup_timer(&x->rtimer, xfrm_replay_timer_handler,
> (unsigned long)x);
> x->curlft.add_time = get_seconds();
This does not apply to my tree, looks like your patch is whitespace damaged.
^ permalink raw reply
* Re: [PATCHv2 net-next] 6lowpan: handle only real link-local addresses
From: Hannes Frederic Sowa @ 2013-08-14 11:38 UTC (permalink / raw)
To: Alexander Aring
Cc: alex.bluesman.smirnov, dbaryshkov, davem, linux-zigbee-devel,
netdev
In-Reply-To: <20130814112903.GB1704@x61s.8.8.8.8>
On Wed, Aug 14, 2013 at 01:29:04PM +0200, Alexander Aring wrote:
> Hi Hannes,
>
> On Wed, Aug 14, 2013 at 01:08:21PM +0200, Hannes Frederic Sowa wrote:
> > On Wed, Aug 14, 2013 at 01:01:07PM +0200, Alexander Aring wrote:
> > > diff --git a/net/ieee802154/6lowpan.h b/net/ieee802154/6lowpan.h
> > > index 4b8f917..61f0ce9 100644
> > > --- a/net/ieee802154/6lowpan.h
> > > +++ b/net/ieee802154/6lowpan.h
> > > @@ -83,8 +83,11 @@
> > > #define ipaddr_prefixcmp(addr1, addr2, length) \
> > > (memcmp(addr1, addr2, length >> 3) == 0)
> > >
> > > -/* local link, i.e. FE80::/10 */
> > > -#define is_addr_link_local(a) (((a)->s6_addr16[0]) == htons(0xFE80))
> > > +/* link-local, i.e. FE80::/64 */
> > > +#define is_addr_link_local(a) (((a)->s6_addr16[0]) == htons(0xFE80) && \
> > > + (((a)->s6_addr16[1]) == 0) && \
> > > + (((a)->s6_addr16[2]) == 0) && \
> > > + (((a)->s6_addr16[3]) == 0))
> > >
> >
> > Can't you use ipv6_addr_type(a)&IPV6_ADDR_LINKLOCAL?
> >
> Of course, thanks for this hint I will take this on the list to change
> it for checking for a multicast address, too.
>
>
> I looked in the implementation of ipv6_addr_type and some little thing
> confusing me.
> A local-link address is FE80::/64, but the __ipv6_addr_type function
> checks for FE80::/32.
This should be a test of fe80::/10 as specified in
http://tools.ietf.org/html/rfc4291#section-2.5.6. Look at the parentheses
between (st & htonl()) == htonl(..)
Yes, we don't seem to care about the zeros padded in the address. As specified
by IANA, these addresses would still count as link-local:
https://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xhtml
Greetings,
Hannes
^ permalink raw reply
* Re: Find vlanid with non-root user
From: Amador Pahim @ 2013-08-14 11:43 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: netdev
In-Reply-To: <20130813144657.361b31b5@nehalam.linuxnetplumber.net>
Thank you Stephen.
And about to find vlans? Is the same "ip -d link show" the best way?
If yes, any concern in finding interfaces with "@":
# ip -d link show | egrep ":.*@.*:" | cut -d ":" -f 2
eth1.10-fcoe@eth1
new_vlan@eth1
eth1.new_vlan@eth1
new_vlan2@eth1
For now I am using /sys/class/net/*.*, but as you said before, vlan
can be made with any name.
Best.
On Tue, Aug 13, 2013 at 6:46 PM, Stephen Hemminger
<stephen@networkplumber.org> wrote:
> On Tue, 13 Aug 2013 17:46:45 -0300
> Amador Pahim <amador@pahim.org> wrote:
>
>> Hello,
>>
>> Is there a way to get vlanid from a vlan interface as a regular user?
>> Default permissions to /proc/net/vlan/ is 600.
>> -rw-------. 1 root root 0 Aug 13 17:23 /proc/net/vlan/eth1.10-fcoe
>
> ip command will work as non-root user and show vlan (with -d)
>
> $ ip -d li show dev eth0vlan
> 13: eth0vlan@eth0: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT
> link/ether 10:bf:48:84:6f:5a brd ff:ff:ff:ff:ff:ff
> vlan id 10 <REORDER_HDR>
>
>
>
>> Not sure if deducting vlanid from vlan name is a reasonable way to do so.
>
> No. Vlan can be made with any name.
>
> # ip li add link eth0 name eth0vlan type vlan id 10
>
>> Thank you in advance,.
>>
>> Best Regards,
>
--
Pahim
^ permalink raw reply
* Re: [PATCH net-next 3/6] 6lowpan: introduce lowpan_fetch_skb function
From: Hannes Frederic Sowa @ 2013-08-14 11:49 UTC (permalink / raw)
To: Alexander Aring
Cc: alex.bluesman.smirnov, dbaryshkov, davem, linux-zigbee-devel,
netdev
In-Reply-To: <1376478108-3539-4-git-send-email-alex.aring@gmail.com>
On Wed, Aug 14, 2013 at 01:01:45PM +0200, Alexander Aring wrote:
> This patch adds a helper function to parse the ipv6 header to a
> 6lowpan header in stream.
>
> This function checks first if we can pull data with a specific
> length from a skb. If this seems to be okay, we copy skb data to
> a destination pointer and run skb_pull.
>
> Signed-off-by: Alexander Aring <alex.aring@gmail.com>
> Reviewed-by: Werner Almesberger <werner@almesberger.net>
> ---
> net/ieee802154/6lowpan.h | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
>
> diff --git a/net/ieee802154/6lowpan.h b/net/ieee802154/6lowpan.h
> index 61f0ce9..e3348ec 100644
> --- a/net/ieee802154/6lowpan.h
> +++ b/net/ieee802154/6lowpan.h
> @@ -233,4 +233,16 @@
> dest = 16 bit inline */
> #define LOWPAN_NHC_UDP_CS_P_11 0xF3 /* source & dest = 0xF0B + 4bit inline */
>
> +static inline bool lowpan_fetch_skb(struct sk_buff *skb,
> + void *data, const unsigned int len)
> +{
> + if (unlikely(!pskb_may_pull(skb, len)))
> + return true;
> +
> + skb_copy_from_linear_data(skb, data, len);
> + skb_pull(skb, len);
> +
> + return false;
> +}
Isn't the return value inverted here?
Greetings,
Hannes
^ permalink raw reply
* Re: [PATCH net-next 3/6] 6lowpan: introduce lowpan_fetch_skb function
From: Alexander Smirnov @ 2013-08-14 11:55 UTC (permalink / raw)
To: Alexander Aring, dbaryshkov, davem, linux-zigbee-devel, netdev
In-Reply-To: <20130814114921.GC2010@order.stressinduktion.org>
On 08/14/2013 03:49 PM, Hannes Frederic Sowa wrote:
> On Wed, Aug 14, 2013 at 01:01:45PM +0200, Alexander Aring wrote:
>> This patch adds a helper function to parse the ipv6 header to a
>> 6lowpan header in stream.
>>
>> This function checks first if we can pull data with a specific
>> length from a skb. If this seems to be okay, we copy skb data to
>> a destination pointer and run skb_pull.
>>
>> Signed-off-by: Alexander Aring <alex.aring@gmail.com>
>> Reviewed-by: Werner Almesberger <werner@almesberger.net>
>> ---
>> net/ieee802154/6lowpan.h | 12 ++++++++++++
>> 1 file changed, 12 insertions(+)
>>
>> diff --git a/net/ieee802154/6lowpan.h b/net/ieee802154/6lowpan.h
>> index 61f0ce9..e3348ec 100644
>> --- a/net/ieee802154/6lowpan.h
>> +++ b/net/ieee802154/6lowpan.h
>> @@ -233,4 +233,16 @@
>> dest = 16 bit inline */
>> #define LOWPAN_NHC_UDP_CS_P_11 0xF3 /* source & dest = 0xF0B + 4bit inline */
>>
>> +static inline bool lowpan_fetch_skb(struct sk_buff *skb,
>> + void *data, const unsigned int len)
>> +{
>> + if (unlikely(!pskb_may_pull(skb, len)))
>> + return true;
>> +
>> + skb_copy_from_linear_data(skb, data, len);
>> + skb_pull(skb, len);
>> +
>> + return false;
>> +}
>
> Isn't the return value inverted here?
Nope, everything is right here, but I spent several minutes to get it...
Probably using of standard intergers will be better here: return -EINVAL
and return 0;
>
> Greetings,
>
> Hannes
>
^ permalink raw reply
* Re: [PATCH v3 1/6] ARM: davinci: da8xx: fix clock lookup for mdio device
From: Sekhar Nori @ 2013-08-14 12:04 UTC (permalink / raw)
To: Prabhakar Lad
Cc: DLOS, netdev-u79uwXL29TY76Z2rM5mHXA,
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ, LKML, Heiko Schocher,
LAK
In-Reply-To: <1371999607-6483-2-git-send-email-prabhakar.csengg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Hi Prabhakar,
On 6/23/2013 8:30 PM, Prabhakar Lad wrote:
> From: "Lad, Prabhakar" <prabhakar.csengg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>
> This patch removes the clock alias for mdio device and adds a entry
> in clock lookup table, this entry can now be used by both DT and NON
> DT case.
>
> Signed-off-by: Lad, Prabhakar <prabhakar.csengg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> Cc: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
> Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> Cc: davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/@public.gmane.org
> Cc: netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> Cc: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org
> Cc: Sekhar Nori <nsekhar-l0cyMroinI0@public.gmane.org>
> Cc: Heiko Schocher <hs-ynQEQJNshbs@public.gmane.org>
This patch looks good, except you can do the same thing on all DaVinci
devices not just on DA8XX. Apart from this patches 1-5 in this series
look good. If you can spin this fix in short time I can queue 1-5 for
v3.12 while we wait for you to fix 6/6
Thanks,
Sekhar
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox