From: Pablo Neira Ayuso <pablo@netfilter.org>
To: netfilter-devel@vger.kernel.org
Cc: davem@davemloft.net, netdev@vger.kernel.org
Subject: [PATCH 12/18] openvswitch: Add commentary to conntrack.c
Date: Tue, 15 Mar 2016 02:27:56 +0100 [thread overview]
Message-ID: <1458005282-24665-13-git-send-email-pablo@netfilter.org> (raw)
In-Reply-To: <1458005282-24665-1-git-send-email-pablo@netfilter.org>
From: Jarno Rajahalme <jarno@ovn.org>
This makes the code easier to understand and the following patches
more focused.
Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
---
net/openvswitch/conntrack.c | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/net/openvswitch/conntrack.c b/net/openvswitch/conntrack.c
index 3045290..2c2bf07 100644
--- a/net/openvswitch/conntrack.c
+++ b/net/openvswitch/conntrack.c
@@ -152,8 +152,12 @@ static void ovs_ct_update_key(const struct sk_buff *skb,
ct = nf_ct_get(skb, &ctinfo);
if (ct) {
state = ovs_ct_get_state(ctinfo);
+ /* All unconfirmed entries are NEW connections. */
if (!nf_ct_is_confirmed(ct))
state |= OVS_CS_F_NEW;
+ /* OVS persists the related flag for the duration of the
+ * connection.
+ */
if (ct->master)
state |= OVS_CS_F_RELATED;
zone = nf_ct_zone(ct);
@@ -165,6 +169,9 @@ static void ovs_ct_update_key(const struct sk_buff *skb,
__ovs_ct_update_key(key, state, zone, ct);
}
+/* This is called to initialize CT key fields possibly coming in from the local
+ * stack.
+ */
void ovs_ct_fill_key(const struct sk_buff *skb, struct sw_flow_key *key)
{
ovs_ct_update_key(skb, NULL, key, false);
@@ -199,7 +206,6 @@ static int ovs_ct_set_mark(struct sk_buff *skb, struct sw_flow_key *key,
struct nf_conn *ct;
u32 new_mark;
-
/* The connection could be invalid, in which case set_mark is no-op. */
ct = nf_ct_get(skb, &ctinfo);
if (!ct)
@@ -375,6 +381,11 @@ static bool skb_nfct_cached(const struct net *net, const struct sk_buff *skb,
return true;
}
+/* Pass 'skb' through conntrack in 'net', using zone configured in 'info', if
+ * not done already. Update key with new CT state.
+ * Note that if the packet is deemed invalid by conntrack, skb->nfct will be
+ * set to NULL and 0 will be returned.
+ */
static int __ovs_ct_lookup(struct net *net, struct sw_flow_key *key,
const struct ovs_conntrack_info *info,
struct sk_buff *skb)
@@ -418,6 +429,13 @@ static int ovs_ct_lookup(struct net *net, struct sw_flow_key *key,
{
struct nf_conntrack_expect *exp;
+ /* If we pass an expected packet through nf_conntrack_in() the
+ * expectation is typically removed, but the packet could still be
+ * lost in upcall processing. To prevent this from happening we
+ * perform an explicit expectation lookup. Expected connections are
+ * always new, and will be passed through conntrack only when they are
+ * committed, as it is OK to remove the expectation at that time.
+ */
exp = ovs_ct_expect_find(net, &info->zone, info->family, skb);
if (exp) {
u8 state;
@@ -455,6 +473,7 @@ static int ovs_ct_commit(struct net *net, struct sw_flow_key *key,
err = __ovs_ct_lookup(net, key, info, skb);
if (err)
return err;
+ /* This is a no-op if the connection has already been confirmed. */
if (nf_conntrack_confirm(skb) != NF_ACCEPT)
return -EINVAL;
--
2.1.4
next prev parent reply other threads:[~2016-03-15 1:28 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-15 1:27 [PATCH 00/18] Netfilter/IPVS/OVS updates for net-next Pablo Neira Ayuso
2016-03-15 1:27 ` [PATCH 01/18] netfilter: ipset: Fix set:list type crash when flush/dump set in parallel Pablo Neira Ayuso
2016-03-15 1:27 ` [PATCH 02/18] netfilter: nfnetlink_acct: validate NFACCT_FILTER parameters Pablo Neira Ayuso
2016-03-15 1:27 ` [PATCH 03/18] ipvs: handle ip_vs_fill_iph_skb_off failure Pablo Neira Ayuso
2016-03-15 1:27 ` [PATCH 04/18] ipvs: drop first packet to redirect conntrack Pablo Neira Ayuso
2016-03-15 1:27 ` [PATCH 05/18] ipvs: allow rescheduling after RST Pablo Neira Ayuso
2016-03-15 1:27 ` [PATCH 06/18] ipvs: correct initial offset of Call-ID header search in SIP persistence engine Pablo Neira Ayuso
2016-03-15 1:27 ` [PATCH 07/18] netfilter: ipset: Check IPSET_ATTR_ETHER netlink attribute length Pablo Neira Ayuso
2016-03-15 1:27 ` [PATCH 08/18] netfilter: nft_compat: check match/targetinfo attr size Pablo Neira Ayuso
2016-03-15 1:27 ` [PATCH 09/18] netfilter: x_tables: check for size overflow Pablo Neira Ayuso
2016-03-15 1:27 ` [PATCH 10/18] netfilter: Remove IP_CT_NEW_REPLY definition Pablo Neira Ayuso
2016-03-15 1:27 ` [PATCH 11/18] netfilter: Allow calling into nat helper without skb_dst Pablo Neira Ayuso
2016-03-15 1:27 ` Pablo Neira Ayuso [this message]
2016-03-15 1:27 ` [PATCH 13/18] openvswitch: Update the CT state key only after nf_conntrack_in() Pablo Neira Ayuso
2016-03-15 1:27 ` [PATCH 14/18] openvswitch: Find existing conntrack entry after upcall Pablo Neira Ayuso
2016-03-15 1:27 ` [PATCH 15/18] openvswitch: Handle NF_REPEAT in conntrack action Pablo Neira Ayuso
2016-03-15 1:28 ` [PATCH 16/18] openvswitch: Delay conntrack helper call for new connections Pablo Neira Ayuso
2016-03-15 1:28 ` [PATCH 17/18] openvswitch: Interface with NAT Pablo Neira Ayuso
2016-03-15 1:28 ` [PATCH 18/18] netfilter: nf_conntrack: consolidate lock/unlock into unlock_wait Pablo Neira Ayuso
2016-03-15 2:33 ` [PATCH 00/18] Netfilter/IPVS/OVS updates for net-next David Miller
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=1458005282-24665-13-git-send-email-pablo@netfilter.org \
--to=pablo@netfilter.org \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
--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).