--- /dev/null +++ b/extensions/libxt_id.c @@ -0,0 +1,45 @@ +/* Shared library add-on to iptables to add id match support. */ + +#include +#include +#include + +enum { + O_ID = 0, +}; + +static const struct xt_option_entry id_opts[] = { + { + .name = "id", + .id = O_ID, + .type = XTTYPE_UINT32, + .flags = XTOPT_MAND | XTOPT_PUT, + XTOPT_POINTER(struct xt_id_info, id) + }, + XTOPT_TABLEEND, +}; + +/* Saves the union ipt_matchinfo in parsable form to stdout. */ +static void +id_save(const void *ip, const struct xt_entry_match *match) +{ + struct xt_id_info *idinfo = (void *)match->data; + + printf(" --id %lu", idinfo->id); +} + +static struct xtables_match id_match = { + .family = NFPROTO_UNSPEC, + .name = "id", + .version = XTABLES_VERSION, + .size = XT_ALIGN(sizeof(struct xt_id_info)), + .userspacesize = XT_ALIGN(sizeof(struct xt_id_info)), + .save = id_save, + .x6_parse = xtables_option_parse, + .x6_options = id_opts, +}; + +void _init(void) +{ + xtables_register_match(&id_match); +} --- /dev/null +++ b/include/linux/netfilter/xt_id.h @@ -0,0 +1,8 @@ +#ifndef _XT_ID_H +#define _XT_ID_H + +struct xt_id_info { + __u32 id; +}; + +#endif /* XT_ID_H */