aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2013-11-03 23:05:16 -0500
committerDavid S. Miller <davem@davemloft.net>2013-11-03 23:05:16 -0500
commitb397f99921827e114d7f5600447e172a99c50165 (patch)
treede3bbb3dc4e08fd17fcde46aedb239d274e45d6b /include/linux
parent296c10639a33941d0090afa17b7535fcbf81d97a (diff)
parente6d8b64b34aa8a9fe39609bc2db8a243b0331ceb (diff)
Merge branch 'sctp_csum'
Daniel Borkmann says: ==================== SCTP fix/updates Please see patch 5 for the main description/motivation, the rest just brings in the needed functionality for that. Although this is actually a fix, I've based it against net-next as some additional work for fixing it was needed. ==================== Acked-by: Neil Horman <nhorman@tuxdriver.com> Acked-by: Vlad Yasevich <vyasevich@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/crc32.h40
-rw-r--r--include/linux/skbuff.h13
2 files changed, 50 insertions, 3 deletions
diff --git a/include/linux/crc32.h b/include/linux/crc32.h
index 68267b64bb98..7d275c4fc011 100644
--- a/include/linux/crc32.h
+++ b/include/linux/crc32.h
@@ -11,8 +11,48 @@
11extern u32 crc32_le(u32 crc, unsigned char const *p, size_t len); 11extern u32 crc32_le(u32 crc, unsigned char const *p, size_t len);
12extern u32 crc32_be(u32 crc, unsigned char const *p, size_t len); 12extern u32 crc32_be(u32 crc, unsigned char const *p, size_t len);
13 13
14/**
15 * crc32_le_combine - Combine two crc32 check values into one. For two
16 * sequences of bytes, seq1 and seq2 with lengths len1
17 * and len2, crc32_le() check values were calculated
18 * for each, crc1 and crc2.
19 *
20 * @crc1: crc32 of the first block
21 * @crc2: crc32 of the second block
22 * @len2: length of the second block
23 *
24 * Return: The crc32_le() check value of seq1 and seq2 concatenated,
25 * requiring only crc1, crc2, and len2. Note: If seq_full denotes
26 * the concatenated memory area of seq1 with seq2, and crc_full
27 * the crc32_le() value of seq_full, then crc_full ==
28 * crc32_le_combine(crc1, crc2, len2) when crc_full was seeded
29 * with the same initializer as crc1, and crc2 seed was 0. See
30 * also crc32_combine_test().
31 */
32extern u32 crc32_le_combine(u32 crc1, u32 crc2, size_t len2);
33
14extern u32 __crc32c_le(u32 crc, unsigned char const *p, size_t len); 34extern u32 __crc32c_le(u32 crc, unsigned char const *p, size_t len);
15 35
36/**
37 * __crc32c_le_combine - Combine two crc32c check values into one. For two
38 * sequences of bytes, seq1 and seq2 with lengths len1
39 * and len2, __crc32c_le() check values were calculated
40 * for each, crc1 and crc2.
41 *
42 * @crc1: crc32c of the first block
43 * @crc2: crc32c of the second block
44 * @len2: length of the second block
45 *
46 * Return: The __crc32c_le() check value of seq1 and seq2 concatenated,
47 * requiring only crc1, crc2, and len2. Note: If seq_full denotes
48 * the concatenated memory area of seq1 with seq2, and crc_full
49 * the __crc32c_le() value of seq_full, then crc_full ==
50 * __crc32c_le_combine(crc1, crc2, len2) when crc_full was
51 * seeded with the same initializer as crc1, and crc2 seed
52 * was 0. See also crc32c_combine_test().
53 */
54extern u32 __crc32c_le_combine(u32 crc1, u32 crc2, size_t len2);
55
16#define crc32(seed, data, length) crc32_le(seed, (unsigned char const *)(data), length) 56#define crc32(seed, data, length) crc32_le(seed, (unsigned char const *)(data), length)
17 57
18/* 58/*
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 2c154976394b..44727b5d4981 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -2360,8 +2360,6 @@ int skb_copy_datagram_const_iovec(const struct sk_buff *from, int offset,
2360void skb_free_datagram(struct sock *sk, struct sk_buff *skb); 2360void skb_free_datagram(struct sock *sk, struct sk_buff *skb);
2361void skb_free_datagram_locked(struct sock *sk, struct sk_buff *skb); 2361void skb_free_datagram_locked(struct sock *sk, struct sk_buff *skb);
2362int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, unsigned int flags); 2362int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, unsigned int flags);
2363__wsum skb_checksum(const struct sk_buff *skb, int offset, int len,
2364 __wsum csum);
2365int skb_copy_bits(const struct sk_buff *skb, int offset, void *to, int len); 2363int skb_copy_bits(const struct sk_buff *skb, int offset, void *to, int len);
2366int skb_store_bits(struct sk_buff *skb, int offset, const void *from, int len); 2364int skb_store_bits(struct sk_buff *skb, int offset, const void *from, int len);
2367__wsum skb_copy_and_csum_bits(const struct sk_buff *skb, int offset, u8 *to, 2365__wsum skb_copy_and_csum_bits(const struct sk_buff *skb, int offset, u8 *to,
@@ -2373,9 +2371,18 @@ void skb_copy_and_csum_dev(const struct sk_buff *skb, u8 *to);
2373void skb_split(struct sk_buff *skb, struct sk_buff *skb1, const u32 len); 2371void skb_split(struct sk_buff *skb, struct sk_buff *skb1, const u32 len);
2374int skb_shift(struct sk_buff *tgt, struct sk_buff *skb, int shiftlen); 2372int skb_shift(struct sk_buff *tgt, struct sk_buff *skb, int shiftlen);
2375void skb_scrub_packet(struct sk_buff *skb, bool xnet); 2373void skb_scrub_packet(struct sk_buff *skb, bool xnet);
2376
2377struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features); 2374struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features);
2378 2375
2376struct skb_checksum_ops {
2377 __wsum (*update)(const void *mem, int len, __wsum wsum);
2378 __wsum (*combine)(__wsum csum, __wsum csum2, int offset, int len);
2379};
2380
2381__wsum __skb_checksum(const struct sk_buff *skb, int offset, int len,
2382 __wsum csum, const struct skb_checksum_ops *ops);
2383__wsum skb_checksum(const struct sk_buff *skb, int offset, int len,
2384 __wsum csum);
2385
2379static inline void *skb_header_pointer(const struct sk_buff *skb, int offset, 2386static inline void *skb_header_pointer(const struct sk_buff *skb, int offset,
2380 int len, void *buffer) 2387 int len, void *buffer)
2381{ 2388{