netfilter-devel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH iptables] libxt_length: update to revision 1
@ 2010-07-24  4:29 Changli Gao
  2010-07-24  5:28 ` Eric Dumazet
  2010-07-24  8:55 ` Jan Engelhardt
  0 siblings, 2 replies; 8+ messages in thread
From: Changli Gao @ 2010-07-24  4:29 UTC (permalink / raw)
  To: Patrick McHardy; +Cc: netfilter-devel, Changli Gao

update libxt_length to revision 1 to support ipv6 jumbo frames.

Signed-off-by: Changli Gao <xiaosuo@gmail.com>
----
 extensions/libxt_length.c           |    1 +
 include/linux/netfilter/xt_length.h |    2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/extensions/libxt_length.c b/extensions/libxt_length.c
index 96e8b6c..5d0f5e9 100644
--- a/extensions/libxt_length.c
+++ b/extensions/libxt_length.c
@@ -125,6 +125,7 @@ static struct xtables_match length_match = {
 	.print		= length_print,
 	.save		= length_save,
 	.extra_opts	= length_opts,
+	.revision	= 1,
 };
 
 void _init(void)
diff --git a/include/linux/netfilter/xt_length.h b/include/linux/netfilter/xt_length.h
index b82ed7c..a12785c 100644
--- a/include/linux/netfilter/xt_length.h
+++ b/include/linux/netfilter/xt_length.h
@@ -4,7 +4,7 @@
 #include <linux/types.h>
 
 struct xt_length_info {
-    __u16	min, max;
+    __u32	min, max;
     __u8	invert;
 };
 

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH iptables] libxt_length: update to revision 1
  2010-07-24  4:29 [PATCH iptables] libxt_length: update to revision 1 Changli Gao
@ 2010-07-24  5:28 ` Eric Dumazet
  2010-07-24  5:43   ` Changli Gao
  2010-07-24  8:55 ` Jan Engelhardt
  1 sibling, 1 reply; 8+ messages in thread
From: Eric Dumazet @ 2010-07-24  5:28 UTC (permalink / raw)
  To: Changli Gao; +Cc: Patrick McHardy, netfilter-devel

Le samedi 24 juillet 2010 à 12:29 +0800, Changli Gao a écrit :
> update libxt_length to revision 1 to support ipv6 jumbo frames.
> 
> Signed-off-by: Changli Gao <xiaosuo@gmail.com>
> ----
>  extensions/libxt_length.c           |    1 +
>  include/linux/netfilter/xt_length.h |    2 +-
>  2 files changed, 2 insertions(+), 1 deletion(-)
> diff --git a/extensions/libxt_length.c b/extensions/libxt_length.c
> index 96e8b6c..5d0f5e9 100644
> --- a/extensions/libxt_length.c
> +++ b/extensions/libxt_length.c
> @@ -125,6 +125,7 @@ static struct xtables_match length_match = {
>  	.print		= length_print,
>  	.save		= length_save,
>  	.extra_opts	= length_opts,
> +	.revision	= 1,
>  };
>  
>  void _init(void)

Hmm... I think you missed at line 50 :


        info->max = cp[0] ? parse_length(cp) : 0xFFFF;

Or document the thing...



--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH iptables] libxt_length: update to revision 1
  2010-07-24  5:28 ` Eric Dumazet
@ 2010-07-24  5:43   ` Changli Gao
  0 siblings, 0 replies; 8+ messages in thread
From: Changli Gao @ 2010-07-24  5:43 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: Patrick McHardy, netfilter-devel

On Sat, Jul 24, 2010 at 1:28 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
> Le samedi 24 juillet 2010 à 12:29 +0800, Changli Gao a écrit :
>> update libxt_length to revision 1 to support ipv6 jumbo frames.
>>
>> Signed-off-by: Changli Gao <xiaosuo@gmail.com>
>> ----
>>  extensions/libxt_length.c           |    1 +
>>  include/linux/netfilter/xt_length.h |    2 +-
>>  2 files changed, 2 insertions(+), 1 deletion(-)
>> diff --git a/extensions/libxt_length.c b/extensions/libxt_length.c
>> index 96e8b6c..5d0f5e9 100644
>> --- a/extensions/libxt_length.c
>> +++ b/extensions/libxt_length.c
>> @@ -125,6 +125,7 @@ static struct xtables_match length_match = {
>>       .print          = length_print,
>>       .save           = length_save,
>>       .extra_opts     = length_opts,
>> +     .revision       = 1,
>>  };
>>
>>  void _init(void)
>
> Hmm... I think you missed at line 50 :
>
>
>        info->max = cp[0] ? parse_length(cp) : 0xFFFF;
>
> Or document the thing...
>

Oh, thanks. I think we can change 0xFFFF to 0xFFFFFFFF, and I also
need to update the return value of parse_length() to u_int32_t.

-- 
Regards,
Changli Gao(xiaosuo@gmail.com)
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH iptables] libxt_length: update to revision 1
  2010-07-24  4:29 [PATCH iptables] libxt_length: update to revision 1 Changli Gao
  2010-07-24  5:28 ` Eric Dumazet
@ 2010-07-24  8:55 ` Jan Engelhardt
  2010-07-24 11:47   ` Changli Gao
  1 sibling, 1 reply; 8+ messages in thread
From: Jan Engelhardt @ 2010-07-24  8:55 UTC (permalink / raw)
  To: Changli Gao; +Cc: Patrick McHardy, netfilter-devel

On Saturday 2010-07-24 06:29, Changli Gao wrote:

>update libxt_length to revision 1 to support ipv6 jumbo frames.

You can't just go and change these things, would break xt_length v0.


>Signed-off-by: Changli Gao <xiaosuo@gmail.com>
>----
> extensions/libxt_length.c           |    1 +
> include/linux/netfilter/xt_length.h |    2 +-
> 2 files changed, 2 insertions(+), 1 deletion(-)
>diff --git a/extensions/libxt_length.c b/extensions/libxt_length.c
>index 96e8b6c..5d0f5e9 100644
>--- a/extensions/libxt_length.c
>+++ b/extensions/libxt_length.c
>@@ -125,6 +125,7 @@ static struct xtables_match length_match = {
> 	.print		= length_print,
> 	.save		= length_save,
> 	.extra_opts	= length_opts,
>+	.revision	= 1,
> };
> 
> void _init(void)
>diff --git a/include/linux/netfilter/xt_length.h b/include/linux/netfilter/xt_length.h
>index b82ed7c..a12785c 100644
>--- a/include/linux/netfilter/xt_length.h
>+++ b/include/linux/netfilter/xt_length.h
>@@ -4,7 +4,7 @@
> #include <linux/types.h>
> 
> struct xt_length_info {
>-    __u16	min, max;
>+    __u32	min, max;
>     __u8	invert;
> };
> 
>--
>To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
>the body of a message to majordomo@vger.kernel.org
>More majordomo info at  http://vger.kernel.org/majordomo-info.html
>


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH iptables] libxt_length: update to revision 1
  2010-07-24  8:55 ` Jan Engelhardt
@ 2010-07-24 11:47   ` Changli Gao
  2010-07-25 16:28     ` Jan Engelhardt
  0 siblings, 1 reply; 8+ messages in thread
From: Changli Gao @ 2010-07-24 11:47 UTC (permalink / raw)
  To: Jan Engelhardt; +Cc: Patrick McHardy, netfilter-devel

[-- Attachment #1: Type: text/plain, Size: 452 bytes --]

On Sat, Jul 24, 2010 at 4:55 PM, Jan Engelhardt <jengelh@medozas.de> wrote:
> On Saturday 2010-07-24 06:29, Changli Gao wrote:
>
>>update libxt_length to revision 1 to support ipv6 jumbo frames.
>
> You can't just go and change these things, would break xt_length v0.
>

Hmm. I have updated the patch(attached), but the v0 handlers are not
called. Is there anything I missed? Or Is there a bug in iptables?

-- 
Regards,
Changli Gao(xiaosuo@gmail.com)

[-- Attachment #2: xt_len.diff --]
[-- Type: application/octet-stream, Size: 6116 bytes --]

diff --git a/extensions/libxt_length.c b/extensions/libxt_length.c
index 96e8b6c..774a80e 100644
--- a/extensions/libxt_length.c
+++ b/extensions/libxt_length.c
@@ -8,6 +8,11 @@
 #include <xtables.h>
 #include <linux/netfilter/xt_length.h>
 
+struct xt_length_info_v0 {
+    __u32	min, max;
+    __u8	invert;
+};
+
 static void length_help(void)
 {
 	printf(
@@ -21,8 +26,7 @@ static const struct option length_opts[] = {
 	{ .name = NULL }
 };
 
-static u_int16_t
-parse_length(const char *s)
+static u_int32_t parse_length(const char *s)
 {
 	unsigned int len;
 	
@@ -33,8 +37,7 @@ parse_length(const char *s)
 }
 
 /* If a single value is provided, min and max are both set to the value */
-static void
-parse_lengths(const char *s, struct xt_length_info *info)
+static void parse_lengths(const char *s, struct xt_length_info *info)
 {
 	char *buffer;
 	char *cp;
@@ -47,7 +50,7 @@ parse_lengths(const char *s, struct xt_length_info *info)
 		cp++;
 
 		info->min = buffer[0] ? parse_length(buffer) : 0;
-		info->max = cp[0] ? parse_length(cp) : 0xFFFF;
+		info->max = cp[0] ? parse_length(cp) : 0xFFFFFFFF;
 	}
 	free(buffer);
 	
@@ -58,12 +61,9 @@ parse_lengths(const char *s, struct xt_length_info *info)
 	
 }
 
-static int
-length_parse(int c, char **argv, int invert, unsigned int *flags,
-             const void *entry, struct xt_entry_match **match)
+static int __length_parse(int c, char **argv, int invert, unsigned int *flags,
+			  const void *entry, struct xt_length_info *info)
 {
-	struct xt_length_info *info = (struct xt_length_info *)(*match)->data;
-
 	switch (c) {
 		case '1':
 			if (*flags)
@@ -83,6 +83,31 @@ length_parse(int c, char **argv, int invert, unsigned int *flags,
 	return 1;
 }
 
+static int length_parse(int c, char **argv, int invert, unsigned int *flags,
+			const void *entry, struct xt_entry_match **match)
+{
+	return __length_parse(c, argv, invert, flags, entry,
+			      (struct xt_length_info *)(*match)->data);
+}
+
+static int length_parse_v0(int c, char **argv, int invert, unsigned int *flags,
+			   const void *entry, struct xt_entry_match **match)
+{
+	struct xt_length_info info;
+
+	if (__length_parse(c, argv, invert, flags, entry, &info)) {
+		struct xt_length_info_v0 *info_v0;
+
+		info_v0 = (void *)(*match)->data;
+		info_v0->min = info.min;
+		info_v0->max = info.max;
+		info_v0->invert = info.invert;
+		return 1;
+	}
+
+	return 0;
+}
+
 static void length_check(unsigned int flags)
 {
 	if (!flags)
@@ -90,11 +115,8 @@ static void length_check(unsigned int flags)
 			   "length: You must specify `--length'");
 }
 
-static void
-length_print(const void *ip, const struct xt_entry_match *match, int numeric)
+static void __length_print(const struct xt_length_info *info)
 {
-	const struct xt_length_info *info = (void *)match->data;
-
 	printf("length %s", info->invert ? "!" : "");
 	if (info->min == info->max)
 		printf("%u ", info->min);
@@ -102,10 +124,26 @@ length_print(const void *ip, const struct xt_entry_match *match, int numeric)
 		printf("%u:%u ", info->min, info->max);
 }
 
-static void length_save(const void *ip, const struct xt_entry_match *match)
+static void length_print(const void *ip, const struct xt_entry_match *match,
+			 int numeric)
 {
-	const struct xt_length_info *info = (void *)match->data;
+	__length_print((void *)match->data);
+}
+
+static void length_print_v0(const void *ip, const struct xt_entry_match *match,
+			    int numeric)
+{
+	const struct xt_length_info_v0 *info_v0 = (void *)match->data;
+	struct xt_length_info info;
 
+	info.min = info_v0->min;
+	info.max = info_v0->max;
+	info.invert = info_v0->invert;
+	__length_print(&info);
+}
+
+static void __length_save(const struct xt_length_info *info)
+{
 	printf("%s--length ", info->invert ? "! " : "");
 	if (info->min == info->max)
 		printf("%u ", info->min);
@@ -113,21 +151,54 @@ static void length_save(const void *ip, const struct xt_entry_match *match)
 		printf("%u:%u ", info->min, info->max);
 }
 
-static struct xtables_match length_match = {
-	.family		= NFPROTO_UNSPEC,
-	.name		= "length",
-	.version	= XTABLES_VERSION,
-	.size		= XT_ALIGN(sizeof(struct xt_length_info)),
-	.userspacesize	= XT_ALIGN(sizeof(struct xt_length_info)),
-	.help		= length_help,
-	.parse		= length_parse,
-	.final_check	= length_check,
-	.print		= length_print,
-	.save		= length_save,
-	.extra_opts	= length_opts,
+static void length_save(const void *ip, const struct xt_entry_match *match)
+{
+	__length_save((void *)match->data);
+}
+
+static void length_save_v0(const void *ip, const struct xt_entry_match *match)
+{
+	const struct xt_length_info_v0 *info_v0 = (void *)match->data;
+	struct xt_length_info info;
+
+	info.min = info_v0->min;
+	info.max = info_v0->max;
+	info.invert = info_v0->invert;
+	__length_save(&info);
+}
+
+static struct xtables_match length_mt_reg[] = {
+	{
+		.family		= NFPROTO_UNSPEC,
+		.name		= "length",
+		.version	= XTABLES_VERSION,
+		.size		= XT_ALIGN(sizeof(struct xt_length_info_v0)),
+		.userspacesize	= XT_ALIGN(sizeof(struct xt_length_info_v0)),
+		.help		= length_help,
+		.parse		= length_parse_v0,
+		.final_check	= length_check,
+		.print		= length_print_v0,
+		.save		= length_save_v0,
+		.extra_opts	= length_opts,
+		.revision	= 0,
+	},
+	{
+		.family		= NFPROTO_UNSPEC,
+		.name		= "length",
+		.version	= XTABLES_VERSION,
+		.size		= XT_ALIGN(sizeof(struct xt_length_info)),
+		.userspacesize	= XT_ALIGN(sizeof(struct xt_length_info)),
+		.help		= length_help,
+		.parse		= length_parse,
+		.final_check	= length_check,
+		.print		= length_print,
+		.save		= length_save,
+		.extra_opts	= length_opts,
+		.revision	= 1,
+	},
 };
 
 void _init(void)
 {
-	xtables_register_match(&length_match);
+	xtables_register_matches(length_mt_reg, ARRAY_SIZE(length_mt_reg));
 }
diff --git a/include/linux/netfilter/xt_length.h b/include/linux/netfilter/xt_length.h
index b82ed7c..a12785c 100644
--- a/include/linux/netfilter/xt_length.h
+++ b/include/linux/netfilter/xt_length.h
@@ -4,7 +4,7 @@
 #include <linux/types.h>
 
 struct xt_length_info {
-    __u16	min, max;
+    __u32	min, max;
     __u8	invert;
 };
 

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH iptables] libxt_length: update to revision 1
  2010-07-24 11:47   ` Changli Gao
@ 2010-07-25 16:28     ` Jan Engelhardt
  2010-07-26  0:07       ` Changli Gao
  0 siblings, 1 reply; 8+ messages in thread
From: Jan Engelhardt @ 2010-07-25 16:28 UTC (permalink / raw)
  To: Changli Gao; +Cc: Patrick McHardy, netfilter-devel

On Saturday 2010-07-24 13:47, Changli Gao wrote:

>On Sat, Jul 24, 2010 at 4:55 PM, Jan Engelhardt <jengelh@medozas.de> wrote:
>> On Saturday 2010-07-24 06:29, Changli Gao wrote:
>>
>>>update libxt_length to revision 1 to support ipv6 jumbo frames.
>>
>> You can't just go and change these things, would break xt_length v0.
>>
>
>Hmm. I have updated the patch(attached), but the v0 handlers are not
>called. Is there anything I missed? Or Is there a bug in iptables?

Probably because you are still breaking the compatibility by editing 
struct xt_length_info. I'd say let's concentrate on rev 2 that I 
submitted.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH iptables] libxt_length: update to revision 1
  2010-07-25 16:28     ` Jan Engelhardt
@ 2010-07-26  0:07       ` Changli Gao
  2010-07-26  0:21         ` Changli Gao
  0 siblings, 1 reply; 8+ messages in thread
From: Changli Gao @ 2010-07-26  0:07 UTC (permalink / raw)
  To: Jan Engelhardt; +Cc: Patrick McHardy, netfilter-devel

On Mon, Jul 26, 2010 at 12:28 AM, Jan Engelhardt <jengelh@medozas.de> wrote:
> On Saturday 2010-07-24 13:47, Changli Gao wrote:
>
>>On Sat, Jul 24, 2010 at 4:55 PM, Jan Engelhardt <jengelh@medozas.de> wrote:
>>> On Saturday 2010-07-24 06:29, Changli Gao wrote:
>>>
>>>>update libxt_length to revision 1 to support ipv6 jumbo frames.
>>>
>>> You can't just go and change these things, would break xt_length v0.
>>>
>>
>>Hmm. I have updated the patch(attached), but the v0 handlers are not
>>called. Is there anything I missed? Or Is there a bug in iptables?
>
> Probably because you are still breaking the compatibility by editing
> struct xt_length_info.

I am sure it isn't the problem. The kernel module can work with the
old iptables binary. However after I committed the rules with the
revision 1, I can't get the correct output with the command
'iptables-save' or 'iptables -nvL'. I checked the code of iptables,
and found it doesn't check the revision when founding matches and
targets, and even the kernel seems doesn't transfer the revision info
to user space.

> I'd say let's concentrate on rev 2 that I
> submitted.
>

I have seen it. Thanks.

-- 
Regards,
Changli Gao(xiaosuo@gmail.com)

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH iptables] libxt_length: update to revision 1
  2010-07-26  0:07       ` Changli Gao
@ 2010-07-26  0:21         ` Changli Gao
  0 siblings, 0 replies; 8+ messages in thread
From: Changli Gao @ 2010-07-26  0:21 UTC (permalink / raw)
  To: Jan Engelhardt; +Cc: Patrick McHardy, netfilter-devel

On Mon, Jul 26, 2010 at 8:07 AM, Changli Gao <xiaosuo@gmail.com> wrote:
> On Mon, Jul 26, 2010 at 12:28 AM, Jan Engelhardt <jengelh@medozas.de> wrote:
>> On Saturday 2010-07-24 13:47, Changli Gao wrote:
>>
>>>On Sat, Jul 24, 2010 at 4:55 PM, Jan Engelhardt <jengelh@medozas.de> wrote:
>>>> On Saturday 2010-07-24 06:29, Changli Gao wrote:
>>>>
>>>>>update libxt_length to revision 1 to support ipv6 jumbo frames.
>>>>
>>>> You can't just go and change these things, would break xt_length v0.
>>>>
>>>
>>>Hmm. I have updated the patch(attached), but the v0 handlers are not
>>>called. Is there anything I missed? Or Is there a bug in iptables?
>>
>> Probably because you are still breaking the compatibility by editing
>> struct xt_length_info.
>
> I am sure it isn't the problem. The kernel module can work with the
> old iptables binary. However after I committed the rules with the
> revision 1, I can't get the correct output with the command
> 'iptables-save' or 'iptables -nvL'.

Sorry. I made a mistake. I committed the rules(revision 0) with the
old iptables, but I could not get the correct output with the new
iptables or iptables-save.

> I checked the code of iptables,
> and found it doesn't check the revision when founding matches and
> targets, and even the kernel seems doesn't transfer the revision info
> to user space.
>
>> I'd say let's concentrate on rev 2 that I
>> submitted.
>>
>
> I have seen it. Thanks.
>
> --
> Regards,
> Changli Gao(xiaosuo@gmail.com)
>



-- 
Regards,
Changli Gao(xiaosuo@gmail.com)

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2010-07-26  0:21 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-07-24  4:29 [PATCH iptables] libxt_length: update to revision 1 Changli Gao
2010-07-24  5:28 ` Eric Dumazet
2010-07-24  5:43   ` Changli Gao
2010-07-24  8:55 ` Jan Engelhardt
2010-07-24 11:47   ` Changli Gao
2010-07-25 16:28     ` Jan Engelhardt
2010-07-26  0:07       ` Changli Gao
2010-07-26  0:21         ` Changli Gao

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).