[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit

Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/ap/app/iptables/extensions/libxt_tsreputation.c b/ap/app/iptables/extensions/libxt_tsreputation.c
new file mode 100755
index 0000000..27db8cd
--- /dev/null
+++ b/ap/app/iptables/extensions/libxt_tsreputation.c
@@ -0,0 +1,101 @@
+/*
+ *	libxt_tsreputation - iptables part for xt_tsreputation
+ *	Copyright © Paul Dale 2009
+ *	Contact: <Paul_Dale@McAfee.com>
+ *
+ *	libxt_tsreputation.c is free software; you can redistribute it and/or modify
+ *	it under the terms of the GNU General Public License as published by
+ *	the Free Software Foundation; either version 2 or 3 of the License.
+ */
+#include <sys/types.h>
+#include <getopt.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include <limits.h>
+
+#include <linux/netfilter/xt_tsreputation.h>
+#include <xtables.h>
+
+#define XT_TSREP_DEFINED	1
+
+
+static const struct option tsreputation_opts[] = {
+	{ "reputation", true,  NULL, 'R'},
+	{ .name = NULL }
+};
+
+
+static void tsreputation_help(void)
+{
+	printf(
+"tsreputation match options:\n"
+"    --reputation rep     Reputation threshold (signed integer)\n");
+}
+
+static void tsreputation_init(struct xt_entry_match *m)
+{
+	struct xt_tsreputation_info *info = (void *)m->data;
+
+	info->reputation = 0;
+}
+
+
+static int tsreputation_parse(int c, char **argv, int invert, unsigned int *flags,
+                      const void *entry, struct xt_entry_match **match)
+{
+	struct xt_tsreputation_info *info = (void *)(*match)->data;
+	char *end;
+
+	switch (c) {
+	case 'R': /* --reputation */
+		if (*flags & XT_TSREP_DEFINED)
+			xtables_error(PARAMETER_PROBLEM, "xt_tsreputation: "
+				"Only use \"--reputation\" once!");
+		*flags |= XT_TSREP_DEFINED;
+		info->reputation = strtol(optarg, &end, 10);
+		if (end == optarg || *end != '\0')
+			xtables_error(PARAMETER_PROBLEM,
+			           "No integer argument specified");
+		info->invert = invert?1:0;
+		return 1;
+	}
+	return 0;
+}
+
+static void tsreputation_print(const void *ip, const struct xt_entry_match *match,
+                       int numeric)
+{
+	struct xt_tsreputation_info *info = (void *)match->data;
+
+	printf("TSREPUTATION %d ", info->reputation);
+}
+
+static void tsreputation_save(const void *ip, const struct xt_entry_match *match)
+{
+	const struct xt_tsreputation_info *info = (const void *)match->data;
+
+	printf("--reputation %d ", info->reputation);
+}
+
+static struct xtables_match tsreputation_match = {
+	.name          = "tsreputation",
+	.family        = AF_UNSPEC,
+	.version       = XTABLES_VERSION,
+	.size          = XT_ALIGN(sizeof(struct xt_tsreputation_info)),
+	.userspacesize = XT_ALIGN(sizeof(struct xt_tsreputation_info)),
+	.help          = tsreputation_help,
+	.init          = tsreputation_init,
+	.parse         = tsreputation_parse,
+	.print         = tsreputation_print,
+	.save          = tsreputation_save,
+	.extra_opts    = tsreputation_opts,
+};
+
+void _init(void)
+{
+	xtables_register_match(&tsreputation_match);
+}