|
|
@@ -151,4 +151,20 @@ static inline void inet_proto_csum_replace2(__sum16 *sum, struct sk_buff *skb,
|
|
|
(__force __be32)to, pseudohdr);
|
|
|
}
|
|
|
|
|
|
+static inline __wsum remcsum_adjust(void *ptr, __wsum csum,
|
|
|
+ int start, int offset)
|
|
|
+{
|
|
|
+ __sum16 *psum = (__sum16 *)(ptr + offset);
|
|
|
+ __wsum delta;
|
|
|
+
|
|
|
+ /* Subtract out checksum up to start */
|
|
|
+ csum = csum_sub(csum, csum_partial(ptr, start, 0));
|
|
|
+
|
|
|
+ /* Set derived checksum in packet */
|
|
|
+ delta = csum_sub(csum_fold(csum), *psum);
|
|
|
+ *psum = csum_fold(csum);
|
|
|
+
|
|
|
+ return delta;
|
|
|
+}
|
|
|
+
|
|
|
#endif
|