All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Fastabend <john.fastabend@gmail.com>
To: Thomas Graf <tgraf@suug.ch>
Cc: Jamal Hadi Salim <jhs@mojatatu.com>,
	Pablo Neira Ayuso <pablo@netfilter.org>,
	simon.horman@netronome.com, sfeldma@gmail.com,
	netdev@vger.kernel.org, davem@davemloft.net,
	gerlitz.or@gmail.com, andy@greyhouse.net, ast@plumgrid.com,
	Jiri Pirko <jiri@resnulli.us>
Subject: Re: [net-next PATCH v3 00/12] Flow API
Date: Thu, 22 Jan 2015 08:58:07 -0800	[thread overview]
Message-ID: <54C12C1F.706@gmail.com> (raw)
In-Reply-To: <20150122151316.GB25797@casper.infradead.org>

On 01/22/2015 07:13 AM, Thomas Graf wrote:
> On 01/22/15 at 10:00am, Jamal Hadi Salim wrote:
>> On 01/22/15 09:00, Pablo Neira Ayuso wrote:
>>
>>>

I'll try to unify the threads here

>>> +/* rocker specific action definitions */
>>> +struct net_flow_action_arg rocker_set_group_id_args[] = {
>>> +       {
>>> +               .name = "group_id",
>>> +               .type = NFL_ACTION_ARG_TYPE_U32,
>>> +               .value_u32 = 0,
>>> +       },
>>>

In response to Pablo's observation,

Correct this is fully exposed to user space, but it is also self
contained inside the API meaning I can learn when to use it and what it
does by looking at the other operations tables the table graph and
supported headers. The assumption I am making that is not in the API
explicitly yet. Is that actions named "set_field_name" perform the
set operation on that field. We can and plan to extend the API to make
this assumption explicit in the API.

In this case I can "learn" that I can match on group_id in some tables
and then use the above action to set the group_id in others.

>>> that is retrieved via ndo_flow_get_actions and fully exposed to
>>> userspace.
>>>
>>
>> My main concern is along similar lines (I did express it earlier and
>> I think Jiri chimed in as well).
>> The API exposes direct access to hardware. I am sure this was a result
>> of trying to replace the ethtool interface (which was primitive).
>> By providing vendors direct access to the hardware - they do not need
>> to use any traditional Linux tooling/APIs.
>
> I don't follow this. John's proposal allows to decide on a case by
> case basis what we want to export. Just like with ethtool or
> RTNETLINK. There is no direct access to hardware. A user can only
> configure what is being exposed by the kernel.
>
> Pablo raises an interesting point though. How do we handle unique
> features like Rocker groups.
>
> Maybe Jiri and Scott can chime in and describe if we can map this to
> something more generic and avoid exporting anything Rocker specific.
>

Even though its a detail of the rocker world its easy enough for a
program on top of the API to learn how it works.

So in the rocker switch case if I want to rewrite an eth_dst adress I
have a  couple choices. I can set the group_id in one of the tables
that support setting the group_id and then do the rewrite in one of the
tables that supports matching on group_id and setting the eth_dst mac.
The "choice" I make is a policy IMO and I don't want to hard code logic
in the kernel that picks tables and decides things like what should I
do if table x is full but table y could also be used should I overflow
into table y? Or  is table y reserved for some other network function?
etc.

There are some actions and metadata though that _need_ to be
standardized. These are the metadata that is used outside the API. For
example ingress_port is metadata that is set outside the tables.
Similarly set_egress_port and set_egress_queue provide the forwarding
and queueing fields. No matter how hard you look at the model from the
API you can not learn how these are used.

> What would a rocker group map to in the tc world?

In the 'tc' world I would guess the easiest thing to do is simply bind
a 'tc' qdisc to the ACL table. It seems a good first approximation of
how to make this work. But the rocker world doesn't yet have any QOS so
it makes it difficult to "offload" anything but the fifo qdiscs.

>
>> I see this as a gaping hole
>> for vendor SDKs with their own definitions of their own hardware that
>> doesnt work with anyone else. i.e it seems to standardize proprietary
>> interfaces. Maybe thats what Pablo is alluding to.
>
> I will be the first to root for rejection if such patches appear.
>

Is it problematic if users define some unique header here and then
provide actions to set/pop/push/get operations on it?

For me this seems perfectly reasonable. We can pull it out of hardware
or a database in libvirt perhaps then feed it back into Linux nft,
ebpf, tc u32_filter, to create a unified view. I think ebpf, nft, and
u32 have been all about supporting vendor specific protocols?

I must be missing the point about proprietary interfaces. The FLOW API
would be the interface and if we create interesting tools/systems around
it and integration with other Linux sub-systems by choosing to use a
proprietary SDK you lose the goodness.

.John

-- 
John Fastabend         Intel Corporation

  parent reply	other threads:[~2015-01-22 16:58 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-20 20:26 [net-next PATCH v3 00/12] Flow API John Fastabend
2015-01-20 20:26 ` [net-next PATCH v3 01/12] net: flow_table: create interface for hw match/action tables John Fastabend
2015-01-22  4:37   ` Simon Horman
2015-01-20 20:27 ` [net-next PATCH v3 02/12] net: flow_table: add rule, delete rule John Fastabend
2015-01-20 20:27 ` [net-next PATCH v3 03/12] net: flow: implement flow cache for get routines John Fastabend
2015-01-20 20:27 ` [net-next PATCH v3 04/12] net: flow_table: create a set of common headers and actions John Fastabend
2015-01-20 20:59   ` John W. Linville
2015-01-20 22:10     ` John Fastabend
2015-01-20 20:28 ` [net-next PATCH v3 05/12] net: flow_table: add validation functions for rules John Fastabend
2015-01-20 20:28 ` [net-next PATCH v3 06/12] net: rocker: add pipeline model for rocker switch John Fastabend
2015-01-20 20:29 ` [net-next PATCH v3 07/12] net: rocker: add set rule ops John Fastabend
2015-01-20 20:29 ` [net-next PATCH v3 08/12] net: rocker: add group_id slices and drop explicit goto John Fastabend
2015-01-20 20:30 ` [net-next PATCH v3 09/12] net: rocker: add multicast path to bridging John Fastabend
2015-01-20 20:30 ` [net-next PATCH v3 10/12] net: rocker: add cookie to group acls and use flow_id to set cookie John Fastabend
2015-01-20 20:31 ` [net-next PATCH v3 11/12] net: rocker: have flow api calls set cookie value John Fastabend
2015-01-20 20:31 ` [net-next PATCH v3 12/12] net: rocker: implement delete flow routine John Fastabend
2015-01-22 12:52 ` [net-next PATCH v3 00/12] Flow API Pablo Neira Ayuso
2015-01-22 13:37   ` Thomas Graf
2015-01-22 14:00     ` Pablo Neira Ayuso
2015-01-22 15:00       ` Jamal Hadi Salim
2015-01-22 15:13         ` Thomas Graf
2015-01-22 15:28           ` Jamal Hadi Salim
2015-01-22 15:37             ` Thomas Graf
2015-01-22 15:44               ` Jamal Hadi Salim
2015-01-23 10:10                 ` Thomas Graf
2015-01-23 10:24                   ` Jiri Pirko
2015-01-23 11:08                     ` Thomas Graf
2015-01-23 11:39                       ` Jiri Pirko
2015-01-23 12:28                         ` Thomas Graf
2015-01-23 13:43                           ` Jiri Pirko
2015-01-23 14:07                             ` Thomas Graf
2015-01-23 15:25                               ` Jiri Pirko
2015-01-23 15:43                                 ` John Fastabend
2015-01-23 15:56                                   ` Jiri Pirko
2015-01-23 15:49                                 ` Thomas Graf
2015-01-23 16:00                                   ` Jiri Pirko
2015-01-23 15:34                               ` John Fastabend
2015-01-23 15:53                                 ` Jiri Pirko
2015-01-23 16:00                                   ` Thomas Graf
2015-01-23 16:08                                     ` John Fastabend
2015-01-23 16:16                                     ` Jiri Pirko
2015-01-24 13:04                                       ` Jamal Hadi Salim
2015-01-23 17:46                                 ` Thomas Graf
2015-01-23 19:59                                   ` John Fastabend
2015-01-23 23:16                                     ` Thomas Graf
2015-01-24 13:22                                   ` Jamal Hadi Salim
2015-01-24 13:34                                     ` Thomas Graf
2015-01-24 13:01                                 ` Jamal Hadi Salim
2015-01-26  8:26                                   ` Simon Horman
2015-01-26 12:26                                     ` Jamal Hadi Salim
2015-01-27  4:28                                       ` David Ahern
2015-01-27  4:58                                         ` Andy Gospodarek
2015-01-27 15:54                                           ` Jamal Hadi Salim
2015-01-24 12:36                         ` Jamal Hadi Salim
2015-01-22 15:48               ` Jiri Pirko
2015-01-22 17:58                 ` Thomas Graf
2015-01-22 16:49               ` Pablo Neira Ayuso
2015-01-22 17:10                 ` John Fastabend
2015-01-22 17:44                 ` Thomas Graf
2015-01-24 12:34                   ` Jamal Hadi Salim
2015-01-24 13:48                     ` Thomas Graf
2015-01-23  9:00                 ` David Miller
2015-01-22 16:58           ` John Fastabend [this message]
2015-01-23 10:49             ` Thomas Graf
2015-01-23 16:42               ` John Fastabend
2015-01-24 12:29             ` Jamal Hadi Salim

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=54C12C1F.706@gmail.com \
    --to=john.fastabend@gmail.com \
    --cc=andy@greyhouse.net \
    --cc=ast@plumgrid.com \
    --cc=davem@davemloft.net \
    --cc=gerlitz.or@gmail.com \
    --cc=jhs@mojatatu.com \
    --cc=jiri@resnulli.us \
    --cc=netdev@vger.kernel.org \
    --cc=pablo@netfilter.org \
    --cc=sfeldma@gmail.com \
    --cc=simon.horman@netronome.com \
    --cc=tgraf@suug.ch \
    /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.