Skip to content

Commit ce1e798

Browse files
Florian Westphalummakynes
authored andcommitted
netfilter: nft_byteorder: provide 64bit le/be conversion
Needed to convert the (64bit) conntrack counters to BE ordering. Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
1 parent e6d8eca commit ce1e798

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

net/netfilter/nft_byteorder.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
* Development of this code funded by Astaro AG (http://www.astaro.com/)
99
*/
1010

11+
#include <asm/unaligned.h>
1112
#include <linux/kernel.h>
1213
#include <linux/init.h>
1314
#include <linux/module.h>
@@ -39,6 +40,27 @@ static void nft_byteorder_eval(const struct nft_expr *expr,
3940
d = (void *)dst;
4041

4142
switch (priv->size) {
43+
case 8: {
44+
u64 src64;
45+
46+
switch (priv->op) {
47+
case NFT_BYTEORDER_NTOH:
48+
for (i = 0; i < priv->len / 8; i++) {
49+
src64 = get_unaligned_be64(&src[i]);
50+
src64 = be64_to_cpu((__force __be64)src64);
51+
put_unaligned_be64(src64, &dst[i]);
52+
}
53+
break;
54+
case NFT_BYTEORDER_HTON:
55+
for (i = 0; i < priv->len / 8; i++) {
56+
src64 = get_unaligned_be64(&src[i]);
57+
src64 = (__force u64)cpu_to_be64(src64);
58+
put_unaligned_be64(src64, &dst[i]);
59+
}
60+
break;
61+
}
62+
break;
63+
}
4264
case 4:
4365
switch (priv->op) {
4466
case NFT_BYTEORDER_NTOH:
@@ -101,6 +123,7 @@ static int nft_byteorder_init(const struct nft_ctx *ctx,
101123
switch (priv->size) {
102124
case 2:
103125
case 4:
126+
case 8:
104127
break;
105128
default:
106129
return -EINVAL;

0 commit comments

Comments
 (0)