|
@@ -231,84 +231,55 @@ checkentry6_v1(const char *tablename,
|
|
|
multiinfo->count);
|
|
|
}
|
|
|
|
|
|
-static struct xt_match multiport_match = {
|
|
|
- .name = "multiport",
|
|
|
- .revision = 0,
|
|
|
- .matchsize = sizeof(struct xt_multiport),
|
|
|
- .match = &match,
|
|
|
- .checkentry = &checkentry,
|
|
|
- .family = AF_INET,
|
|
|
- .me = THIS_MODULE,
|
|
|
-};
|
|
|
-
|
|
|
-static struct xt_match multiport_match_v1 = {
|
|
|
- .name = "multiport",
|
|
|
- .revision = 1,
|
|
|
- .matchsize = sizeof(struct xt_multiport_v1),
|
|
|
- .match = &match_v1,
|
|
|
- .checkentry = &checkentry_v1,
|
|
|
- .family = AF_INET,
|
|
|
- .me = THIS_MODULE,
|
|
|
-};
|
|
|
-
|
|
|
-static struct xt_match multiport6_match = {
|
|
|
- .name = "multiport",
|
|
|
- .revision = 0,
|
|
|
- .matchsize = sizeof(struct xt_multiport),
|
|
|
- .match = &match,
|
|
|
- .checkentry = &checkentry6,
|
|
|
- .family = AF_INET6,
|
|
|
- .me = THIS_MODULE,
|
|
|
-};
|
|
|
-
|
|
|
-static struct xt_match multiport6_match_v1 = {
|
|
|
- .name = "multiport",
|
|
|
- .revision = 1,
|
|
|
- .matchsize = sizeof(struct xt_multiport_v1),
|
|
|
- .match = &match_v1,
|
|
|
- .checkentry = &checkentry6_v1,
|
|
|
- .family = AF_INET6,
|
|
|
- .me = THIS_MODULE,
|
|
|
+static struct xt_match xt_multiport_match[] = {
|
|
|
+ {
|
|
|
+ .name = "multiport",
|
|
|
+ .family = AF_INET,
|
|
|
+ .revision = 0,
|
|
|
+ .checkentry = checkentry,
|
|
|
+ .match = match,
|
|
|
+ .matchsize = sizeof(struct xt_multiport),
|
|
|
+ .me = THIS_MODULE,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = "multiport",
|
|
|
+ .family = AF_INET,
|
|
|
+ .revision = 1,
|
|
|
+ .checkentry = checkentry_v1,
|
|
|
+ .match = match_v1,
|
|
|
+ .matchsize = sizeof(struct xt_multiport_v1),
|
|
|
+ .me = THIS_MODULE,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = "multiport",
|
|
|
+ .family = AF_INET6,
|
|
|
+ .revision = 0,
|
|
|
+ .checkentry = checkentry6,
|
|
|
+ .match = match,
|
|
|
+ .matchsize = sizeof(struct xt_multiport),
|
|
|
+ .me = THIS_MODULE,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = "multiport",
|
|
|
+ .family = AF_INET6,
|
|
|
+ .revision = 1,
|
|
|
+ .checkentry = checkentry6_v1,
|
|
|
+ .match = match_v1,
|
|
|
+ .matchsize = sizeof(struct xt_multiport_v1),
|
|
|
+ .me = THIS_MODULE,
|
|
|
+ },
|
|
|
};
|
|
|
|
|
|
static int __init xt_multiport_init(void)
|
|
|
{
|
|
|
- int ret;
|
|
|
-
|
|
|
- ret = xt_register_match(&multiport_match);
|
|
|
- if (ret)
|
|
|
- goto out;
|
|
|
-
|
|
|
- ret = xt_register_match(&multiport_match_v1);
|
|
|
- if (ret)
|
|
|
- goto out_unreg_multi_v0;
|
|
|
-
|
|
|
- ret = xt_register_match(&multiport6_match);
|
|
|
- if (ret)
|
|
|
- goto out_unreg_multi_v1;
|
|
|
-
|
|
|
- ret = xt_register_match(&multiport6_match_v1);
|
|
|
- if (ret)
|
|
|
- goto out_unreg_multi6_v0;
|
|
|
-
|
|
|
- return ret;
|
|
|
-
|
|
|
-out_unreg_multi6_v0:
|
|
|
- xt_unregister_match(&multiport6_match);
|
|
|
-out_unreg_multi_v1:
|
|
|
- xt_unregister_match(&multiport_match_v1);
|
|
|
-out_unreg_multi_v0:
|
|
|
- xt_unregister_match(&multiport_match);
|
|
|
-out:
|
|
|
- return ret;
|
|
|
+ return xt_register_matches(xt_multiport_match,
|
|
|
+ ARRAY_SIZE(xt_multiport_match));
|
|
|
}
|
|
|
|
|
|
static void __exit xt_multiport_fini(void)
|
|
|
{
|
|
|
- xt_unregister_match(&multiport_match);
|
|
|
- xt_unregister_match(&multiport_match_v1);
|
|
|
- xt_unregister_match(&multiport6_match);
|
|
|
- xt_unregister_match(&multiport6_match_v1);
|
|
|
+ xt_unregister_matches(xt_multiport_match,
|
|
|
+ ARRAY_SIZE(xt_multiport_match));
|
|
|
}
|
|
|
|
|
|
module_init(xt_multiport_init);
|