1/*
2 * (C) 2005-2012 by Pablo Neira Ayuso <pablo@netfilter.org>
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 */
9
10#include "internal/internal.h"
11
12static void
13set_filter_dump_attr_mark(struct nfct_filter_dump *filter_dump,
14			  const void *value)
15{
16	const struct nfct_filter_dump_mark *this = value;
17
18	filter_dump->mark.val = this->val;
19	filter_dump->mark.mask = this->mask;
20}
21
22static void
23set_filter_dump_attr_family(struct nfct_filter_dump *filter_dump,
24			    const void *value)
25{
26	filter_dump->l3num = *((uint8_t *)value);
27}
28
29const set_filter_dump_attr set_filter_dump_attr_array[NFCT_FILTER_DUMP_MAX] = {
30	[NFCT_FILTER_DUMP_MARK]		= set_filter_dump_attr_mark,
31	[NFCT_FILTER_DUMP_L3NUM]	= set_filter_dump_attr_family,
32};
33
34void __build_filter_dump(struct nfnlhdr *req, size_t size,
35			 const struct nfct_filter_dump *filter_dump)
36{
37	if (filter_dump->set & (1 << NFCT_FILTER_DUMP_MARK)) {
38		nfnl_addattr32(&req->nlh, size, CTA_MARK,
39				htonl(filter_dump->mark.val));
40		nfnl_addattr32(&req->nlh, size, CTA_MARK_MASK,
41				htonl(filter_dump->mark.mask));
42	}
43	if (filter_dump->set & (1 << NFCT_FILTER_DUMP_L3NUM)) {
44		struct nfgenmsg *nfg = NLMSG_DATA(&req->nlh);
45		nfg->nfgen_family = filter_dump->l3num;
46	}
47}
48