Hi Werner,
On Wed, Aug 07, 2013 at 05:28:39PM -0300, Werner Almesberger wrote:
> Alexander Aring wrote:
> > To uncompress a multicast address is different than a other
> > non-multicasts addresses according to rfc6282.
>
> The uncompression looks fine. But you should check skb->len before
> trying to access the data. This also means that you can simplify
> some of the skb_pull.
>
> Maybe a little helper function like this could be useful:
>
> static inline unsigned char *fetch(struct sk_buff *skb, unsigned int len)
> {
> unsigned char *tmp = skb->data;
>
> if (unlikely(len > skb->len))
> return NULL;
> skb_pull(skb, len);
> return tmp;
> }
>
Yea, we thinking in the same way, I have already a function for this in
my dirty branch.
It looks like:
static inline int lowpan_fetch_skb(struct sk_buff *skb,
void *data, const unsigned int len)
{
if (unlikely(!pskb_may_pull(skb, len)))
return -EINVAL;
skb_copy_from_linear_data(skb, data, len);
skb_pull(skb, len);
return 0;
}
Then we can drop these lowpan_fetch_skb_u8 lowpan_fetch_skb_u16 things.
Important is that we make a ntohs on lowpan_fetch_skb_u16 afterwards.
(It's only one case... for the tag information in fragmentation header)
This function looks others than yours, it copy the data to a destination
pointer.
We can drop all things with that in this case:
memcpy(d, skb->data..., 2);
skb_pull(skb, 2);
to:
err = lowpan_fetch_skb(skb, d, 2);
...
and for example:
memcpy(d, skb->data[0], 2);
memcpy(d2, skb->data[xy], 2); /* Need calculate here because we run no skb_pull
before */
skb_pull(skb, 2);
becomes to:
err = lowpan_fetch_skb(skb, d, 2);
..
err = lowpan_fetch_skb(skb, d2, 2);
..
So we are more in "streaming data"..., because we run skb_pull after each fetch.
What's your opinion with this function. I can make a patch before to introduce
this function
and then I will use it for this patch... But I don't make a full cleanup patch
to drop the
lowpan_fetch_skb_u8 and lowpan_fetch_skb_u16 function... That's one of the main
goal for
the end of the patch series.
- 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
_______________________________________________
Linux-zigbee-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-zigbee-devel