Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a99a00cf authored by Patrick McHardy's avatar Patrick McHardy Committed by David S. Miller
Browse files

[NET]: Move netfilter checksum helpers to net/core/utils.c



This allows to get rid of the CONFIG_NETFILTER dependency of NET_ACT_NAT.
This patch redefines the old names to keep the noise low, the next patch
converts all users.

Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3159afe0
Loading
Loading
Loading
Loading
+4 −21
Original line number Diff line number Diff line
@@ -298,27 +298,10 @@ extern void nf_invalidate_cache(int pf);
   Returns true or false. */
extern int skb_make_writable(struct sk_buff *skb, unsigned int writable_len);

static inline void nf_csum_replace4(__sum16 *sum, __be32 from, __be32 to)
{
	__be32 diff[] = { ~from, to };

	*sum = csum_fold(csum_partial((char *)diff, sizeof(diff), ~csum_unfold(*sum)));
}

static inline void nf_csum_replace2(__sum16 *sum, __be16 from, __be16 to)
{
	nf_csum_replace4(sum, (__force __be32)from, (__force __be32)to);
}

extern void nf_proto_csum_replace4(__sum16 *sum, struct sk_buff *skb,
				      __be32 from, __be32 to, int pseudohdr);

static inline void nf_proto_csum_replace2(__sum16 *sum, struct sk_buff *skb,
				      __be16 from, __be16 to, int pseudohdr)
{
	nf_proto_csum_replace4(sum, skb, (__force __be32)from,
				(__force __be32)to, pseudohdr);
}
#define nf_csum_replace4	csum_replace4
#define nf_csum_replace2	csum_replace2
#define nf_proto_csum_replace4	inet_proto_csum_replace4
#define nf_proto_csum_replace2	inet_proto_csum_replace2

struct nf_afinfo {
	unsigned short	family;
+25 −0
Original line number Diff line number Diff line
@@ -93,4 +93,29 @@ static inline __wsum csum_unfold(__sum16 n)
}

#define CSUM_MANGLED_0 ((__force __sum16)0xffff)

static inline void csum_replace4(__sum16 *sum, __be32 from, __be32 to)
{
	__be32 diff[] = { ~from, to };

	*sum = csum_fold(csum_partial((char *)diff, sizeof(diff), ~csum_unfold(*sum)));
}

static inline void csum_replace2(__sum16 *sum, __be16 from, __be16 to)
{
	csum_replace4(sum, (__force __be32)from, (__force __be32)to);
}

struct sk_buff;
extern void inet_proto_csum_replace4(__sum16 *sum, struct sk_buff *skb,
				     __be32 from, __be32 to, int pseudohdr);

static inline void inet_proto_csum_replace2(__sum16 *sum, struct sk_buff *skb,
					    __be16 from, __be16 to,
					    int pseudohdr)
{
	inet_proto_csum_replace4(sum, skb, (__force __be32)from,
				 (__force __be32)to, pseudohdr);
}

#endif
+16 −0
Original line number Diff line number Diff line
@@ -293,3 +293,19 @@ out:
}

EXPORT_SYMBOL(in6_pton);

void inet_proto_csum_replace4(__sum16 *sum, struct sk_buff *skb,
			      __be32 from, __be32 to, int pseudohdr)
{
	__be32 diff[] = { ~from, to };
	if (skb->ip_summed != CHECKSUM_PARTIAL) {
		*sum = csum_fold(csum_partial(diff, sizeof(diff),
				~csum_unfold(*sum)));
		if (skb->ip_summed == CHECKSUM_COMPLETE && pseudohdr)
			skb->csum = ~csum_partial(diff, sizeof(diff),
						~skb->csum);
	} else if (pseudohdr)
		*sum = ~csum_fold(csum_partial(diff, sizeof(diff),
				csum_unfold(*sum)));
}
EXPORT_SYMBOL(inet_proto_csum_replace4);
+0 −16
Original line number Diff line number Diff line
@@ -217,22 +217,6 @@ int skb_make_writable(struct sk_buff *skb, unsigned int writable_len)
}
EXPORT_SYMBOL(skb_make_writable);

void nf_proto_csum_replace4(__sum16 *sum, struct sk_buff *skb,
			    __be32 from, __be32 to, int pseudohdr)
{
	__be32 diff[] = { ~from, to };
	if (skb->ip_summed != CHECKSUM_PARTIAL) {
		*sum = csum_fold(csum_partial(diff, sizeof(diff),
				~csum_unfold(*sum)));
		if (skb->ip_summed == CHECKSUM_COMPLETE && pseudohdr)
			skb->csum = ~csum_partial(diff, sizeof(diff),
						~skb->csum);
	} else if (pseudohdr)
		*sum = ~csum_fold(csum_partial(diff, sizeof(diff),
				csum_unfold(*sum)));
}
EXPORT_SYMBOL(nf_proto_csum_replace4);

#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
/* This does not belong here, but locally generated errors need it if connection
   tracking in use: without this, connection may not be in hash table, and hence