|
@@ -336,6 +336,19 @@ void inet_proto_csum_replace16(__sum16 *sum, struct sk_buff *skb,
|
|
|
}
|
|
|
EXPORT_SYMBOL(inet_proto_csum_replace16);
|
|
|
|
|
|
+void inet_proto_csum_replace_by_diff(__sum16 *sum, struct sk_buff *skb,
|
|
|
+ __wsum diff, bool pseudohdr)
|
|
|
+{
|
|
|
+ if (skb->ip_summed != CHECKSUM_PARTIAL) {
|
|
|
+ *sum = csum_fold(csum_add(diff, ~csum_unfold(*sum)));
|
|
|
+ if (skb->ip_summed == CHECKSUM_COMPLETE && pseudohdr)
|
|
|
+ skb->csum = ~csum_add(diff, ~skb->csum);
|
|
|
+ } else if (pseudohdr) {
|
|
|
+ *sum = ~csum_fold(csum_add(diff, csum_unfold(*sum)));
|
|
|
+ }
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(inet_proto_csum_replace_by_diff);
|
|
|
+
|
|
|
struct __net_random_once_work {
|
|
|
struct work_struct work;
|
|
|
struct static_key *key;
|