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 <mtownsend1973@gmail.com> Acked-by: Alexander Aring <alex.aring@gmail.com> Acked-by: Jukka Rissanen <jukka.rissanen@linux.intel.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:

committed by
Marcel Holtmann

parent
f81f466ca5
commit
f8b361768e
@@ -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;
|
||||
|
Reference in New Issue
Block a user