From: Pablo Neira Ayuso <pablo@netfilter.org>
To: Florian Westphal <fw@strlen.de>
Cc: netfilter-devel@vger.kernel.org
Subject: Re: [PATCH nf-next 1/6] netfilter: nf_tables: extend tracing infrastructure
Date: Tue, 24 Nov 2015 11:22:45 +0100 [thread overview]
Message-ID: <20151124102245.GD2683@salvia> (raw)
In-Reply-To: <1448359331-12692-2-git-send-email-fw@strlen.de>
On Tue, Nov 24, 2015 at 11:02:06AM +0100, Florian Westphal wrote:
> +void nf_tables_trace_notify(const struct nft_pktinfo *pkt,
> + const struct nft_chain *chain,
> + const struct nft_rule *rule,
> + u32 verdict,
> + enum nft_trace_types type)
> +{
> + struct nfgenmsg *nfmsg;
> + struct nlmsghdr *nlh;
> + struct sk_buff *skb;
> + unsigned int size;
> + int event = (NFNL_SUBSYS_NFTABLES << 8) | NFT_MSG_TRACE;
> +
> + if (!nfnetlink_has_listeners(pkt->net, NFNLGRP_NFTABLES))
> + return;
> +
> + /* Unlike other notifiers we need GFP_ATOMIC so use actual size
> + * needed instead of NLMSG_GOODSIZE.
> + */
> + size = nlmsg_total_size(sizeof(struct nfgenmsg))
> + + nla_total_size(sizeof(__be32)) /* trace type */
> + + nla_total_size(NFT_TABLE_MAXNAMELEN)
> + + nla_total_size(NFT_CHAIN_MAXNAMELEN)
> + + nla_total_size(sizeof(u32)) /* iif */
> + + nla_total_size(sizeof(u32)) /* oif */
> + + nla_total_size(sizeof(u32)) /* id */
> + + nla_total_size(sizeof(u32)) /* mark */
> + + nla_total_size(sizeof(u32)) /* verdict */
> + + nla_total_size(sizeof(__be64)); /* rule handle */
> +
> + switch (type) {
> + case NFT_TRACETYPE_PACKET:
> + size += nla_total_size(NFT_TRACETYPE_NETWORK_HSIZE)
> + + nla_total_size(NFT_TRACETYPE_TRANSPORT_HSIZE)
> + + nla_total_size(NFT_TRACETYPE_LL_HSIZE)
> + + nla_total_size(sizeof(__be16)) /* vlan tag */
> + + nla_total_size(sizeof(__be16)) /* device type */
> + + nla_total_size(sizeof(__u8)); /* transport prot */
> + break;
> + default:
> + break;
> + }
> +
> + skb = nlmsg_new(size, GFP_ATOMIC);
> + if (!skb)
> + return;
> +
> + nlh = nlmsg_put(skb, 0, 0, event, sizeof(struct nfgenmsg), 0);
> + if (!nlh)
> + goto nla_put_failure;
> +
> + nfmsg = nlmsg_data(nlh);
> + nfmsg->nfgen_family = pkt->pf;
> + nfmsg->version = NFNETLINK_V0;
> + nfmsg->res_id = htons(pkt->net->nft.base_seq & 0xffff);
> +
> + if (nla_put_be32(skb, NFTA_TRACE_TYPE, htonl(type)))
> + goto nla_put_failure;
> +
> + if (nla_put_be32(skb, NFTA_TRACE_ID, htonl(hash32_ptr(pkt->skb))))
> + goto nla_put_failure;
> +
> + if (chain) {
> + if (nla_put_string(skb, NFTA_TRACE_TABLE, chain->table->name))
> + goto nla_put_failure;
> + if (nla_put_string(skb, NFTA_TRACE_CHAIN, chain->name))
> + goto nla_put_failure;
> + }
> +
> + if (rule && nla_put_be64(skb, NFTA_TRACE_RULE_HANDLE,
> + cpu_to_be64(rule->handle)))
> + goto nla_put_failure;
> +
> + if (pkt->in &&
> + nla_put_be32(skb, NFTA_TRACE_IIF, htonl(pkt->in->ifindex)))
> + goto nla_put_failure;
> + if (pkt->out &&
> + nla_put_be32(skb, NFTA_TRACE_OIF, htonl(pkt->out->ifindex)))
> + goto nla_put_failure;
> + if (pkt->skb->mark &&
> + nla_put_be32(skb, NFTA_TRACE_MARK, htonl(pkt->skb->mark)))
> + goto nla_put_failure;
> +
> + switch (type) {
> + case NFT_TRACETYPE_POLICY:
> + case NFT_TRACETYPE_RETURN:
> + case NFT_TRACETYPE_RULE:
> + if (nla_put_be32(skb, NFTA_TRACE_VERDICT, htonl(verdict)))
> + goto nla_put_failure;
> + break;
> + case NFT_TRACETYPE_PACKET:
> + if (!trace_notify_put_packet(skb, pkt))
> + goto nla_put_failure;
> + break;
> + default:
> + break;
> + }
> +
> + nlmsg_end(skb, nlh);
> + nfnetlink_send(skb, pkt->net, 0, NFNLGRP_NFTABLES, 0, GFP_ATOMIC);
BTW, do we really want to use the default NFNLGRP_NFTABLES group?
multicast group provide a simple way for filtering out what you don't
need from kernelspace. And you can still subscribe both groups
NFNLGRP_NFTABLES and NFNLGRP_NFTABLES_TRACE.
I'm telling this when thinking of nft-sync. Why should it be receiving
this spamming tracing events when it only cares about ruleset updates?
And specifically netlink bandwidth is limited from packet context.
next prev parent reply other threads:[~2015-11-24 10:22 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-24 10:02 [PATCH 0/6] nftables trace support Florian Westphal
2015-11-24 10:02 ` [PATCH nf-next 1/6] netfilter: nf_tables: extend tracing infrastructure Florian Westphal
2015-11-24 10:17 ` Pablo Neira Ayuso
2015-11-24 10:27 ` Florian Westphal
2015-11-24 10:30 ` Pablo Neira Ayuso
2015-11-24 10:35 ` Patrick McHardy
2015-11-24 11:11 ` Florian Westphal
2015-11-24 10:22 ` Pablo Neira Ayuso [this message]
2015-11-24 10:28 ` Florian Westphal
2015-11-24 10:33 ` Patrick McHardy
2015-11-24 10:44 ` Pablo Neira Ayuso
2015-11-24 10:45 ` Pablo Neira Ayuso
2015-11-24 10:47 ` Patrick McHardy
2015-11-24 10:36 ` Pablo Neira Ayuso
2015-11-24 10:44 ` Patrick McHardy
2015-11-25 0:55 ` Patrick McHardy
2015-11-25 8:39 ` Florian Westphal
2015-11-25 8:48 ` Florian Westphal
2015-11-25 9:35 ` Patrick McHardy
2015-11-25 10:13 ` Florian Westphal
2015-11-25 11:51 ` Patrick McHardy
2015-11-25 12:20 ` Florian Westphal
2015-11-24 10:02 ` [PATCH nf-next 2/6] netfilter: nf_tables: wrap tracing with a static key Florian Westphal
2015-11-24 10:13 ` Patrick McHardy
2015-11-24 10:21 ` Florian Westphal
2015-11-24 10:28 ` Patrick McHardy
2015-11-24 10:19 ` Pablo Neira Ayuso
2015-11-24 10:02 ` [PATCH nf-next 3/6] netfilter: nf_tables: disable old tracing if listener is present Florian Westphal
2015-11-24 10:16 ` Patrick McHardy
2015-11-24 10:24 ` Pablo Neira Ayuso
2015-11-24 10:31 ` Florian Westphal
2015-11-24 10:39 ` Pablo Neira Ayuso
2015-11-24 10:53 ` Patrick McHardy
2015-11-24 11:10 ` Florian Westphal
2015-11-24 11:33 ` Patrick McHardy
2015-11-24 15:15 ` Florian Westphal
2015-11-24 15:26 ` Patrick McHardy
2015-11-24 15:35 ` Florian Westphal
2015-11-24 15:42 ` Patrick McHardy
2015-11-25 15:06 ` Patrick McHardy
2015-11-25 16:23 ` Pablo Neira Ayuso
2015-11-25 16:34 ` Patrick McHardy
2015-11-25 16:24 ` Florian Westphal
2015-11-25 16:46 ` Patrick McHardy
2015-11-25 17:32 ` Patrick McHardy
2015-11-25 22:27 ` Florian Westphal
2015-11-25 23:04 ` Patrick McHardy
2015-11-25 23:16 ` Florian Westphal
2015-11-25 23:30 ` Patrick McHardy
2015-11-25 23:42 ` Patrick McHardy
2015-11-25 23:56 ` Florian Westphal
2015-11-25 22:52 ` Florian Westphal
2015-11-25 23:15 ` Patrick McHardy
2015-11-25 23:19 ` Florian Westphal
2015-11-26 10:50 ` Patrick McHardy
2015-11-26 11:03 ` Florian Westphal
2015-11-26 11:42 ` Patrick McHardy
2015-11-25 16:49 ` Jan Engelhardt
2015-11-25 16:53 ` Patrick McHardy
2015-11-25 17:14 ` Jan Engelhardt
2015-11-25 17:24 ` Patrick McHardy
2015-11-25 0:57 ` Patrick McHardy
2015-11-24 10:02 ` [PATCH libnftnl 4/6] src: rename EXPORT_SYMBOL to EXPORT_SYMBOL_ALIAS Florian Westphal
2015-11-24 10:11 ` Pablo Neira Ayuso
2015-11-24 10:02 ` [PATCH libnftnl 5/6] src: add trace infrastructure support Florian Westphal
2015-11-24 12:16 ` Patrick McHardy
2015-11-24 14:53 ` Patrick McHardy
2015-11-24 10:02 ` [PATCH nftables 6/6] src: add trace support to nft monitor mode Florian Westphal
2015-11-24 10:25 ` Patrick McHardy
2015-11-24 10:48 ` Florian Westphal
2015-11-24 10:58 ` Patrick McHardy
2015-11-24 11:01 ` Pablo Neira Ayuso
2015-11-24 11:07 ` Patrick McHardy
2015-11-24 11:14 ` Pablo Neira Ayuso
2015-11-24 11:14 ` Florian Westphal
2015-11-24 11:41 ` Patrick McHardy
2015-11-24 10:53 ` Pablo Neira Ayuso
2015-11-24 11:04 ` Patrick McHardy
2015-11-24 11:12 ` Pablo Neira Ayuso
2015-11-24 11:36 ` Patrick McHardy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20151124102245.GD2683@salvia \
--to=pablo@netfilter.org \
--cc=fw@strlen.de \
--cc=netfilter-devel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).