Skip to content

Commit a99a00c

Browse files
kaberdavem330
authored andcommitted
[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: Patrick McHardy <kaber@trash.net> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 3159afe commit a99a00c

File tree

4 files changed

+45
-37
lines changed

4 files changed

+45
-37
lines changed

include/linux/netfilter.h

+4-21
Original file line numberDiff line numberDiff line change
@@ -298,27 +298,10 @@ extern void nf_invalidate_cache(int pf);
298298
Returns true or false. */
299299
extern int skb_make_writable(struct sk_buff *skb, unsigned int writable_len);
300300

301-
static inline void nf_csum_replace4(__sum16 *sum, __be32 from, __be32 to)
302-
{
303-
__be32 diff[] = { ~from, to };
304-
305-
*sum = csum_fold(csum_partial((char *)diff, sizeof(diff), ~csum_unfold(*sum)));
306-
}
307-
308-
static inline void nf_csum_replace2(__sum16 *sum, __be16 from, __be16 to)
309-
{
310-
nf_csum_replace4(sum, (__force __be32)from, (__force __be32)to);
311-
}
312-
313-
extern void nf_proto_csum_replace4(__sum16 *sum, struct sk_buff *skb,
314-
__be32 from, __be32 to, int pseudohdr);
315-
316-
static inline void nf_proto_csum_replace2(__sum16 *sum, struct sk_buff *skb,
317-
__be16 from, __be16 to, int pseudohdr)
318-
{
319-
nf_proto_csum_replace4(sum, skb, (__force __be32)from,
320-
(__force __be32)to, pseudohdr);
321-
}
301+
#define nf_csum_replace4 csum_replace4
302+
#define nf_csum_replace2 csum_replace2
303+
#define nf_proto_csum_replace4 inet_proto_csum_replace4
304+
#define nf_proto_csum_replace2 inet_proto_csum_replace2
322305

323306
struct nf_afinfo {
324307
unsigned short family;

include/net/checksum.h

+25
Original file line numberDiff line numberDiff line change
@@ -93,4 +93,29 @@ static inline __wsum csum_unfold(__sum16 n)
9393
}
9494

9595
#define CSUM_MANGLED_0 ((__force __sum16)0xffff)
96+
97+
static inline void csum_replace4(__sum16 *sum, __be32 from, __be32 to)
98+
{
99+
__be32 diff[] = { ~from, to };
100+
101+
*sum = csum_fold(csum_partial((char *)diff, sizeof(diff), ~csum_unfold(*sum)));
102+
}
103+
104+
static inline void csum_replace2(__sum16 *sum, __be16 from, __be16 to)
105+
{
106+
csum_replace4(sum, (__force __be32)from, (__force __be32)to);
107+
}
108+
109+
struct sk_buff;
110+
extern void inet_proto_csum_replace4(__sum16 *sum, struct sk_buff *skb,
111+
__be32 from, __be32 to, int pseudohdr);
112+
113+
static inline void inet_proto_csum_replace2(__sum16 *sum, struct sk_buff *skb,
114+
__be16 from, __be16 to,
115+
int pseudohdr)
116+
{
117+
inet_proto_csum_replace4(sum, skb, (__force __be32)from,
118+
(__force __be32)to, pseudohdr);
119+
}
120+
96121
#endif

net/core/utils.c

+16
Original file line numberDiff line numberDiff line change
@@ -293,3 +293,19 @@ int in6_pton(const char *src, int srclen,
293293
}
294294

295295
EXPORT_SYMBOL(in6_pton);
296+
297+
void inet_proto_csum_replace4(__sum16 *sum, struct sk_buff *skb,
298+
__be32 from, __be32 to, int pseudohdr)
299+
{
300+
__be32 diff[] = { ~from, to };
301+
if (skb->ip_summed != CHECKSUM_PARTIAL) {
302+
*sum = csum_fold(csum_partial(diff, sizeof(diff),
303+
~csum_unfold(*sum)));
304+
if (skb->ip_summed == CHECKSUM_COMPLETE && pseudohdr)
305+
skb->csum = ~csum_partial(diff, sizeof(diff),
306+
~skb->csum);
307+
} else if (pseudohdr)
308+
*sum = ~csum_fold(csum_partial(diff, sizeof(diff),
309+
csum_unfold(*sum)));
310+
}
311+
EXPORT_SYMBOL(inet_proto_csum_replace4);

net/netfilter/core.c

-16
Original file line numberDiff line numberDiff line change
@@ -217,22 +217,6 @@ int skb_make_writable(struct sk_buff *skb, unsigned int writable_len)
217217
}
218218
EXPORT_SYMBOL(skb_make_writable);
219219

220-
void nf_proto_csum_replace4(__sum16 *sum, struct sk_buff *skb,
221-
__be32 from, __be32 to, int pseudohdr)
222-
{
223-
__be32 diff[] = { ~from, to };
224-
if (skb->ip_summed != CHECKSUM_PARTIAL) {
225-
*sum = csum_fold(csum_partial(diff, sizeof(diff),
226-
~csum_unfold(*sum)));
227-
if (skb->ip_summed == CHECKSUM_COMPLETE && pseudohdr)
228-
skb->csum = ~csum_partial(diff, sizeof(diff),
229-
~skb->csum);
230-
} else if (pseudohdr)
231-
*sum = ~csum_fold(csum_partial(diff, sizeof(diff),
232-
csum_unfold(*sum)));
233-
}
234-
EXPORT_SYMBOL(nf_proto_csum_replace4);
235-
236220
#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
237221
/* This does not belong here, but locally generated errors need it if connection
238222
tracking in use: without this, connection may not be in hash table, and hence

0 commit comments

Comments
 (0)