[package] iptables: fix multiport match for brcm-2.4
[openwrt/svn-archive/archive.git] / package / iptables / patches / 010-multiport-linux-2.4-compat.patch
1 --- a/extensions/libxt_multiport.c
2 +++ b/extensions/libxt_multiport.c
3 @@ -14,21 +14,6 @@
4 #include <linux/netfilter/xt_multiport.h>
5
6 /* Function which prints out usage message. */
7 -static void multiport_help(void)
8 -{
9 - printf(
10 -"multiport match options:\n"
11 -" --source-ports port[,port,port...]\n"
12 -" --sports ...\n"
13 -" match source port(s)\n"
14 -" --destination-ports port[,port,port...]\n"
15 -" --dports ...\n"
16 -" match destination port(s)\n"
17 -" --ports port[,port,port]\n"
18 -" match both source and destination port(s)\n"
19 -" NOTE: this kernel does not support port ranges in multiport.\n");
20 -}
21 -
22 static void multiport_help_v1(void)
23 {
24 printf(
25 @@ -71,26 +56,6 @@
26 }
27 }
28
29 -static unsigned int
30 -parse_multi_ports(const char *portstring, u_int16_t *ports, const char *proto)
31 -{
32 - char *buffer, *cp, *next;
33 - unsigned int i;
34 -
35 - buffer = strdup(portstring);
36 - if (!buffer) xtables_error(OTHER_PROBLEM, "strdup failed");
37 -
38 - for (cp=buffer, i=0; cp && i<XT_MULTI_PORTS; cp=next,i++)
39 - {
40 - next=strchr(cp, ',');
41 - if (next) *next++='\0';
42 - ports[i] = xtables_parse_port(cp, proto);
43 - }
44 - if (cp) xtables_error(PARAMETER_PROBLEM, "too many ports specified");
45 - free(buffer);
46 - return i;
47 -}
48 -
49 static void
50 parse_multi_ports_v1(const char *portstring,
51 struct xt_multiport_v1 *multiinfo,
52 @@ -154,73 +119,6 @@
53 /* Function which parses command options; returns true if it
54 ate an option */
55 static int
56 -__multiport_parse(int c, char **argv, int invert, unsigned int *flags,
57 - struct xt_entry_match **match, u_int16_t pnum,
58 - u_int8_t invflags)
59 -{
60 - const char *proto;
61 - struct xt_multiport *multiinfo
62 - = (struct xt_multiport *)(*match)->data;
63 -
64 - switch (c) {
65 - case '1':
66 - xtables_check_inverse(optarg, &invert, &optind, 0, argv);
67 - proto = check_proto(pnum, invflags);
68 - multiinfo->count = parse_multi_ports(optarg,
69 - multiinfo->ports, proto);
70 - multiinfo->flags = XT_MULTIPORT_SOURCE;
71 - break;
72 -
73 - case '2':
74 - xtables_check_inverse(optarg, &invert, &optind, 0, argv);
75 - proto = check_proto(pnum, invflags);
76 - multiinfo->count = parse_multi_ports(optarg,
77 - multiinfo->ports, proto);
78 - multiinfo->flags = XT_MULTIPORT_DESTINATION;
79 - break;
80 -
81 - case '3':
82 - xtables_check_inverse(optarg, &invert, &optind, 0, argv);
83 - proto = check_proto(pnum, invflags);
84 - multiinfo->count = parse_multi_ports(optarg,
85 - multiinfo->ports, proto);
86 - multiinfo->flags = XT_MULTIPORT_EITHER;
87 - break;
88 -
89 - default:
90 - return 0;
91 - }
92 -
93 - if (invert)
94 - xtables_error(PARAMETER_PROBLEM,
95 - "multiport does not support invert");
96 -
97 - if (*flags)
98 - xtables_error(PARAMETER_PROBLEM,
99 - "multiport can only have one option");
100 - *flags = 1;
101 - return 1;
102 -}
103 -
104 -static int
105 -multiport_parse(int c, char **argv, int invert, unsigned int *flags,
106 - const void *e, struct xt_entry_match **match)
107 -{
108 - const struct ipt_entry *entry = e;
109 - return __multiport_parse(c, argv, invert, flags, match,
110 - entry->ip.proto, entry->ip.invflags);
111 -}
112 -
113 -static int
114 -multiport_parse6(int c, char **argv, int invert, unsigned int *flags,
115 - const void *e, struct xt_entry_match **match)
116 -{
117 - const struct ip6t_entry *entry = e;
118 - return __multiport_parse(c, argv, invert, flags, match,
119 - entry->ipv6.proto, entry->ipv6.invflags);
120 -}
121 -
122 -static int
123 __multiport_parse_v1(int c, char **argv, int invert, unsigned int *flags,
124 struct xt_entry_match **match, u_int16_t pnum,
125 u_int8_t invflags)
126 @@ -313,55 +211,6 @@
127 }
128
129 /* Prints out the matchinfo. */
130 -static void
131 -__multiport_print(const struct xt_entry_match *match, int numeric,
132 - u_int16_t proto)
133 -{
134 - const struct xt_multiport *multiinfo
135 - = (const struct xt_multiport *)match->data;
136 - unsigned int i;
137 -
138 - printf("multiport ");
139 -
140 - switch (multiinfo->flags) {
141 - case XT_MULTIPORT_SOURCE:
142 - printf("sports ");
143 - break;
144 -
145 - case XT_MULTIPORT_DESTINATION:
146 - printf("dports ");
147 - break;
148 -
149 - case XT_MULTIPORT_EITHER:
150 - printf("ports ");
151 - break;
152 -
153 - default:
154 - printf("ERROR ");
155 - break;
156 - }
157 -
158 - for (i=0; i < multiinfo->count; i++) {
159 - printf("%s", i ? "," : "");
160 - print_port(multiinfo->ports[i], proto, numeric);
161 - }
162 - printf(" ");
163 -}
164 -
165 -static void multiport_print(const void *ip_void,
166 - const struct xt_entry_match *match, int numeric)
167 -{
168 - const struct ipt_ip *ip = ip_void;
169 - __multiport_print(match, numeric, ip->proto);
170 -}
171 -
172 -static void multiport_print6(const void *ip_void,
173 - const struct xt_entry_match *match, int numeric)
174 -{
175 - const struct ip6t_ip6 *ip = ip_void;
176 - __multiport_print(match, numeric, ip->proto);
177 -}
178 -
179 static void __multiport_print_v1(const struct xt_entry_match *match,
180 int numeric, u_int16_t proto)
181 {
182 @@ -418,48 +267,6 @@
183 }
184
185 /* Saves the union ipt_matchinfo in parsable form to stdout. */
186 -static void __multiport_save(const struct xt_entry_match *match,
187 - u_int16_t proto)
188 -{
189 - const struct xt_multiport *multiinfo
190 - = (const struct xt_multiport *)match->data;
191 - unsigned int i;
192 -
193 - switch (multiinfo->flags) {
194 - case XT_MULTIPORT_SOURCE:
195 - printf("--sports ");
196 - break;
197 -
198 - case XT_MULTIPORT_DESTINATION:
199 - printf("--dports ");
200 - break;
201 -
202 - case XT_MULTIPORT_EITHER:
203 - printf("--ports ");
204 - break;
205 - }
206 -
207 - for (i=0; i < multiinfo->count; i++) {
208 - printf("%s", i ? "," : "");
209 - print_port(multiinfo->ports[i], proto, 1);
210 - }
211 - printf(" ");
212 -}
213 -
214 -static void multiport_save(const void *ip_void,
215 - const struct xt_entry_match *match)
216 -{
217 - const struct ipt_ip *ip = ip_void;
218 - __multiport_save(match, ip->proto);
219 -}
220 -
221 -static void multiport_save6(const void *ip_void,
222 - const struct xt_entry_match *match)
223 -{
224 - const struct ip6t_ip6 *ip = ip_void;
225 - __multiport_save(match, ip->proto);
226 -}
227 -
228 static void __multiport_save_v1(const struct xt_entry_match *match,
229 u_int16_t proto)
230 {
231 @@ -513,34 +320,6 @@
232 {
233 .family = NFPROTO_IPV4,
234 .name = "multiport",
235 - .revision = 0,
236 - .version = XTABLES_VERSION,
237 - .size = XT_ALIGN(sizeof(struct xt_multiport)),
238 - .userspacesize = XT_ALIGN(sizeof(struct xt_multiport)),
239 - .help = multiport_help,
240 - .parse = multiport_parse,
241 - .final_check = multiport_check,
242 - .print = multiport_print,
243 - .save = multiport_save,
244 - .extra_opts = multiport_opts,
245 - },
246 - {
247 - .family = NFPROTO_IPV6,
248 - .name = "multiport",
249 - .revision = 0,
250 - .version = XTABLES_VERSION,
251 - .size = XT_ALIGN(sizeof(struct xt_multiport)),
252 - .userspacesize = XT_ALIGN(sizeof(struct xt_multiport)),
253 - .help = multiport_help,
254 - .parse = multiport_parse6,
255 - .final_check = multiport_check,
256 - .print = multiport_print6,
257 - .save = multiport_save6,
258 - .extra_opts = multiport_opts,
259 - },
260 - {
261 - .family = NFPROTO_IPV4,
262 - .name = "multiport",
263 .version = XTABLES_VERSION,
264 .revision = 1,
265 .size = XT_ALIGN(sizeof(struct xt_multiport_v1)),