From f53dc9fbafa031de5e4cdfb7f73cf4bfa1ae0820 Mon Sep 17 00:00:00 2001 From: Jan Engelhardt Date: Wed, 30 Jan 2008 03:50:16 +0100 Subject: [PATCH] Add plural target (un)registration to compat glue Signed-off-by: Jan Engelhardt --- extensions/compat_xtables.c | 25 +++++++++++++++++++++++++ extensions/compat_xtables.h | 2 ++ extensions/compat_xtnu.h | 2 ++ 3 files changed, 29 insertions(+) diff --git a/extensions/compat_xtables.c b/extensions/compat_xtables.c index e095f95..fe94857 100644 --- a/extensions/compat_xtables.c +++ b/extensions/compat_xtables.c @@ -196,6 +196,23 @@ int xtnu_register_target(struct xtnu_target *nt) } EXPORT_SYMBOL_GPL(xtnu_register_target); +int xtnu_register_targets(struct xtnu_target *nt, unsigned int num) +{ + unsigned int i; + int ret; + + for (i = 0; i < num; ++i) { + ret = xtnu_register_target(&nt[i]); + if (ret < 0) { + if (i > 0) + xtnu_unregister_targets(nt, i); + return ret; + } + } + return 0; +} +EXPORT_SYMBOL_GPL(xtnu_register_targets); + void xtnu_unregister_target(struct xtnu_target *nt) { xt_unregister_target(nt->__compat_target); @@ -203,6 +220,14 @@ void xtnu_unregister_target(struct xtnu_target *nt) } EXPORT_SYMBOL_GPL(xtnu_unregister_target); +void xtnu_unregister_targets(struct xtnu_target *nt, unsigned int num) +{ + unsigned int i; + + for (i = 0; i < num; ++i) + xtnu_unregister_target(&nt[i]); +} +EXPORT_SYMBOL_GPL(xtnu_unregister_targets); #endif #if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 23) diff --git a/extensions/compat_xtables.h b/extensions/compat_xtables.h index ac3b3b5..c63bfc2 100644 --- a/extensions/compat_xtables.h +++ b/extensions/compat_xtables.h @@ -28,6 +28,8 @@ # define ip_route_me_harder xtnu_ip_route_me_harder # define xt_register_target xtnu_register_target # define xt_unregister_target xtnu_unregister_target +# define xt_register_targets xtnu_register_targets +# define xt_unregister_targets xtnu_unregister_targets #endif #include "compat_xtnu.h" diff --git a/extensions/compat_xtnu.h b/extensions/compat_xtnu.h index b7dabb1..64aeaa8 100644 --- a/extensions/compat_xtnu.h +++ b/extensions/compat_xtnu.h @@ -66,5 +66,7 @@ extern int xtnu_register_matches(struct xtnu_match *, unsigned int); extern void xtnu_unregister_matches(struct xtnu_match *, unsigned int); extern int xtnu_register_target(struct xtnu_target *); extern void xtnu_unregister_target(struct xtnu_target *); +extern int xtnu_register_targets(struct xtnu_target *, unsigned int); +extern void xtnu_unregister_targets(struct xtnu_target *, unsigned int); #endif /* _COMPAT_XTNU_H */