mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
6lowpan: remove skb_deliver from IPHC
Separating skb delivery from decompression ensures that we can support further decompression schemes and removes the mixed return value of error codes with NET_RX_FOO. Signed-off-by: Martin Townsend <[email protected]> Acked-by: Alexander Aring <[email protected]> Acked-by: Jukka Rissanen <[email protected]> Signed-off-by: Marcel Holtmann <[email protected]>
This commit is contained in:
parent
f81f466ca5
commit
f8b361768e
4 changed files with 45 additions and 46 deletions
|
|
@ -171,29 +171,6 @@ static int uncompress_context_based_src_addr(struct sk_buff *skb,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int skb_deliver(struct sk_buff *skb, struct ipv6hdr *hdr,
|
||||
struct net_device *dev, skb_delivery_cb deliver_skb)
|
||||
{
|
||||
int stat;
|
||||
|
||||
skb_push(skb, sizeof(struct ipv6hdr));
|
||||
skb_reset_network_header(skb);
|
||||
skb_copy_to_linear_data(skb, hdr, sizeof(struct ipv6hdr));
|
||||
|
||||
skb->protocol = htons(ETH_P_IPV6);
|
||||
skb->pkt_type = PACKET_HOST;
|
||||
skb->dev = dev;
|
||||
|
||||
raw_dump_table(__func__, "raw skb data dump before receiving",
|
||||
skb->data, skb->len);
|
||||
|
||||
stat = deliver_skb(skb, dev);
|
||||
|
||||
consume_skb(skb);
|
||||
|
||||
return stat;
|
||||
}
|
||||
|
||||
/* Uncompress function for multicast destination address,
|
||||
* when M bit is set.
|
||||
*/
|
||||
|
|
@ -327,7 +304,7 @@ static const u8 lowpan_ttl_values[] = { 0, 1, 64, 255 };
|
|||
int lowpan_process_data(struct sk_buff *skb, struct net_device *dev,
|
||||
const u8 *saddr, const u8 saddr_type, const u8 saddr_len,
|
||||
const u8 *daddr, const u8 daddr_type, const u8 daddr_len,
|
||||
u8 iphc0, u8 iphc1, skb_delivery_cb deliver_skb)
|
||||
u8 iphc0, u8 iphc1)
|
||||
{
|
||||
struct ipv6hdr hdr = {};
|
||||
u8 tmp, num_context = 0;
|
||||
|
|
@ -492,10 +469,13 @@ int lowpan_process_data(struct sk_buff *skb, struct net_device *dev,
|
|||
hdr.version, ntohs(hdr.payload_len), hdr.nexthdr,
|
||||
hdr.hop_limit, &hdr.daddr);
|
||||
|
||||
skb_push(skb, sizeof(hdr));
|
||||
skb_reset_network_header(skb);
|
||||
skb_copy_to_linear_data(skb, &hdr, sizeof(hdr));
|
||||
|
||||
raw_dump_table(__func__, "raw header dump", (u8 *)&hdr, sizeof(hdr));
|
||||
|
||||
return skb_deliver(skb, &hdr, dev, deliver_skb);
|
||||
|
||||
return 0;
|
||||
drop:
|
||||
kfree_skb(skb);
|
||||
return -EINVAL;
|
||||
|
|
|
|||
Loading…
Reference in a new issue