diff options
author | Martin Townsend <mtownsend1973@gmail.com> | 2014-10-23 10:40:53 -0400 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2014-10-27 10:51:15 -0400 |
commit | f8b361768ea2eaf9b21dfbe7388958ec31798c8b (patch) | |
tree | e2b9ea93b72fbf33d6f9ee84a7fc63edfaba8c92 /net/6lowpan/iphc.c | |
parent | f81f466ca588a5bd868008154050305481f241d4 (diff) |
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>
Diffstat (limited to 'net/6lowpan/iphc.c')
-rw-r--r-- | net/6lowpan/iphc.c | 32 |
1 files changed, 6 insertions, 26 deletions
diff --git a/net/6lowpan/iphc.c b/net/6lowpan/iphc.c index 747b3ccfc4f8..45714fe885f0 100644 --- a/net/6lowpan/iphc.c +++ b/net/6lowpan/iphc.c | |||
@@ -171,29 +171,6 @@ static int uncompress_context_based_src_addr(struct sk_buff *skb, | |||
171 | return 0; | 171 | return 0; |
172 | } | 172 | } |
173 | 173 | ||
174 | static int skb_deliver(struct sk_buff *skb, struct ipv6hdr *hdr, | ||
175 | struct net_device *dev, skb_delivery_cb deliver_skb) | ||
176 | { | ||
177 | int stat; | ||
178 | |||
179 | skb_push(skb, sizeof(struct ipv6hdr)); | ||
180 | skb_reset_network_header(skb); | ||
181 | skb_copy_to_linear_data(skb, hdr, sizeof(struct ipv6hdr)); | ||
182 | |||
183 | skb->protocol = htons(ETH_P_IPV6); | ||
184 | skb->pkt_type = PACKET_HOST; | ||
185 | skb->dev = dev; | ||
186 | |||
187 | raw_dump_table(__func__, "raw skb data dump before receiving", | ||
188 | skb->data, skb->len); | ||
189 | |||
190 | stat = deliver_skb(skb, dev); | ||
191 | |||
192 | consume_skb(skb); | ||
193 | |||
194 | return stat; | ||
195 | } | ||
196 | |||
197 | /* Uncompress function for multicast destination address, | 174 | /* Uncompress function for multicast destination address, |
198 | * when M bit is set. | 175 | * when M bit is set. |
199 | */ | 176 | */ |
@@ -327,7 +304,7 @@ static const u8 lowpan_ttl_values[] = { 0, 1, 64, 255 }; | |||
327 | int lowpan_process_data(struct sk_buff *skb, struct net_device *dev, | 304 | int lowpan_process_data(struct sk_buff *skb, struct net_device *dev, |
328 | const u8 *saddr, const u8 saddr_type, const u8 saddr_len, | 305 | const u8 *saddr, const u8 saddr_type, const u8 saddr_len, |
329 | const u8 *daddr, const u8 daddr_type, const u8 daddr_len, | 306 | const u8 *daddr, const u8 daddr_type, const u8 daddr_len, |
330 | u8 iphc0, u8 iphc1, skb_delivery_cb deliver_skb) | 307 | u8 iphc0, u8 iphc1) |
331 | { | 308 | { |
332 | struct ipv6hdr hdr = {}; | 309 | struct ipv6hdr hdr = {}; |
333 | u8 tmp, num_context = 0; | 310 | u8 tmp, num_context = 0; |
@@ -492,10 +469,13 @@ int lowpan_process_data(struct sk_buff *skb, struct net_device *dev, | |||
492 | hdr.version, ntohs(hdr.payload_len), hdr.nexthdr, | 469 | hdr.version, ntohs(hdr.payload_len), hdr.nexthdr, |
493 | hdr.hop_limit, &hdr.daddr); | 470 | hdr.hop_limit, &hdr.daddr); |
494 | 471 | ||
495 | raw_dump_table(__func__, "raw header dump", (u8 *)&hdr, sizeof(hdr)); | 472 | skb_push(skb, sizeof(hdr)); |
473 | skb_reset_network_header(skb); | ||
474 | skb_copy_to_linear_data(skb, &hdr, sizeof(hdr)); | ||
496 | 475 | ||
497 | return skb_deliver(skb, &hdr, dev, deliver_skb); | 476 | raw_dump_table(__func__, "raw header dump", (u8 *)&hdr, sizeof(hdr)); |
498 | 477 | ||
478 | return 0; | ||
499 | drop: | 479 | drop: |
500 | kfree_skb(skb); | 480 | kfree_skb(skb); |
501 | return -EINVAL; | 481 | return -EINVAL; |