Skip to content

Commit 52d9c42

Browse files
kaberDavid S. Miller
authored andcommitted
[NETFILTER]: x_tables: add helpers for mass match/target registration
Signed-off-by: Patrick McHardy <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 90528e6 commit 52d9c42

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

include/linux/netfilter/x_tables.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,8 +290,13 @@ struct xt_table_info
290290

291291
extern int xt_register_target(struct xt_target *target);
292292
extern void xt_unregister_target(struct xt_target *target);
293+
extern int xt_register_targets(struct xt_target *target, unsigned int n);
294+
extern void xt_unregister_targets(struct xt_target *target, unsigned int n);
295+
293296
extern int xt_register_match(struct xt_match *target);
294297
extern void xt_unregister_match(struct xt_match *target);
298+
extern int xt_register_matches(struct xt_match *match, unsigned int n);
299+
extern void xt_unregister_matches(struct xt_match *match, unsigned int n);
295300

296301
extern int xt_check_match(const struct xt_match *match, unsigned short family,
297302
unsigned int size, const char *table, unsigned int hook,

net/netfilter/x_tables.c

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,36 @@ xt_unregister_target(struct xt_target *target)
8686
}
8787
EXPORT_SYMBOL(xt_unregister_target);
8888

89+
int
90+
xt_register_targets(struct xt_target *target, unsigned int n)
91+
{
92+
unsigned int i;
93+
int err = 0;
94+
95+
for (i = 0; i < n; i++) {
96+
err = xt_register_target(&target[i]);
97+
if (err)
98+
goto err;
99+
}
100+
return err;
101+
102+
err:
103+
if (i > 0)
104+
xt_unregister_targets(target, i);
105+
return err;
106+
}
107+
EXPORT_SYMBOL(xt_register_targets);
108+
109+
void
110+
xt_unregister_targets(struct xt_target *target, unsigned int n)
111+
{
112+
unsigned int i;
113+
114+
for (i = 0; i < n; i++)
115+
xt_unregister_target(&target[i]);
116+
}
117+
EXPORT_SYMBOL(xt_unregister_targets);
118+
89119
int
90120
xt_register_match(struct xt_match *match)
91121
{
@@ -113,6 +143,36 @@ xt_unregister_match(struct xt_match *match)
113143
}
114144
EXPORT_SYMBOL(xt_unregister_match);
115145

146+
int
147+
xt_register_matches(struct xt_match *match, unsigned int n)
148+
{
149+
unsigned int i;
150+
int err = 0;
151+
152+
for (i = 0; i < n; i++) {
153+
err = xt_register_match(&match[i]);
154+
if (err)
155+
goto err;
156+
}
157+
return err;
158+
159+
err:
160+
if (i > 0)
161+
xt_unregister_matches(match, i);
162+
return err;
163+
}
164+
EXPORT_SYMBOL(xt_register_matches);
165+
166+
void
167+
xt_unregister_matches(struct xt_match *match, unsigned int n)
168+
{
169+
unsigned int i;
170+
171+
for (i = 0; i < n; i++)
172+
xt_unregister_match(&match[i]);
173+
}
174+
EXPORT_SYMBOL(xt_unregister_matches);
175+
116176

117177
/*
118178
* These are weird, but module loading must not be done with mutex

0 commit comments

Comments
 (0)