From: Pablo Neira <pablo@eurodev.net>
To: Patrick McHardy <kaber@trash.net>
Cc: netfilter-devel@lists.netfilter.org
Subject: [PATCH] kill NFC_* stuff in iptables [was Re: iptables compile error: NFC_IP_TOS undeclared]
Date: Fri, 11 Feb 2005 00:16:06 +0100 [thread overview]
Message-ID: <420BEB36.7080209@eurodev.net> (raw)
In-Reply-To: <420B9ED0.1020303@trash.net>
[-- Attachment #1: Type: text/plain, Size: 838 bytes --]
Hi Patrick,
Patrick McHardy wrote:
> Jonas Berlin wrote:
>
>> Alexander Piavka wrote:
>>
>>>
>>> actually there is no match from NFC_IP_TOS in the whole
>>> /usr/src/linux-2.6.10-ct_sync-rc1/include subtree
>>>
>>>
>> Ok, I'm not that familiar with different kernel versions, but my
>> 2.6.10 at least has that one. Could it be that the ct_sync patch
>> takes it away? Do you have ct_sync as a patch or did you get the
>> kernel pre-patched?
>
>
> Yes, it reuses the bits to record state changes. The nfcache bits
> don't affect any functionality, just define it to anything you want
> or remove it.
I've renamed all NFC_* stuff != NFC_UNKNOWN to NFC_UNKNOWN. So people
using ct_sync won't complain about this again. I see this as a first
step to remove the old behaviour of nfcache. Please, see the patch attached.
--
Pablo
[-- Attachment #2: kill-NFC.patch --]
[-- Type: text/x-patch, Size: 16262 bytes --]
Index: iptables.c
===================================================================
--- iptables.c (revision 3656)
+++ iptables.c (working copy)
@@ -1987,7 +1987,7 @@
&& (fw.ip.invflags & IPT_INV_PROTO))
exit_error(PARAMETER_PROBLEM,
"rule would never match protocol");
- fw.nfcache |= NFC_IP_PROTO;
+ fw.nfcache |= NFC_UNKNOWN;
break;
case 's':
@@ -1995,7 +1995,7 @@
set_option(&options, OPT_SOURCE, &fw.ip.invflags,
invert);
shostnetworkmask = argv[optind-1];
- fw.nfcache |= NFC_IP_SRC;
+ fw.nfcache |= NFC_UNKNOWN;
break;
case 'd':
@@ -2003,7 +2003,7 @@
set_option(&options, OPT_DESTINATION, &fw.ip.invflags,
invert);
dhostnetworkmask = argv[optind-1];
- fw.nfcache |= NFC_IP_DST;
+ fw.nfcache |= NFC_UNKNOWN;
break;
case 'j':
@@ -2037,7 +2037,7 @@
parse_interface(argv[optind-1],
fw.ip.iniface,
fw.ip.iniface_mask);
- fw.nfcache |= NFC_IP_IF_IN;
+ fw.nfcache |= NFC_UNKNOWN;
break;
case 'o':
@@ -2047,14 +2047,14 @@
parse_interface(argv[optind-1],
fw.ip.outiface,
fw.ip.outiface_mask);
- fw.nfcache |= NFC_IP_IF_OUT;
+ fw.nfcache |= NFC_UNKNOWN;
break;
case 'f':
set_option(&options, OPT_FRAGMENT, &fw.ip.invflags,
invert);
fw.ip.flags |= IPT_F_FRAG;
- fw.nfcache |= NFC_IP_FRAG;
+ fw.nfcache |= NFC_UNKNOWN;
break;
case 'v':
Index: libiptc/libip4tc.c
===================================================================
--- libiptc/libip4tc.c (revision 3656)
+++ libiptc/libip4tc.c (working copy)
@@ -149,17 +149,6 @@
printf("Cache: %08X ", e->nfcache);
if (e->nfcache & NFC_ALTERED) printf("ALTERED ");
if (e->nfcache & NFC_UNKNOWN) printf("UNKNOWN ");
- if (e->nfcache & NFC_IP_SRC) printf("IP_SRC ");
- if (e->nfcache & NFC_IP_DST) printf("IP_DST ");
- if (e->nfcache & NFC_IP_IF_IN) printf("IP_IF_IN ");
- if (e->nfcache & NFC_IP_IF_OUT) printf("IP_IF_OUT ");
- if (e->nfcache & NFC_IP_TOS) printf("IP_TOS ");
- if (e->nfcache & NFC_IP_PROTO) printf("IP_PROTO ");
- if (e->nfcache & NFC_IP_OPTIONS) printf("IP_OPTIONS ");
- if (e->nfcache & NFC_IP_TCPFLAGS) printf("IP_TCPFLAGS ");
- if (e->nfcache & NFC_IP_SRC_PT) printf("IP_SRC_PT ");
- if (e->nfcache & NFC_IP_DST_PT) printf("IP_DST_PT ");
- if (e->nfcache & NFC_IP_PROTO_UNKNOWN) printf("IP_PROTO_UNKNOWN ");
printf("\n");
IPT_MATCH_ITERATE(e, print_match);
Index: libiptc/libip6tc.c
===================================================================
--- libiptc/libip6tc.c (revision 3656)
+++ libiptc/libip6tc.c (working copy)
@@ -180,17 +180,6 @@
printf("Cache: %08X ", e->nfcache);
if (e->nfcache & NFC_ALTERED) printf("ALTERED ");
if (e->nfcache & NFC_UNKNOWN) printf("UNKNOWN ");
- if (e->nfcache & NFC_IP6_SRC) printf("IP6_SRC ");
- if (e->nfcache & NFC_IP6_DST) printf("IP6_DST ");
- if (e->nfcache & NFC_IP6_IF_IN) printf("IP6_IF_IN ");
- if (e->nfcache & NFC_IP6_IF_OUT) printf("IP6_IF_OUT ");
- if (e->nfcache & NFC_IP6_TOS) printf("IP6_TOS ");
- if (e->nfcache & NFC_IP6_PROTO) printf("IP6_PROTO ");
- if (e->nfcache & NFC_IP6_OPTIONS) printf("IP6_OPTIONS ");
- if (e->nfcache & NFC_IP6_TCPFLAGS) printf("IP6_TCPFLAGS ");
- if (e->nfcache & NFC_IP6_SRC_PT) printf("IP6_SRC_PT ");
- if (e->nfcache & NFC_IP6_DST_PT) printf("IP6_DST_PT ");
- if (e->nfcache & NFC_IP6_PROTO_UNKNOWN) printf("IP6_PROTO_UNKNOWN ");
printf("\n");
IP6T_MATCH_ITERATE(e, print_match);
Index: extensions/libip6t_multiport.c
===================================================================
--- extensions/libip6t_multiport.c (revision 3656)
+++ extensions/libip6t_multiport.c (working copy)
@@ -117,7 +117,7 @@
multiinfo->count = parse_multi_ports(argv[optind-1],
multiinfo->ports, proto);
multiinfo->flags = IP6T_MULTIPORT_SOURCE;
- *nfcache |= NFC_IP6_SRC_PT;
+ *nfcache |= NFC_UNKNOWN;
break;
case '2':
@@ -126,7 +126,7 @@
multiinfo->count = parse_multi_ports(argv[optind-1],
multiinfo->ports, proto);
multiinfo->flags = IP6T_MULTIPORT_DESTINATION;
- *nfcache |= NFC_IP6_DST_PT;
+ *nfcache |= NFC_UNKNOWN;
break;
case '3':
@@ -135,7 +135,7 @@
multiinfo->count = parse_multi_ports(argv[optind-1],
multiinfo->ports, proto);
multiinfo->flags = IP6T_MULTIPORT_EITHER;
- *nfcache |= NFC_IP6_SRC_PT | NFC_IP6_DST_PT;
+ *nfcache |= NFC_UNKNOWN;
break;
default:
Index: extensions/libipt_multiport.c
===================================================================
--- extensions/libipt_multiport.c (revision 3656)
+++ extensions/libipt_multiport.c (working copy)
@@ -179,7 +179,7 @@
multiinfo->count = parse_multi_ports(argv[optind-1],
multiinfo->ports, proto);
multiinfo->flags = IPT_MULTIPORT_SOURCE;
- *nfcache |= NFC_IP_SRC_PT;
+ *nfcache |= NFC_UNKNOWN;
break;
case '2':
@@ -188,7 +188,7 @@
multiinfo->count = parse_multi_ports(argv[optind-1],
multiinfo->ports, proto);
multiinfo->flags = IPT_MULTIPORT_DESTINATION;
- *nfcache |= NFC_IP_DST_PT;
+ *nfcache |= NFC_UNKNOWN;
break;
case '3':
@@ -197,7 +197,7 @@
multiinfo->count = parse_multi_ports(argv[optind-1],
multiinfo->ports, proto);
multiinfo->flags = IPT_MULTIPORT_EITHER;
- *nfcache |= NFC_IP_SRC_PT | NFC_IP_DST_PT;
+ *nfcache |= NFC_UNKNOWN;
break;
default:
@@ -231,7 +231,7 @@
proto = check_proto(entry);
parse_multi_ports_v1(argv[optind-1], multiinfo, proto);
multiinfo->flags = IPT_MULTIPORT_SOURCE;
- *nfcache |= NFC_IP_SRC_PT;
+ *nfcache |= NFC_UNKNOWN;
break;
case '2':
@@ -239,7 +239,7 @@
proto = check_proto(entry);
parse_multi_ports_v1(argv[optind-1], multiinfo, proto);
multiinfo->flags = IPT_MULTIPORT_DESTINATION;
- *nfcache |= NFC_IP_DST_PT;
+ *nfcache |= NFC_UNKNOWN;
break;
case '3':
@@ -247,7 +247,7 @@
proto = check_proto(entry);
parse_multi_ports_v1(argv[optind-1], multiinfo, proto);
multiinfo->flags = IPT_MULTIPORT_EITHER;
- *nfcache |= NFC_IP_SRC_PT | NFC_IP_DST_PT;
+ *nfcache |= NFC_UNKNOWN;
break;
default:
Index: extensions/libipt_tos.c
===================================================================
--- extensions/libipt_tos.c (revision 3656)
+++ extensions/libipt_tos.c (working copy)
@@ -51,7 +51,7 @@
static void
init(struct ipt_entry_match *m, unsigned int *nfcache)
{
- *nfcache |= NFC_IP_TOS;
+ *nfcache |= NFC_UNKNOWN;
}
static void
Index: extensions/libipt_TCPLAG.c
===================================================================
--- extensions/libipt_TCPLAG.c (revision 3656)
+++ extensions/libipt_TCPLAG.c (working copy)
@@ -70,18 +70,6 @@
* our own private data structure (which is at t->data).
* Probably we could fiddle with t->tflags too but there is
* no great advantage in doing so.
- *
- * TODO: Find documentation for the above flags which
- * can be ored into nfcache...
- *
- * NFC_IP6_DST_PT
- * NFC_IP6_PROTO_UNKNOWN
- * NFC_IP6_SRC_PT
- * NFC_IP6_TCPFLAGS
- * NFC_IP_DST_PT
- * NFC_IP_SRC_PT
- * NFC_IP_TOS
- * NFC_UNKNOWN -- This one seems safest
*/
static void init( struct ipt_entry_target *t, unsigned int *nfcache )
{
Index: extensions/libip6t_udp.c
===================================================================
--- extensions/libip6t_udp.c (revision 3656)
+++ extensions/libip6t_udp.c (working copy)
@@ -109,7 +109,7 @@
if (invert)
udpinfo->invflags |= IP6T_UDP_INV_SRCPT;
*flags |= UDP_SRC_PORTS;
- *nfcache |= NFC_IP6_SRC_PT;
+ *nfcache |= NFC_UNKNOWN;
break;
case '2':
@@ -121,7 +121,7 @@
if (invert)
udpinfo->invflags |= IP6T_UDP_INV_DSTPT;
*flags |= UDP_DST_PORTS;
- *nfcache |= NFC_IP6_DST_PT;
+ *nfcache |= NFC_UNKNOWN;
break;
default:
Index: extensions/libipt_tcpmss.c
===================================================================
--- extensions/libipt_tcpmss.c (revision 3656)
+++ extensions/libipt_tcpmss.c (working copy)
@@ -28,7 +28,7 @@
static void
init(struct ipt_entry_match *m, unsigned int *nfcache)
{
- *nfcache |= NFC_IP_PROTO_UNKNOWN;
+ *nfcache |= NFC_UNKNOWN;
}
static u_int16_t
Index: extensions/libip6t_tcp.c
===================================================================
--- extensions/libip6t_tcp.c (revision 3656)
+++ extensions/libip6t_tcp.c (working copy)
@@ -187,7 +187,7 @@
if (invert)
tcpinfo->invflags |= IP6T_TCP_INV_SRCPT;
*flags |= TCP_SRC_PORTS;
- *nfcache |= NFC_IP6_SRC_PT;
+ *nfcache |= NFC_UNKNOWN;
break;
case '2':
@@ -199,7 +199,7 @@
if (invert)
tcpinfo->invflags |= IP6T_TCP_INV_DSTPT;
*flags |= TCP_DST_PORTS;
- *nfcache |= NFC_IP6_DST_PT;
+ *nfcache |= NFC_UNKNOWN;
break;
case '3':
@@ -209,7 +209,7 @@
" allowed");
parse_tcp_flags(tcpinfo, "SYN,RST,ACK", "SYN", invert);
*flags |= TCP_FLAGS;
- *nfcache |= NFC_IP6_TCPFLAGS;
+ *nfcache |= NFC_UNKNOWN;
break;
case '4':
@@ -228,7 +228,7 @@
invert);
optind++;
*flags |= TCP_FLAGS;
- *nfcache |= NFC_IP6_TCPFLAGS;
+ *nfcache |= NFC_UNKNOWN;
break;
case '5':
@@ -240,7 +240,7 @@
if (invert)
tcpinfo->invflags |= IP6T_TCP_INV_OPTION;
*flags |= TCP_OPTION;
- *nfcache |= NFC_IP6_PROTO_UNKNOWN;
+ *nfcache |= NFC_UNKNOWN;
break;
default:
Index: extensions/libipt_mport.c
===================================================================
--- extensions/libipt_mport.c (revision 3656)
+++ extensions/libipt_mport.c (working copy)
@@ -140,7 +140,7 @@
proto = check_proto(entry);
parse_multi_ports(argv[optind-1], minfo, proto);
minfo->flags = IPT_MPORT_SOURCE;
- *nfcache |= NFC_IP_SRC_PT;
+ *nfcache |= NFC_UNKNOWN;
break;
case '2':
@@ -148,7 +148,7 @@
proto = check_proto(entry);
parse_multi_ports(argv[optind-1], minfo, proto);
minfo->flags = IPT_MPORT_DESTINATION;
- *nfcache |= NFC_IP_DST_PT;
+ *nfcache |= NFC_UNKNOWN;
break;
case '3':
@@ -156,7 +156,7 @@
proto = check_proto(entry);
parse_multi_ports(argv[optind-1], minfo, proto);
minfo->flags = IPT_MPORT_EITHER;
- *nfcache |= NFC_IP_SRC_PT | NFC_IP_DST_PT;
+ *nfcache |= NFC_UNKNOWN;
break;
default:
Index: extensions/libipt_sctp.c
===================================================================
--- extensions/libipt_sctp.c (revision 3656)
+++ extensions/libipt_sctp.c (working copy)
@@ -293,7 +293,7 @@
if (invert)
einfo->invflags |= IPT_SCTP_SRC_PORTS;
*flags |= IPT_SCTP_SRC_PORTS;
- *nfcache |= NFC_IP_SRC_PT;
+ *nfcache |= NFC_UNKNOWN;
break;
case '2':
@@ -306,7 +306,7 @@
if (invert)
einfo->invflags |= IPT_SCTP_DEST_PORTS;
*flags |= IPT_SCTP_DEST_PORTS;
- *nfcache |= NFC_IP_DST_PT;
+ *nfcache |= NFC_UNKNOWN;
break;
case '3':
Index: extensions/libipt_icmp.c
===================================================================
--- extensions/libipt_icmp.c (revision 3656)
+++ extensions/libipt_icmp.c (working copy)
@@ -114,7 +114,7 @@
{0}
};
-static unsigned int
+static void
parse_icmp(const char *icmptype, u_int8_t *type, u_int8_t code[])
{
unsigned int limit = sizeof(icmp_codes)/sizeof(struct icmp_names);
@@ -165,10 +165,6 @@
code[1] = 0xFF;
}
}
-
- if (code[0] == 0 && code[1] == 0xFF)
- return NFC_IP_SRC_PT;
- else return NFC_IP_SRC_PT | NFC_IP_DST_PT;
}
/* Initialize the match. */
@@ -194,9 +190,9 @@
switch (c) {
case '1':
check_inverse(optarg, &invert, &optind, 0);
- *nfcache |= parse_icmp(argv[optind-1],
- &icmpinfo->type,
- icmpinfo->code);
+ *nfcache |= NFC_UNKNOWN;
+ parse_icmp(argv[optind-1], &icmpinfo->type,
+ icmpinfo->code);
if (invert)
icmpinfo->invflags |= IPT_ICMP_INV;
break;
Index: extensions/libipt_dscp.c
===================================================================
--- extensions/libipt_dscp.c (revision 3656)
+++ extensions/libipt_dscp.c (working copy)
@@ -26,7 +26,7 @@
static void init(struct ipt_entry_match *m, unsigned int *nfcache)
{
- *nfcache |= NFC_IP_TOS;
+ *nfcache |= NFC_UNKNOWN;
}
static void help(void)
Index: extensions/libip6t_icmpv6.c
===================================================================
--- extensions/libip6t_icmpv6.c (revision 3656)
+++ extensions/libip6t_icmpv6.c (working copy)
@@ -90,7 +90,7 @@
{0}
};
-static unsigned int
+static void
parse_icmpv6(const char *icmpv6type, u_int8_t *type, u_int8_t code[])
{
unsigned int limit = sizeof(icmpv6_codes)/sizeof(struct icmpv6_names);
@@ -141,10 +141,6 @@
code[1] = 0xFF;
}
}
-
- if (code[0] == 0 && code[1] == 0xFF)
- return NFC_IP6_SRC_PT;
- else return NFC_IP6_SRC_PT | NFC_IP6_DST_PT;
}
/* Initialize the match. */
@@ -169,9 +165,9 @@
switch (c) {
case '1':
check_inverse(optarg, &invert, &optind, 0);
- *nfcache |= parse_icmpv6(argv[optind-1],
- &icmpv6info->type,
- icmpv6info->code);
+ *nfcache |= NFC_UNKNOWN;
+ parse_icmpv6(argv[optind-1], &icmpv6info->type,
+ icmpv6info->code);
if (invert)
icmpv6info->invflags |= IP6T_ICMP_INV;
break;
Index: extensions/libipt_udp.c
===================================================================
--- extensions/libipt_udp.c (revision 3656)
+++ extensions/libipt_udp.c (working copy)
@@ -109,7 +109,7 @@
if (invert)
udpinfo->invflags |= IPT_UDP_INV_SRCPT;
*flags |= UDP_SRC_PORTS;
- *nfcache |= NFC_IP_SRC_PT;
+ *nfcache |= NFC_UNKNOWN;
break;
case '2':
@@ -121,7 +121,7 @@
if (invert)
udpinfo->invflags |= IPT_UDP_INV_DSTPT;
*flags |= UDP_DST_PORTS;
- *nfcache |= NFC_IP_DST_PT;
+ *nfcache |= NFC_UNKNOWN;
break;
default:
Index: extensions/libipt_ecn.c
===================================================================
--- extensions/libipt_ecn.c (revision 3656)
+++ extensions/libipt_ecn.c (working copy)
@@ -18,7 +18,7 @@
static void init(struct ipt_entry_match *m, unsigned int *nfcache)
{
- *nfcache |= NFC_IP_TOS;
+ *nfcache |= NFC_UNKNOWN;
}
static void help(void)
Index: extensions/libipt_tcp.c
===================================================================
--- extensions/libipt_tcp.c (revision 3656)
+++ extensions/libipt_tcp.c (working copy)
@@ -187,7 +187,7 @@
if (invert)
tcpinfo->invflags |= IPT_TCP_INV_SRCPT;
*flags |= TCP_SRC_PORTS;
- *nfcache |= NFC_IP_SRC_PT;
+ *nfcache |= NFC_UNKNOWN;
break;
case '2':
@@ -199,7 +199,7 @@
if (invert)
tcpinfo->invflags |= IPT_TCP_INV_DSTPT;
*flags |= TCP_DST_PORTS;
- *nfcache |= NFC_IP_DST_PT;
+ *nfcache |= NFC_UNKNOWN;
break;
case '3':
@@ -209,7 +209,7 @@
" allowed");
parse_tcp_flags(tcpinfo, "SYN,RST,ACK", "SYN", invert);
*flags |= TCP_FLAGS;
- *nfcache |= NFC_IP_TCPFLAGS;
+ *nfcache |= NFC_UNKNOWN;
break;
case '4':
@@ -228,7 +228,7 @@
invert);
optind++;
*flags |= TCP_FLAGS;
- *nfcache |= NFC_IP_TCPFLAGS;
+ *nfcache |= NFC_UNKNOWN;
break;
case '5':
@@ -240,7 +240,7 @@
if (invert)
tcpinfo->invflags |= IPT_TCP_INV_OPTION;
*flags |= TCP_OPTION;
- *nfcache |= NFC_IP_PROTO_UNKNOWN;
+ *nfcache |= NFC_UNKNOWN;
break;
default:
Index: ip6tables.c
===================================================================
--- ip6tables.c (revision 3656)
+++ ip6tables.c (working copy)
@@ -1887,7 +1887,7 @@
&& (fw.ipv6.invflags & IP6T_INV_PROTO))
exit_error(PARAMETER_PROBLEM,
"rule would never match protocol");
- fw.nfcache |= NFC_IP6_PROTO;
+ fw.nfcache |= NFC_UNKNOWN;
break;
case 's':
@@ -1895,7 +1895,7 @@
set_option(&options, OPT_SOURCE, &fw.ipv6.invflags,
invert);
shostnetworkmask = argv[optind-1];
- fw.nfcache |= NFC_IP6_SRC;
+ fw.nfcache |= NFC_UNKNOWN;
break;
case 'd':
@@ -1903,7 +1903,7 @@
set_option(&options, OPT_DESTINATION, &fw.ipv6.invflags,
invert);
dhostnetworkmask = argv[optind-1];
- fw.nfcache |= NFC_IP6_DST;
+ fw.nfcache |= NFC_UNKNOWN;
break;
case 'j':
@@ -1935,7 +1935,7 @@
parse_interface(argv[optind-1],
fw.ipv6.iniface,
fw.ipv6.iniface_mask);
- fw.nfcache |= NFC_IP6_IF_IN;
+ fw.nfcache |= NFC_UNKNOWN;
break;
case 'o':
@@ -1945,7 +1945,7 @@
parse_interface(argv[optind-1],
fw.ipv6.outiface,
fw.ipv6.outiface_mask);
- fw.nfcache |= NFC_IP6_IF_OUT;
+ fw.nfcache |= NFC_UNKNOWN;
break;
case 'v':
next prev parent reply other threads:[~2005-02-10 23:16 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-02-08 7:50 netfilter & ipv6 Jonas Berlin
2005-02-10 14:07 ` Jonas Berlin
2005-02-10 14:41 ` Samuel Jean
2005-02-10 15:10 ` iptables compile error: NFC_IP_TOS undeclared Alexander Piavka
2005-02-10 15:18 ` Jonas Berlin
2005-02-10 16:00 ` Alexander Piavka
2005-02-10 16:04 ` Jonas Berlin
2005-02-10 17:50 ` Patrick McHardy
2005-02-10 23:16 ` Pablo Neira [this message]
2005-02-11 19:07 ` [PATCH] kill NFC_* stuff in iptables [was Re: iptables compile error: NFC_IP_TOS undeclared] Patrick McHardy
2005-02-11 21:47 ` Pablo Neira
2005-02-12 1:32 ` Patrick McHardy
2005-02-12 22:25 ` Pablo Neira
2005-02-12 23:34 ` Patrick McHardy
2005-02-10 17:20 ` netfilter & ipv6 Jonas Berlin
2005-02-10 21:36 ` Sven-Haegar Koch
2005-02-15 1:29 ` Jonas Berlin
[not found] ` <53965.213.236.112.75.1107867276.squirrel@213.236.112.75>
2005-02-10 23:15 ` ULOG target for ipv6 Jonas Berlin
2005-02-11 22:10 ` netfilter question Pedro Fortuna
2005-02-14 23:25 ` ULOG target for ipv6 Harald Welte
2005-02-15 0:11 ` Jonas Berlin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=420BEB36.7080209@eurodev.net \
--to=pablo@eurodev.net \
--cc=kaber@trash.net \
--cc=netfilter-devel@lists.netfilter.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).