From: David Ahern <dsa@cumulusnetworks.com>
To: "Jason A. Donenfeld" <Jason@zx2c4.com>,
Netdev <netdev@vger.kernel.org>,
David Miller <davem@davemloft.net>,
"Eric W. Biederman" <ebiederm@xmission.com>
Subject: Re: [RFC] Inverse of flowi{4,6}_oif: flowi{4,6}_not_oif
Date: Wed, 3 Feb 2016 09:28:05 -0700 [thread overview]
Message-ID: <56B22A95.4010408@cumulusnetworks.com> (raw)
In-Reply-To: <CAHmME9pGKeM9=qqcxrN12ELtTjhwgBkPV0K3ixfVz3a_CBugAw@mail.gmail.com>
On 2/3/16 7:27 AM, Jason A. Donenfeld wrote:
> FYI, for v4 at least, it's ridiculously easy and simple to implement:
>
> =~=~=~=~=~=~=~=~=
>
> diff --git a/include/net/flow.h b/include/net/flow.h
> index 83969ee..29967ad 100644
> --- a/include/net/flow.h
> +++ b/include/net/flow.h
> @@ -26,6 +26,7 @@ struct flowi_tunnel {
>
> struct flowi_common {
> int flowic_oif;
> + int flowic_not_oif;
> int flowic_iif;
> __u32 flowic_mark;
> __u8 flowic_tos;
I was going to suggest a flag:
@@ -36,6 +36,7 @@ struct flowi_common {
#define FLOWI_FLAG_KNOWN_NH 0x02
#define FLOWI_FLAG_L3MDEV_SRC 0x04
#define FLOWI_FLAG_SKIP_NH_OIF 0x08
+#define FLOWI_FLAG_NOT_OIF 0x10
__u32 flowic_secid;
struct flowi_tunnel flowic_tun_key;
};
but there are a number of oif checks that would have to be enhanced with
the flag check. Adding a flowic_not_oif member is certainly simpler and
there is a 4-byte hole in the struct.
> @@ -67,6 +68,7 @@ union flowi_uli {
> struct flowi4 {
> struct flowi_common __fl_common;
> #define flowi4_oif __fl_common.flowic_oif
> +#define flowi4_not_oif __fl_common.flowic_not_oif
> #define flowi4_iif __fl_common.flowic_iif
> #define flowi4_mark __fl_common.flowic_mark
> #define flowi4_tos __fl_common.flowic_tos
> diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
> index 7aea0cc..d03e991 100644
> --- a/net/ipv4/fib_trie.c
> +++ b/net/ipv4/fib_trie.c
> @@ -1429,6 +1429,8 @@ found:
> flp->flowi4_oif != nh->nh_oif)
> continue;
> }
> + if (flp->flowi4_not_oif && flp->flowi4_not_oif == nh->nh_oif)
> + continue;
>
> if (!(fib_flags & FIB_LOOKUP_NOREF))
> atomic_inc(&fi->fib_clntref);
>
For IPv6 start with ip6_pol_route_lookup and modifying rt6_device_match
next prev parent reply other threads:[~2016-02-03 16:28 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-02 22:42 [RFC] Inverse of flowi{4,6}_oif: flowi{4,6}_not_oif Jason A. Donenfeld
2016-02-03 14:27 ` Jason A. Donenfeld
2016-02-03 16:28 ` David Ahern [this message]
2016-02-03 17:40 ` Jason A. Donenfeld
2016-02-03 17:46 ` [PATCH] flowi: add concept of "not_oif" Jason A. Donenfeld
2016-02-03 20:42 ` Julian Anastasov
2016-02-03 21:02 ` Jason A. Donenfeld
2016-02-04 3:44 ` Eric Dumazet
2016-02-05 18:38 ` Jason A. Donenfeld
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=56B22A95.4010408@cumulusnetworks.com \
--to=dsa@cumulusnetworks.com \
--cc=Jason@zx2c4.com \
--cc=davem@davemloft.net \
--cc=ebiederm@xmission.com \
--cc=netdev@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.