netfilter: add CHECKSUM target
Subsystems (4)
PATCH 1/1 netfilter: add CHECKSUM target
This adds a `CHECKSUM' target, which can be used in the iptables mangle table.
You can use this target to compute and fill in the checksum in an IP packet that lacks a checksum. This is particularly useful, if you need to work around old applications such as dhcp clients, that do not work well with checksum offloads, but don't want to disable checksum offload in your device.
The problem happens in the field with virtualized applications. For reference, see Red Hat bz 605555, as well as
http://www.spinics.net/lists/kvm/msg37660.html
Typical expected use (helps old dhclient binary running in a VM):
iptables -A POSTROUTING -t mangle -p udp --dport 68 -j CHECKSUM --checksum-fill
---
Lightly tested. Please review for 2.6.36. Thanks!
include/linux/netfilter_ipv4/ipt_CHECKSUM.h | 18 +++++++ net/ipv4/netfilter/Kconfig | 16 ++++++ net/ipv4/netfilter/Makefile | 1 + net/ipv4/netfilter/ipt_CHECKSUM.c | 72 +++++++++++++++++++++++++++ 4 files changed, 107 insertions(+), 0 deletions(-) create mode 100644 include/linux/netfilter_ipv4/ipt_CHECKSUM.h create mode 100644 net/ipv4/netfilter/ipt_CHECKSUM.c
include/linux/netfilter_ipv4/ipt_CHECKSUM.h new file +18 -0
@@ -0,0 +1,18 @@ +/* Header file for iptables ipt_CHECKSUM target +* +* (C) 2002 by Harald Welte <[email protected]> +* (C) 2010 Red Hat Inc +* Author: Michael S. Tsirkin <[email protected]> +* +* This software is distributed under GNU GPL v2, 1991 +*/ +#ifndef _IPT_CHECKSUM_TARGET_H +#define _IPT_CHECKSUM_TARGET_H + +#define IPT_CHECKSUM_OP_FILL 0x01/* fill in checksum in IPv4 header */ + +struct ipt_CHECKSUM_info { +u_int8_t operation;/* bitset of operations */ +}; + +#endif /* _IPT_CHECKSUM_TARGET_H */
net/ipv4/netfilter/Kconfig +16 -0
@@ -322,6 +322,22 @@ config IP_NF_TARGET_ECN To compile it as a module, choose M here. If unsure, say N. +config IP_NF_TARGET_CHECKSUM + tristate "CHECKSUM target support" + depends on IP_NF_MANGLE + depends on NETFILTER_ADVANCED + ---help--- + This option adds a `CHECKSUM' target, which can be used in the iptables mangle + table. + + You can use this target to compute and fill in the checksum in + an IP packet that lacks a checksum. This is particularly useful, + if you need to work around old applications such as dhcp clients, + that do not work well with checksum offloads, but don't want to disable + checksum offload in your device. + + To compile it as a module, choose M here. If unsure, say N. + config IP_NF_TARGET_TTL tristate '"TTL" target support' depends on NETFILTER_ADVANCED
net/ipv4/netfilter/Makefile +1 -0
@@ -55,6 +55,7 @@ obj-$(CONFIG_IP_NF_MATCH_ECN) += ipt_ecn.o # targets obj-$(CONFIG_IP_NF_TARGET_CLUSTERIP) += ipt_CLUSTERIP.o obj-$(CONFIG_IP_NF_TARGET_ECN) += ipt_ECN.o +obj-$(CONFIG_IP_NF_TARGET_CHECKSUM) += ipt_CHECKSUM.o obj-$(CONFIG_IP_NF_TARGET_LOG) += ipt_LOG.o obj-$(CONFIG_IP_NF_TARGET_MASQUERADE) += ipt_MASQUERADE.o obj-$(CONFIG_IP_NF_TARGET_NETMAP) += ipt_NETMAP.o
net/ipv4/netfilter/ipt_CHECKSUM.c new file +72 -0
72 lines not on this page · raw message
Signature · 1 line
1.7.2.rc0.14.g41c1c
PATCH 1/1 extensions: libipt_CHECKSUM extension
This adds a `CHECKSUM' target, which can be used in the iptables mangle table.
You can use this target to compute and fill in the checksum in an IP packet that lacks a checksum. This is particularly useful, if you need to work around old applications such as dhcp clients, that do not work well with checksum offloads, but don't want to disable checksum offload in your device.
The problem happens in the field with virtualized applications. For reference, see Red Hat bz 605555, as well as
http://www.spinics.net/lists/kvm/msg37660.html
---
This patch adds userspace support for the CHECKSUM kernel module I sent previously.
extensions/libipt_CHECKSUM.c | 100 ++++++++++++++++++++++++++++++++++++++++ extensions/libipt_CHECKSUM.man | 8 +++ 2 files changed, 108 insertions(+), 0 deletions(-) create mode 100644 extensions/libipt_CHECKSUM.c create mode 100644 extensions/libipt_CHECKSUM.man
extensions/libipt_CHECKSUM.c new file +100 -0
@@ -0,0 +1,100 @@ +/* Shared library add-on to iptables for CHECKSUM +* +* (C) 2002 by Harald Welte <[email protected]> +* (C) 2010 by Red Hat, Inc +* Author: Michael S. Tsirkin <[email protected]> +* +* This program is distributed under the terms of GNU GPL v2, 1991 +* +* libipt_CHECKSUM.c borrowed heavily from libipt_ECN.c +* +* $Id$ +*/ +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <getopt.h> + +#include <xtables.h> +#include <linux/netfilter_ipv4/ipt_CHECKSUM.h> + +static void CHECKSUM_help (void ) +{ +printf ( +"CHECKSUM target options\n" +" --checksum-fill Fill in packet checksum.\n" ); +} + +static const struct option CHECKSUM_opts[] = { + {"checksum-fill" ,0 ,NULL ,'F' }, + { .name =NULL } +}; + +static int CHECKSUM_parse (int c,char **argv,int invert,unsigned int *flags, +const void *entry,struct xt_entry_target **target) +{ +unsigned int result; +struct ipt_CHECKSUM_info *einfo + = (struct ipt_CHECKSUM_info *)(*target)->data; + +switch (c) { +case 'F' : +if (*flags) +xtables_error (PARAMETER_PROBLEM , +"CHECKSUM target: Only use --checksum-fill ONCE!" ); + einfo->operation =IPT_CHECKSUM_OP_FILL ; + *flags |=IPT_CHECKSUM_OP_FILL ; +break ; +default : +return 0 ; + } + +return 1 ; +} + +static void CHECKSUM_check (unsigned int flags) +{ +if (!flags) +xtables_error (PARAMETER_PROBLEM , +"CHECKSUM target: Parameter --checksum-fill is required" ); +} + +static void CHECKSUM_print (const void *ip,const struct xt_entry_target *target, +int numeric) +{ +const struct ipt_CHECKSUM_info *einfo = + (const struct ipt_CHECKSUM_info *)target->data; + +printf ("CHECKSUM " ); + +if (einfo->operation &IPT_CHECKSUM_OP_FILL ) +printf ("fill " ); +} + +static void CHECKSUM_save (const void *ip,const struct xt_entry_target *target) +{ +const struct ipt_CHECKSUM_info *einfo = + (const struct ipt_CHECKSUM_info *)target->data; + +if (einfo->operation &IPT_CHECKSUM_OP_FILL ) +printf ("--checksum-fill " ); +} + +static struct xtables_target checksum_tg_reg = { + .name ="CHECKSUM" , + .version =XTABLES_VERSION , + .family =NFPROTO_IPV4 , + .size =XT_ALIGN (sizeof (struct ipt_CHECKSUM_info )), + .userspacesize =XT_ALIGN (sizeof (struct ipt_CHECKSUM_info )), + .help = CHECKSUM_help, + .parse = CHECKSUM_parse, + .final_check = CHECKSUM_check, + .print = CHECKSUM_print, + .save = CHECKSUM_save, + .extra_opts = CHECKSUM_opts, +}; + +void _init (void ) +{ +xtables_register_target (&checksum_tg_reg); +}
extensions/libipt_CHECKSUM.man new file +8 -0
@@ -0,0 +1,8 @@ +This target allows to selectively work around broken/old applications. +It can only be used in the mangle table. +.TP +\fB\-\-checksum\-fill\fP +Compute and fill in the checksum in an IP packet that lacks a checksum. +This is particularly useful, if you need to work around old applications +such as dhcp clients, that do not work well with checksum offloads, +but don't want to disable checksum offload in your device.
Signature · 1 line
1.7.2.rc0.14.g41c1c
PATCH 1/1 extensions: libipt_CHECKSUM extension
In reply to Michael S. TsirkinThis adds a `CHECKSUM' target, which can be used in the iptables mangle table.
You can use this target to compute and fill in the checksum in an IP packet that lacks a checksum. This is particularly useful, if you need to work around old applications such as dhcp clients, that do not work well with checksum offloads, but don't want to disable checksum offload in your device.
The problem happens in the field with virtualized applications. For reference, see Red Hat bz 605555, as well as
http://www.spinics.net/lists/kvm/msg37660.html
---
This patch adds userspace support for the CHECKSUM kernel module I sent previously.
extensions/libipt_CHECKSUM.c | 100 ++++++++++++++++++++++++++++++++++++++++ extensions/libipt_CHECKSUM.man | 8 +++ 2 files changed, 108 insertions(+), 0 deletions(-) create mode 100644 extensions/libipt_CHECKSUM.c create mode 100644 extensions/libipt_CHECKSUM.man
extensions/libipt_CHECKSUM.c new file +100 -0
@@ -0,0 +1,100 @@ +/* Shared library add-on to iptables for CHECKSUM +* +* (C) 2002 by Harald Welte <[email protected]> +* (C) 2010 by Red Hat, Inc +* Author: Michael S. Tsirkin <[email protected]> +* +* This program is distributed under the terms of GNU GPL v2, 1991 +* +* libipt_CHECKSUM.c borrowed heavily from libipt_ECN.c +* +* $Id$ +*/ +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <getopt.h> + +#include <xtables.h> +#include <linux/netfilter_ipv4/ipt_CHECKSUM.h> + +static void CHECKSUM_help (void ) +{ +printf ( +"CHECKSUM target options\n" +" --checksum-fill Fill in packet checksum.\n" ); +} + +static const struct option CHECKSUM_opts[] = { + {"checksum-fill" ,0 ,NULL ,'F' }, + { .name =NULL } +}; + +static int CHECKSUM_parse (int c,char **argv,int invert,unsigned int *flags, +const void *entry,struct xt_entry_target **target) +{ +unsigned int result; +struct ipt_CHECKSUM_info *einfo + = (struct ipt_CHECKSUM_info *)(*target)->data; + +switch (c) { +case 'F' : +if (*flags) +xtables_error (PARAMETER_PROBLEM , +"CHECKSUM target: Only use --checksum-fill ONCE!" ); + einfo->operation =IPT_CHECKSUM_OP_FILL ; + *flags |=IPT_CHECKSUM_OP_FILL ; +break ; +default : +return 0 ; + } + +return 1 ; +} + +static void CHECKSUM_check (unsigned int flags) +{ +if (!flags) +xtables_error (PARAMETER_PROBLEM , +"CHECKSUM target: Parameter --checksum-fill is required" ); +} + +static void CHECKSUM_print (const void *ip,const struct xt_entry_target *target, +int numeric) +{ +const struct ipt_CHECKSUM_info *einfo = + (const struct ipt_CHECKSUM_info *)target->data; + +printf ("CHECKSUM " ); + +if (einfo->operation &IPT_CHECKSUM_OP_FILL ) +printf ("fill " ); +} + +static void CHECKSUM_save (const void *ip,const struct xt_entry_target *target) +{ +const struct ipt_CHECKSUM_info *einfo = + (const struct ipt_CHECKSUM_info *)target->data; + +if (einfo->operation &IPT_CHECKSUM_OP_FILL ) +printf ("--checksum-fill " ); +} + +static struct xtables_target checksum_tg_reg = { + .name ="CHECKSUM" , + .version =XTABLES_VERSION , + .family =NFPROTO_IPV4 , + .size =XT_ALIGN (sizeof (struct ipt_CHECKSUM_info )), + .userspacesize =XT_ALIGN (sizeof (struct ipt_CHECKSUM_info )), + .help = CHECKSUM_help, + .parse = CHECKSUM_parse, + .final_check = CHECKSUM_check, + .print = CHECKSUM_print, + .save = CHECKSUM_save, + .extra_opts = CHECKSUM_opts, +}; + +void _init (void ) +{ +xtables_register_target (&checksum_tg_reg); +}
extensions/libipt_CHECKSUM.man new file +8 -0
@@ -0,0 +1,8 @@ +This target allows to selectively work around broken/old applications. +It can only be used in the mangle table. +.TP +\fB\-\-checksum\-fill\fP +Compute and fill in the checksum in an IP packet that lacks a checksum. +This is particularly useful, if you need to work around old applications +such as dhcp clients, that do not work well with checksum offloads, +but don't want to disable checksum offload in your device.
Signature · 1 line
1.7.2.rc0.14.g41c1c
PATCH 1/1 extensions: libipt_CHECKSUM extension
In reply to Michael S. TsirkinThis adds a `CHECKSUM' target, which can be used in the iptables mangle table.
You can use this target to compute and fill in the checksum in an IP packet that lacks a checksum. This is particularly useful, if you need to work around old applications such as dhcp clients, that do not work well with checksum offloads, but don't want to disable checksum offload in your device.
The problem happens in the field with virtualized applications. For reference, see Red Hat bz 605555, as well as
http://www.spinics.net/lists/kvm/msg37660.html
---
This patch adds userspace support for the CHECKSUM kernel module I sent previously.
extensions/libipt_CHECKSUM.c | 100 ++++++++++++++++++++++++++++++++++++++++ extensions/libipt_CHECKSUM.man | 8 +++ 2 files changed, 108 insertions(+), 0 deletions(-) create mode 100644 extensions/libipt_CHECKSUM.c create mode 100644 extensions/libipt_CHECKSUM.man
extensions/libipt_CHECKSUM.c new file +100 -0
@@ -0,0 +1,100 @@ +/* Shared library add-on to iptables for CHECKSUM +* +* (C) 2002 by Harald Welte <[email protected]> +* (C) 2010 by Red Hat, Inc +* Author: Michael S. Tsirkin <[email protected]> +* +* This program is distributed under the terms of GNU GPL v2, 1991 +* +* libipt_CHECKSUM.c borrowed heavily from libipt_ECN.c +* +* $Id$ +*/ +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <getopt.h> + +#include <xtables.h> +#include <linux/netfilter_ipv4/ipt_CHECKSUM.h> + +static void CHECKSUM_help (void ) +{ +printf ( +"CHECKSUM target options\n" +" --checksum-fill Fill in packet checksum.\n" ); +} + +static const struct option CHECKSUM_opts[] = { + {"checksum-fill" ,0 ,NULL ,'F' }, + { .name =NULL } +}; + +static int CHECKSUM_parse (int c,char **argv,int invert,unsigned int *flags, +const void *entry,struct xt_entry_target **target) +{ +unsigned int result; +struct ipt_CHECKSUM_info *einfo + = (struct ipt_CHECKSUM_info *)(*target)->data; + +switch (c) { +case 'F' : +if (*flags) +xtables_error (PARAMETER_PROBLEM , +"CHECKSUM target: Only use --checksum-fill ONCE!" ); + einfo->operation =IPT_CHECKSUM_OP_FILL ; + *flags |=IPT_CHECKSUM_OP_FILL ; +break ; +default : +return 0 ; + } + +return 1 ; +} + +static void CHECKSUM_check (unsigned int flags) +{ +if (!flags) +xtables_error (PARAMETER_PROBLEM , +"CHECKSUM target: Parameter --checksum-fill is required" ); +} + +static void CHECKSUM_print (const void *ip,const struct xt_entry_target *target, +int numeric) +{ +const struct ipt_CHECKSUM_info *einfo = + (const struct ipt_CHECKSUM_info *)target->data; + +printf ("CHECKSUM " ); + +if (einfo->operation &IPT_CHECKSUM_OP_FILL ) +printf ("fill " ); +} + +static void CHECKSUM_save (const void *ip,const struct xt_entry_target *target) +{ +const struct ipt_CHECKSUM_info *einfo = + (const struct ipt_CHECKSUM_info *)target->data; + +if (einfo->operation &IPT_CHECKSUM_OP_FILL ) +printf ("--checksum-fill " ); +} + +static struct xtables_target checksum_tg_reg = { + .name ="CHECKSUM" , + .version =XTABLES_VERSION , + .family =NFPROTO_IPV4 , + .size =XT_ALIGN (sizeof (struct ipt_CHECKSUM_info )), + .userspacesize =XT_ALIGN (sizeof (struct ipt_CHECKSUM_info )), + .help = CHECKSUM_help, + .parse = CHECKSUM_parse, + .final_check = CHECKSUM_check, + .print = CHECKSUM_print, + .save = CHECKSUM_save, + .extra_opts = CHECKSUM_opts, +}; + +void _init (void ) +{ +xtables_register_target (&checksum_tg_reg); +}
extensions/libipt_CHECKSUM.man new file +8 -0
@@ -0,0 +1,8 @@ +This target allows to selectively work around broken/old applications. +It can only be used in the mangle table. +.TP +\fB\-\-checksum\-fill\fP +Compute and fill in the checksum in an IP packet that lacks a checksum. +This is particularly useful, if you need to work around old applications +such as dhcp clients, that do not work well with checksum offloads, +but don't want to disable checksum offload in your device.
Signature · 1 line
1.7.2.rc0.14.g41c1c
PATCH 1/1 extensions: libipt_CHECKSUM extension
In reply to Michael S. TsirkinThis adds a `CHECKSUM' target, which can be used in the iptables mangle table.
You can use this target to compute and fill in the checksum in an IP packet that lacks a checksum. This is particularly useful, if you need to work around old applications such as dhcp clients, that do not work well with checksum offloads, but don't want to disable checksum offload in your device.
The problem happens in the field with virtualized applications. For reference, see Red Hat bz 605555, as well as
http://www.spinics.net/lists/kvm/msg37660.html
---
This patch adds userspace support for the CHECKSUM kernel module I sent previously.
extensions/libipt_CHECKSUM.c | 100 ++++++++++++++++++++++++++++++++++++++++ extensions/libipt_CHECKSUM.man | 8 +++ 2 files changed, 108 insertions(+), 0 deletions(-) create mode 100644 extensions/libipt_CHECKSUM.c create mode 100644 extensions/libipt_CHECKSUM.man
extensions/libipt_CHECKSUM.c new file +100 -0
@@ -0,0 +1,100 @@ +/* Shared library add-on to iptables for CHECKSUM +* +* (C) 2002 by Harald Welte <[email protected]> +* (C) 2010 by Red Hat, Inc +* Author: Michael S. Tsirkin <[email protected]> +* +* This program is distributed under the terms of GNU GPL v2, 1991 +* +* libipt_CHECKSUM.c borrowed heavily from libipt_ECN.c +* +* $Id$ +*/ +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <getopt.h> + +#include <xtables.h> +#include <linux/netfilter_ipv4/ipt_CHECKSUM.h> + +static void CHECKSUM_help (void ) +{ +printf ( +"CHECKSUM target options\n" +" --checksum-fill Fill in packet checksum.\n" ); +} + +static const struct option CHECKSUM_opts[] = { + {"checksum-fill" ,0 ,NULL ,'F' }, + { .name =NULL } +}; + +static int CHECKSUM_parse (int c,char **argv,int invert,unsigned int *flags, +const void *entry,struct xt_entry_target **target) +{ +unsigned int result; +struct ipt_CHECKSUM_info *einfo + = (struct ipt_CHECKSUM_info *)(*target)->data; + +switch (c) { +case 'F' : +if (*flags) +xtables_error (PARAMETER_PROBLEM , +"CHECKSUM target: Only use --checksum-fill ONCE!" ); + einfo->operation =IPT_CHECKSUM_OP_FILL ; + *flags |=IPT_CHECKSUM_OP_FILL ; +break ; +default : +return 0 ; + } + +return 1 ; +} + +static void CHECKSUM_check (unsigned int flags) +{ +if (!flags) +xtables_error (PARAMETER_PROBLEM , +"CHECKSUM target: Parameter --checksum-fill is required" ); +} + +static void CHECKSUM_print (const void *ip,const struct xt_entry_target *target, +int numeric) +{ +const struct ipt_CHECKSUM_info *einfo = + (const struct ipt_CHECKSUM_info *)target->data; + +printf ("CHECKSUM " ); + +if (einfo->operation &IPT_CHECKSUM_OP_FILL ) +printf ("fill " ); +} + +static void CHECKSUM_save (const void *ip,const struct xt_entry_target *target) +{ +const struct ipt_CHECKSUM_info *einfo = + (const struct ipt_CHECKSUM_info *)target->data; + +if (einfo->operation &IPT_CHECKSUM_OP_FILL ) +printf ("--checksum-fill " ); +} + +static struct xtables_target checksum_tg_reg = { + .name ="CHECKSUM" , + .version =XTABLES_VERSION , + .family =NFPROTO_IPV4 , + .size =XT_ALIGN (sizeof (struct ipt_CHECKSUM_info )), + .userspacesize =XT_ALIGN (sizeof (struct ipt_CHECKSUM_info )), + .help = CHECKSUM_help, + .parse = CHECKSUM_parse, + .final_check = CHECKSUM_check, + .print = CHECKSUM_print, + .save = CHECKSUM_save, + .extra_opts = CHECKSUM_opts, +}; + +void _init (void ) +{ +xtables_register_target (&checksum_tg_reg); +}
extensions/libipt_CHECKSUM.man new file +8 -0
@@ -0,0 +1,8 @@ +This target allows to selectively work around broken/old applications. +It can only be used in the mangle table. +.TP +\fB\-\-checksum\-fill\fP +Compute and fill in the checksum in an IP packet that lacks a checksum. +This is particularly useful, if you need to work around old applications +such as dhcp clients, that do not work well with checksum offloads, +but don't want to disable checksum offload in your device.
Signature · 1 line
1.7.2.rc0.14.g41c1c
Quoted 13 lines · Michael S. Tsirkin
This adds a `CHECKSUM' target, which can be used in the iptables mangle table.
You can use this target to compute and fill in the checksum in an IP packet that lacks a checksum. This is particularly useful, if you need to work around old applications such as dhcp clients, that do not work well with checksum offloads, but don't want to disable checksum offload in your device.
The problem happens in the field with virtualized applications. For reference, see Red Hat bz 605555, as well as
http://www.spinics.net/lists/kvm/msg37660.html
Quoted 5 lines
Typical expected use (helps old dhclient binary running in a VM):
iptables -A POSTROUTING -t mangle -p udp --dport 68 -j CHECKSUM --checksum-fillSigned-off-by Michael S. Tsirkin <[email protected]>
I'd think that this target would be protocol-agnostic, no?
Cheers,
Signature · 3 lines
Email: Herbert Xu <[email protected]> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
Quoted 14 lines · Herbert Xu
Quoted 13 lines · Michael S. Tsirkin
This adds a `CHECKSUM' target, which can be used in the iptables mangle table.
You can use this target to compute and fill in the checksum in an IP packet that lacks a checksum. This is particularly useful, if you need to work around old applications such as dhcp clients, that do not work well with checksum offloads, but don't want to disable checksum offload in your device.
The problem happens in the field with virtualized applications. For reference, see Red Hat bz 605555, as well as
http://www.spinics.net/lists/kvm/msg37660.html
Quoted 7 lines
Quoted 5 lines
Typical expected use (helps old dhclient binary running in a VM):
iptables -A POSTROUTING -t mangle -p udp --dport 68 -j CHECKSUM --checksum-fillSigned-off-by Michael S. Tsirkin <[email protected]>I'd think that this target would be protocol-agnostic, no?
Meaning it should go into net/netfilter/? Will do.
Quoted 5 lines
Cheers,
Signature · 3 lines
Email: Herbert Xu <[email protected]> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
Quoted 4 lines · Michael S. Tsirkin
Quoted 2 lines
I'd think that this target would be protocol-agnostic, no?
Meaning it should go into
net/netfilter/? Will do.
Right, and you should get rid of any IPv4 dependencies.
Thanks,
Signature · 3 lines
Email: Herbert Xu <[email protected]> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
Quoted 5 lines · Michael S. Tsirkin
include/linux/netfilter_ipv4/ipt_CHECKSUM.h | 18 +++++++ net/ipv4/netfilter/Kconfig | 16 ++++++ net/ipv4/netfilter/Makefile | 1 + net/ipv4/netfilter/ipt_CHECKSUM.c | 72 +++++++++++++++++++++++++++
New modules should use xt.
net/ipv4/netfilter/ipt_CHECKSUM.c line 31
Quoted 6 lines
net/ipv4/netfilter/ipt_CHECKSUM.c new file +6
-0+static unsigned int +checksum_tg (struct sk_buff *skb,const struct xt_action_param *par) +{ +if (skb->ip_summed ==CHECKSUM_PARTIAL ) { +skb_checksum_help (skb); + }
- {}
Quoted 9 lines · Jan Engelhardt
Quoted 5 lines · Michael S. Tsirkin
include/linux/netfilter_ipv4/ipt_CHECKSUM.h | 18 +++++++ net/ipv4/netfilter/Kconfig | 16 ++++++ net/ipv4/netfilter/Makefile | 1 + net/ipv4/netfilter/ipt_CHECKSUM.c | 72 +++++++++++++++++++++++++++New modules should use xt.
I tried moving the module to xt_CHECKSUM but now
iptables -A POSTROUTING -t mangle -p udp --dport 68 -j CHECKSUM --checksum-fill
does not to load the module.
It seems that xt_request_find_target in x_tables uses the prefix 'ip' for a module. What am I missing?
Quoted 8 lines
net/ipv4/netfilter/ipt_CHECKSUM.c line 31
Quoted 6 lines
net/ipv4/netfilter/ipt_CHECKSUM.c new file +6
-0+static unsigned int +checksum_tg (struct sk_buff *skb,const struct xt_action_param *par) +{ +if (skb->ip_summed ==CHECKSUM_PARTIAL ) { +skb_checksum_help (skb); + }- {}
Quoted 9 lines · Michael S. Tsirkin
Quoted 8 lines · Jan Engelhardt
Quoted 5 lines · Michael S. Tsirkin
include/linux/netfilter_ipv4/ipt_CHECKSUM.h| 18 +++++++net/ipv4/netfilter/Kconfig| 16 ++++++net/ipv4/netfilter/Makefile| 1 +net/ipv4/netfilter/ipt_CHECKSUM.c| 72 +++++++++++++++++++++++++++
Quoted 8 lines
Quoted 1 line
New modules should use xt.
I tried moving the module to
xt_CHECKSUMbut now
iptables -A POSTROUTING -t mangle -p udp --dport 68 -j CHECKSUM --checksum-fill does not to load the module.
It seems thatxt_request_find_targetinx_tablesuses the prefix 'ip' for a module. What am I missing?
You should add MODULE_ALIAS clause, i.e.
MODULE_ALIAS("ipt_CHECKSUM");
Signature · 2 lines
Regards, Changli Gao([email protected])
Quoted 19 lines · Changli Gao
Quoted 9 lines · Michael S. Tsirkin
Quoted 8 lines · Jan Engelhardt
Quoted 5 lines · Michael S. Tsirkin
include/linux/netfilter_ipv4/ipt_CHECKSUM.h| 18 +++++++net/ipv4/netfilter/Kconfig| 16 ++++++net/ipv4/netfilter/Makefile| 1 +net/ipv4/netfilter/ipt_CHECKSUM.c| 72 +++++++++++++++++++++++++++Quoted 8 lines
Quoted 1 line
New modules should use xt.
I tried moving the module to
xt_CHECKSUMbut now
iptables -A POSTROUTING -t mangle -p udp --dport 68 -j CHECKSUM --checksum-fill does not to load the module.
It seems thatxt_request_find_targetinx_tablesuses the prefix 'ip' for a module. What am I missing?
Quoted 3 lines
You should add
MODULE_ALIASclause, i.e.
MODULE_ALIAS("ipt_CHECKSUM");
This worked, thanks!
Quoted 3 lines
Signature · 2 lines
Regards, Changli Gao([email protected])
Quoted 6 lines · Michael S. Tsirkin
Quoted 6 lines
Quoted 5 lines
include/linux/netfilter_ipv4/ipt_CHECKSUM.h | 18 +++++++ net/ipv4/netfilter/Kconfig | 16 ++++++ net/ipv4/netfilter/Makefile | 1 + net/ipv4/netfilter/ipt_CHECKSUM.c | 72 +++++++++++++++++++++++++++
Quoted 7 lines
Quoted 1 line
New modules should use xt.
I tried moving the module to
xt_CHECKSUMbut nowiptables -A POSTROUTING -t mangle -p udp --dport 68 -j CHECKSUM --checksum-filldoes not to load the module.
It seems thatxt_request_find_targetinx_tablesuses the prefix 'ip' for a module. What am I missing?
MODULE_ALIAS like the others have.
Quoted 10 lines · Jan Engelhardt
Quoted 8 lines · Michael S. Tsirkin
Quoted 7 lines
Quoted 5 lines
include/linux/netfilter_ipv4/ipt_CHECKSUM.h | 18 +++++++ net/ipv4/netfilter/Kconfig | 16 ++++++ net/ipv4/netfilter/Makefile | 1 + net/ipv4/netfilter/ipt_CHECKSUM.c | 72 +++++++++++++++++++++++++++New modules should use xt.
Quoted 7 lines
Quoted 5 lines
I tried moving the module to
xt_CHECKSUMbut nowiptables -A POSTROUTING -t mangle -p udp --dport 68 -j CHECKSUM --checksum-filldoes not to load the module.
It seems thatxt_request_find_targetinx_tablesuses the prefix 'ip' for a module. What am I missing?
MODULE_ALIASlike the others have.
Worked for me, thanks!
Am 09.07.2010 00:29, schrieb Michael S. Tsirkin:
Quoted 9 lines
This adds a `CHECKSUM' target, which can be used in the iptables mangle table.
You can use this target to compute and fill in the checksum in an IP packet that lacks a checksum. This is particularly useful, if you need to work around old applications such as dhcp clients, that do not work well with checksum offloads, but don't want to disable checksum offload in your device.
Quoted 7 lines
The problem happens in the field with virtualized applications. For reference, see Red Hat bz 605555, as well as
http://www.spinics.net/lists/kvm/msg37660.htmlTypical expected use (helps old dhclient binary running in a VM):
iptables -A POSTROUTING -t mangle -p udp --dport 68 -j CHECKSUM --checksum-fill
I'm not sure this is something we want to merge upstream and support indefinitely. Dave suggested this as a temporary out-of-tree workaround until the majority of guest dhcp clients are fixed. Has anything changed that makes this course of action impractical?
Quoted 4 lines · Patrick McHardy
Quoted 4 lines
This adds a `CHECKSUM' target, which can be used in the iptables mangle table.
Quoted 8 lines
Quoted 5 lines
You can use this target to compute and fill in the checksum in an IP packet that lacks a checksum. This is particularly useful, if you need to work around old applications such as dhcp clients, that do not work well with checksum offloads, but don't want to disable checksum offload in your device.
I'm not sure this is something we want to merge upstream and support indefinitely.
We could put it into Xtables-addons. That would also be consistent with Dave's suggestion.
Quoted 4 lines
Dave suggested this as a temporary
out-of-tree workaround until the majority of guest dhcp clients are fixed. Has anything changed that makes this course of action impractical?
Am 09.07.2010 18:26, schrieb Jan Engelhardt:
Quoted 12 lines · Patrick McHardy
Quoted 10 lines
Quoted 9 lines
This adds a `CHECKSUM' target, which can be used in the iptables mangle table.
You can use this target to compute and fill in the checksum in an IP packet that lacks a checksum. This is particularly useful, if you need to work around old applications such as dhcp clients, that do not work well with checksum offloads, but don't want to disable checksum offload in your device.
Quoted 5 lines
Quoted 2 lines
I'm not sure this is something we want to merge upstream and support indefinitely.
We could put it into Xtables-addons. That would also be consistent with Dave's suggestion.
Sure, that would be fine with me.
Quoted 18 lines · Patrick McHardy
Am 09.07.2010 00:29, schrieb Michael S. Tsirkin:
Quoted 9 lines
This adds a `CHECKSUM' target, which can be used in the iptables mangle table.
You can use this target to compute and fill in the checksum in an IP packet that lacks a checksum. This is particularly useful, if you need to work around old applications such as dhcp clients, that do not work well with checksum offloads, but don't want to disable checksum offload in your device.
Quoted 7 lines
The problem happens in the field with virtualized applications. For reference, see Red Hat bz 605555, as well as
http://www.spinics.net/lists/kvm/msg37660.htmlTypical expected use (helps old dhclient binary running in a VM):
iptables -A POSTROUTING -t mangle -p udp --dport 68 -j CHECKSUM --checksum-fill
Quoted 5 lines
I'm not sure this is something we want to merge upstream and support indefinitely. Dave suggested this as a temporary out-of-tree workaround until the majority of guest dhcp clients are fixed. Has anything changed that makes this course of action impractical?
If I understand what Dave said correctly, it's up to you ...
The arguments for putting this upstream are:
Given the track record, I wouldn't hope for quick fix in the majority of guest dhcp clients, unfortunately :(. We are talking years here. Even after that, one of the uses of virtualization is
to keep old guests running. So yes, I think we'll
keep using work-arounds for this for a very long time.
Further, since we have to add the module and we have to teach management to program it, it will be much less painful for everyone involved if we can put the code upstream, rather than forking management code.
Signature · 1 line
MST
Am 11.07.2010 12:47, schrieb Michael S. Tsirkin:
Quoted 35 lines · Patrick McHardy
Quoted 18 lines
Am 09.07.2010 00:29, schrieb Michael S. Tsirkin:
Quoted 9 lines
This adds a `CHECKSUM' target, which can be used in the iptables mangle table.
You can use this target to compute and fill in the checksum in an IP packet that lacks a checksum. This is particularly useful, if you need to work around old applications such as dhcp clients, that do not work well with checksum offloads, but don't want to disable checksum offload in your device.
Quoted 7 lines
The problem happens in the field with virtualized applications. For reference, see Red Hat bz 605555, as well as
http://www.spinics.net/lists/kvm/msg37660.htmlTypical expected use (helps old dhclient binary running in a VM):
iptables -A POSTROUTING -t mangle -p udp --dport 68 -j CHECKSUM --checksum-fillQuoted 5 lines
I'm not sure this is something we want to merge upstream and support indefinitely. Dave suggested this as a temporary out-of-tree workaround until the majority of guest dhcp clients are fixed. Has anything changed that makes this course of action impractical?
If I understand what Dave said correctly, it's up to you ...
The arguments for putting this upstream are:
Given the track record, I wouldn't hope for quick fix in the majority of guest dhcp clients, unfortunately :(. We are talking years here. Even after that, one of the uses of virtualization is
to keep old guests running. So yes, I think we'll
keep using work-arounds for this for a very long time.
Quoted 4 lines
Further, since we have to add the module and we have to teach management to program it, it will be much less painful for everyone involved if we can put the code upstream, rather than forking management code.
Fair enough, its simple enough that I don't expect much maintenance overhead.