blob: 6ed2ff9b3c2645662f761d1aacfeae7cdb0add79 [file] [log] [blame]
Yasuyuki KOZAKAI9ea637d2007-07-24 07:21:17 +00001/* Shared library add-on to iptables to add comment match support.
2 *
3 * ChangeLog
4 * 2003-05-13: Brad Fisher <brad@info-link.net>
5 * Initial comment match
6 * 2004-05-12: Brad Fisher <brad@info-link.net>
7 * Port to patch-o-matic-ng
8 */
9#include <stdio.h>
Yasuyuki KOZAKAI9ea637d2007-07-24 07:21:17 +000010#include <xtables.h>
11#include <linux/netfilter/xt_comment.h>
12
Jan Engelhardtcc2511e2011-03-01 20:16:22 +010013enum {
14 O_COMMENT = 0,
15};
16
Jan Engelhardt181dead2007-10-04 16:27:07 +000017static void comment_help(void)
Yasuyuki KOZAKAI9ea637d2007-07-24 07:21:17 +000018{
19 printf(
Jan Engelhardt8b7c64d2008-04-15 11:48:25 +020020 "comment match options:\n"
21 "--comment COMMENT Attach a comment to a rule\n");
Yasuyuki KOZAKAI9ea637d2007-07-24 07:21:17 +000022}
23
Jan Engelhardtcc2511e2011-03-01 20:16:22 +010024static const struct xt_option_entry comment_opts[] = {
25 {.name = "comment", .id = O_COMMENT, .type = XTTYPE_STRING,
26 .flags = XTOPT_MAND | XTOPT_PUT,
27 XTOPT_POINTER(struct xt_comment_info, comment)},
28 XTOPT_TABLEEND,
Yasuyuki KOZAKAI9ea637d2007-07-24 07:21:17 +000029};
30
31static void
Jan Engelhardt181dead2007-10-04 16:27:07 +000032comment_print(const void *ip, const struct xt_entry_match *match, int numeric)
Yasuyuki KOZAKAI9ea637d2007-07-24 07:21:17 +000033{
Jan Engelhardt69f564e2009-05-26 13:14:06 +020034 struct xt_comment_info *commentinfo = (void *)match->data;
Yasuyuki KOZAKAI9ea637d2007-07-24 07:21:17 +000035
36 commentinfo->comment[XT_MAX_COMMENT_LEN-1] = '\0';
Jan Engelhardt73866352010-12-18 02:04:59 +010037 printf(" /* %s */", commentinfo->comment);
Yasuyuki KOZAKAI9ea637d2007-07-24 07:21:17 +000038}
39
40/* Saves the union ipt_matchinfo in parsable form to stdout. */
41static void
Jan Engelhardt181dead2007-10-04 16:27:07 +000042comment_save(const void *ip, const struct xt_entry_match *match)
Yasuyuki KOZAKAI9ea637d2007-07-24 07:21:17 +000043{
Jan Engelhardt69f564e2009-05-26 13:14:06 +020044 struct xt_comment_info *commentinfo = (void *)match->data;
Yasuyuki KOZAKAI9ea637d2007-07-24 07:21:17 +000045
46 commentinfo->comment[XT_MAX_COMMENT_LEN-1] = '\0';
Jan Engelhardt73866352010-12-18 02:04:59 +010047 printf(" --comment");
Jan Engelhardt4a1d8102010-12-26 10:31:03 +010048 xtables_save_string(commentinfo->comment);
Yasuyuki KOZAKAI9ea637d2007-07-24 07:21:17 +000049}
50
Jan Engelhardt181dead2007-10-04 16:27:07 +000051static struct xtables_match comment_match = {
Jan Engelhardtc5e85732009-06-12 20:55:44 +020052 .family = NFPROTO_UNSPEC,
Yasuyuki KOZAKAI9ea637d2007-07-24 07:21:17 +000053 .name = "comment",
Jan Engelhardt8b7c64d2008-04-15 11:48:25 +020054 .version = XTABLES_VERSION,
Yasuyuki KOZAKAI9ea637d2007-07-24 07:21:17 +000055 .size = XT_ALIGN(sizeof(struct xt_comment_info)),
56 .userspacesize = XT_ALIGN(sizeof(struct xt_comment_info)),
Jan Engelhardt181dead2007-10-04 16:27:07 +000057 .help = comment_help,
Jan Engelhardt181dead2007-10-04 16:27:07 +000058 .print = comment_print,
59 .save = comment_save,
Jan Engelhardtcc2511e2011-03-01 20:16:22 +010060 .x6_parse = xtables_option_parse,
61 .x6_options = comment_opts,
Yasuyuki KOZAKAI9ea637d2007-07-24 07:21:17 +000062};
63
64void _init(void)
65{
Jan Engelhardt181dead2007-10-04 16:27:07 +000066 xtables_register_match(&comment_match);
Yasuyuki KOZAKAI9ea637d2007-07-24 07:21:17 +000067}