Package: filtergen
Severity: wishlist
Tags: patch

The attached patch allows a literal '*' to be used as an interface name in
an input/output statement to mean "all interfaces", and modifies the
iptables backend to handle it appropriately (don't set -i/-o on the
associated rules).

The use cases for this should be fairly obvious.

- Matt
--- filtergen-0.12.4.orig/fg-iptables.c	2009-10-01 17:04:30.000000000 +1000
+++ filtergen-0.12.4.all_interfaces/fg-iptables.c	2009-10-01 17:03:26.000000000 +1000
@@ -123,9 +123,11 @@
 		APPS(rule, "!");
 		APPS(rule_r, "!");
 	    }
-	    APPSS2(natrule, "-i", ent->iface);
-	    APPSS2(rule, "-i", ent->iface);
-	    APPSS2(rule_r, "-o", ent->iface);
+	    if (strcmp(ent->iface, "*")) {
+	        APPSS2(natrule, "-i", ent->iface);
+	        APPSS2(rule, "-i", ent->iface);
+	        APPSS2(rule_r, "-o", ent->iface);
+	    }
 	}
 	break;
       case OUTPUT:
@@ -140,9 +142,11 @@
 		APPS(rule, "!");
 		APPS(rule_r, "!");
 	    }
-	    APPSS2(natrule, "-o", ent->iface);
-	    APPSS2(rule, "-o", ent->iface);
-	    APPSS2(rule_r, "-i", ent->iface);
+	    if (strcmp(ent->iface, "*")) {
+		    APPSS2(natrule, "-o", ent->iface);
+		    APPSS2(rule, "-o", ent->iface);
+		    APPSS2(rule_r, "-i", ent->iface);
+	    }
 	}
 	break;
       default: fprintf(stderr, "unknown direction\n"); abort();
--- filtergen-0.12.4.orig/filter_syntax.5	2004-06-09 22:48:41.000000000 +1000
+++ filtergen-0.12.4.all_interfaces/filter_syntax.5	2009-10-01 16:48:00.000000000 +1000
@@ -45,6 +45,9 @@
 Linux are "eth0", "eth1", ..., "ppp0", etc.  Other systems will have
 different naming rules.
 
+If you want to match all interfaces, you can specify "*" (without the
+quotes).
+
 .SS TARGET
 A \fItarget\fR notes what we do with a matching packet.  Universal
 options are \fIaccept\fR and \fIdrop\fR which, respectively, state
--- filtergen-0.12.4.orig/parser.y	2004-05-15 13:26:48.000000000 +1000
+++ filtergen-0.12.4.all_interfaces/parser.y	2009-10-01 16:54:11.000000000 +1000
@@ -123,6 +123,7 @@
 %token TOK_ERR
 %token TOK_BANG
 %token TOK_COLON
+%token TOK_SPLAT
 %{
 int yyprint(FILE * f, int t, YYSTYPE v);
 %}
@@ -258,6 +259,13 @@
 	{
 		$$ = $2;
 	}
+	| TOK_SPLAT
+	{
+		$$ = malloc(sizeof(struct direction_argument_list_s));
+		$$->list = NULL;
+		$$->arg = malloc(sizeof(struct direction_argument_s));
+		$$->arg->direction = strdup("*");
+	}
 	;
 
 direction_argument_list_: /* empty */
--- filtergen-0.12.4.orig/scanner.l	2009-10-01 17:04:30.000000000 +1000
+++ filtergen-0.12.4.all_interfaces/scanner.l	2009-10-01 16:41:53.000000000 +1000
@@ -111,6 +111,7 @@
 ";"          return TOK_SEMICOLON;
 ":"          return TOK_COLON;
 "!"          return TOK_BANG;
+"*"          return TOK_SPLAT;
 
 {id}(\.{id})*	{
 			yylval.u_str = strndup(yytext, yyleng);

Reply via email to