All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jamal Hadi Salim <jhs-jkUAjuhPggJWk0Htik3J/w@public.gmane.org>
To: Jiri Pirko <jiri-rHqAuBHg3fBzbRFIqnYvSA@public.gmane.org>
Cc: ryazanov.s.a-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
	jasowang-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
	John Fastabend
	<john.r.fastabend-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	Neil.Jerram-QnUH15yq9NYqDJ6do+/SaQ@public.gmane.org,
	edumazet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org,
	andy-QlMahl40kYEqcZcGjlUOXw@public.gmane.org,
	dev-yBygre7rU0TnMu66kgdUjQ@public.gmane.org,
	nbd-p3rKhJxN3npAfugRpC6u6w@public.gmane.org,
	f.fainelli-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
	ronye-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org,
	jeffrey.t.kirsher-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org,
	ogerlitz-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org,
	ben-/+tVBieCtBitmTQ+vhA3Yw@public.gmane.org,
	buytenh-OLH4Qvv75CYX/NnBR394Jw@public.gmane.org,
	alexander.h.duyck-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org,
	simon.horman-wFxRvT7yatFl57MIdRCFDg@public.gmane.org,
	roopa-qUQiAmfTcIp+XZJcv9eMoEEOCMrvLtNR@public.gmane.org,
	aviadr-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org,
	nicolas.dichtel-pdR9zngts4EAvxtiuMwx3w@public.gmane.org,
	vyasevic-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
	nhorman-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org,
	netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	stephen-OTpzqLSitTUnbdJkjeBofR2eb7JE58TQ@public.gmane.org,
	dborkman-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
	ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org,
	davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org
Subject: Re: [patch net-next v2 8/9] switchdev: introduce Netlink API
Date: Mon, 22 Sep 2014 07:48:31 -0400	[thread overview]
Message-ID: <54200C8F.2040501@mojatatu.com> (raw)
In-Reply-To: <20140922075337.GA1828-6KJVSR23iU488b5SBfVpbw@public.gmane.org>

On 09/22/14 03:53, Jiri Pirko wrote:

> Jamal, would you please give us some examples on how to use tc to work
> with flows? I have a feeling that you see something other people does not.

I will be a little verbose so as to avoid knowledge assumption.

Lets talk about tc classifier/action subsystem because that is what
would take advantage of flows. We could also talk about qdiscs i.e
schedulers and queue objects because the two are often related
(the default classification action is "classid" which typically
maps to a queue class).

tc classification/action subsystem allows you to specify arbitrary
classifiers and actions.
You can then specify (using a precise BNF grammar) how filters and
actions are to be related.
Look at iproute2/f_*.c to see the currently defined ones.

Each classifier has a name/id and attributes/options specific to
itself. Classifiers dont necessarily have to filter on packet
headers; they could filter on metadata for example.
Each classifier running in software may be offloaded. I think that
simple model would allow usable tools.
The classifier you have defined currently in your patches could
be realized via the u32 classifier but i think that would
require knowledge of u32. So for usability reasons I would
suggest to write a brand new classifier. For lack of a better
name, lets call it "multi-tuple classifier".
I would expect this classifier to be usable in software tc as
well without necessarily being offloaded.

There are two important details to note:
1) many different types of classifiers exist. This would very
likely depend on hardware implementation. It is academic bullshit
(i.e not pragmatic) to claim all hardware offload can use the
same classification language. As i was telling Thomas
I dont see why one wouldnt offload the defined bpf classifier.
 From an API level, this means your ->flow_add/del/get would have
to support ability to define different classifiers.

2) Each classifier will have different semantics.
 From a device API level this means you have to allow the different
classifiers to pass attributes specific to them. This means
each classifier may override the ops(). I am indifferent how
it is achieved. So while you could pass one big structure
such as your flow struct, one should be able to do u32
kind of semantics.

We also need to discover which device supports which classifiers
and what constraints exist in the hardware implementation exist
(we can talk about that because it is important). Example
if one supports u32, how many u32 rules can be offloaded etc.

As to how it is to be implemented:
I like the semantics of the current bridge code. I have always
wondered why we didnt use that scheme for offloading qdiscs.
Each device supporting FDB offload has an ->fdb_add/del/get
(dont quote me on the naming). User space describes what
it wants. If something is to be offloaded we already know the
netdev the user is pointing to. We invoke the appropriate
->flow() calls with appropriately cooked structures.
I am not sure i like that we pass the netlink structure as Scott
often seems to point to; i think that passing the internal
structure we would install in s/ware may be the better approach
since:
a) we would need to parse the data anyways for validation etc
b) each hardware offload will likely need to translate further in
internal format
c)we have well defined mapping between user and offload,
the generic structure will be very close to hardware.
note: that is what the fdb offload does.

Note: I described this using tc, but i dont see why nftable
couldnt follow the same approach. My angle is that we dont
impede other users by over-focussing on ovs and whatever
other things that surround it.
cheers,
jamal

  parent reply	other threads:[~2014-09-22 11:48 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-19 13:49 [patch net-next v2 0/9] introduce rocker switch driver with hardware accelerated datapath api Jiri Pirko
2014-09-19 13:49 ` [patch net-next v2 1/9] net: rename netdev_phys_port_id to more generic name Jiri Pirko
     [not found]   ` <1411134590-4586-2-git-send-email-jiri-rHqAuBHg3fBzbRFIqnYvSA@public.gmane.org>
2014-09-19 13:54     ` Jeff Kirsher
2014-09-19 13:49 ` [patch net-next v2 3/9] rtnl: expose physical switch id for particular device Jiri Pirko
2014-09-19 13:49 ` [patch net-next v2 4/9] net-sysfs: " Jiri Pirko
2014-09-19 13:49 ` [patch net-next v2 5/9] net: introduce dummy switch Jiri Pirko
     [not found]   ` <1411134590-4586-6-git-send-email-jiri-rHqAuBHg3fBzbRFIqnYvSA@public.gmane.org>
2014-09-20  5:21     ` Florian Fainelli
2014-09-20  7:37       ` Jiri Pirko
2014-09-19 13:49 ` [patch net-next v2 6/9] switchdev: add basic support for flow matching and actions Jiri Pirko
2014-09-20  5:32   ` Florian Fainelli
2014-09-20  7:28     ` Jiri Pirko
2014-09-19 13:49 ` [patch net-next v2 7/9] switchdev: add swdev features Jiri Pirko
2014-09-19 13:49 ` [patch net-next v2 8/9] switchdev: introduce Netlink API Jiri Pirko
2014-09-19 15:25   ` Jamal Hadi Salim
2014-09-19 15:49     ` Jiri Pirko
2014-09-19 17:57       ` Jamal Hadi Salim
2014-09-19 22:12         ` John Fastabend
2014-09-19 22:18           ` Jamal Hadi Salim
2014-09-20  5:39             ` Florian Fainelli
2014-09-20  8:25               ` Jiri Pirko
2014-09-20  8:17             ` Jiri Pirko
2014-09-20 10:19               ` Jamal Hadi Salim
2014-09-20 11:01                 ` Thomas Graf
2014-09-20 11:32                   ` Jamal Hadi Salim
2014-09-20 11:51                     ` Thomas Graf
     [not found]                       ` <20140920115140.GA3777-FZi0V3Vbi30CUdFEqe4BF2D2FQJk+8+b@public.gmane.org>
2014-09-20 12:35                         ` Jamal Hadi Salim
2014-09-22  7:53                     ` Jiri Pirko
     [not found]                       ` <20140922075337.GA1828-6KJVSR23iU488b5SBfVpbw@public.gmane.org>
2014-09-22 11:48                         ` Jamal Hadi Salim [this message]
2014-09-20  5:36           ` Florian Fainelli
2014-09-20  8:14           ` Jiri Pirko
2014-09-20 10:53             ` Thomas Graf
2014-09-20 22:50               ` Alexei Starovoitov
2014-09-22  8:13                 ` Thomas Graf
2014-09-22 15:10                   ` Tom Herbert
2014-09-22 22:17                     ` Thomas Graf
     [not found]                       ` <20140922221727.GA4708-FZi0V3Vbi30CUdFEqe4BF2D2FQJk+8+b@public.gmane.org>
2014-09-22 22:40                         ` Tom Herbert
2014-09-22 22:53                           ` Thomas Graf
2014-09-22 23:07                             ` Tom Herbert
2014-09-23  1:36                               ` John Fastabend
2014-09-23  7:19                                 ` Thomas Graf
2014-09-23 11:09                                 ` Jamal Hadi Salim
     [not found]                           ` <CA+mtBx9ZVQ5r5Hzy9-uEnk+iu+HKkOP4+VANC06Xf8VvTxktwQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-09-23  9:18                             ` Thomas Graf
2014-09-23  1:54                     ` Alexei Starovoitov
2014-09-23  2:16                       ` Tom Herbert
2014-09-23  4:11                         ` Andy Gospodarek
2014-09-23 10:11                           ` Thomas Graf
2014-09-23 15:32                           ` Or Gerlitz
2014-09-24 13:32                             ` Thomas Graf
2014-09-26 20:03                               ` Or Gerlitz
2014-09-26 21:02                                 ` Thomas Graf
2014-09-23  9:52                         ` Thomas Graf
2014-09-20  3:41       ` Roopa Prabhu
2014-09-20  8:09         ` Jiri Pirko
2014-09-20 12:39           ` Roopa Prabhu
2014-09-20  8:10         ` Scott Feldman
2014-09-20 10:31           ` Jamal Hadi Salim
     [not found]           ` <DDC24110-C3F5-470F-B9BE-1D1792415D1E-qUQiAmfTcIp+XZJcv9eMoEEOCMrvLtNR@public.gmane.org>
2014-09-20 12:51             ` Roopa Prabhu
2014-09-20 17:21               ` Scott Feldman
2014-09-20 17:38                 ` Jiri Pirko
2014-09-21  1:30                   ` Roopa Prabhu
2014-09-19 13:49 ` [patch net-next v2 9/9] rocker: introduce rocker switch driver Jiri Pirko
     [not found] ` <1411134590-4586-1-git-send-email-jiri-rHqAuBHg3fBzbRFIqnYvSA@public.gmane.org>
2014-09-19 13:49   ` [patch net-next v2 2/9] net: introduce generic switch devices support Jiri Pirko
2014-09-19 14:15   ` [patch net-next v2 0/9] introduce rocker switch driver with hardware accelerated datapath api David Laight
     [not found]     ` <063D6719AE5E284EB5DD2968C1650D6D17495CC6-VkEWCZq2GCInGFn1LkZF6NBPR1lH4CV8@public.gmane.org>
2014-09-19 14:20       ` Jiri Pirko
2014-09-20  5:37         ` Florian Fainelli
  -- strict thread matches above, loose matches on Subject: below --
2014-09-23  3:43 [patch net-next v2 8/9] switchdev: introduce Netlink API Alexei Starovoitov
2014-09-23 20:57 ` Tom Herbert

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=54200C8F.2040501@mojatatu.com \
    --to=jhs-jkuajuhpggjwk0htik3j/w@public.gmane.org \
    --cc=Neil.Jerram-QnUH15yq9NYqDJ6do+/SaQ@public.gmane.org \
    --cc=alexander.h.duyck-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    --cc=andy-QlMahl40kYEqcZcGjlUOXw@public.gmane.org \
    --cc=aviadr-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=ben-/+tVBieCtBitmTQ+vhA3Yw@public.gmane.org \
    --cc=buytenh-OLH4Qvv75CYX/NnBR394Jw@public.gmane.org \
    --cc=davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org \
    --cc=dborkman-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=dev-yBygre7rU0TnMu66kgdUjQ@public.gmane.org \
    --cc=ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org \
    --cc=edumazet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
    --cc=f.fainelli-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=jasowang-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=jeffrey.t.kirsher-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    --cc=jiri-rHqAuBHg3fBzbRFIqnYvSA@public.gmane.org \
    --cc=john.r.fastabend-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    --cc=nbd-p3rKhJxN3npAfugRpC6u6w@public.gmane.org \
    --cc=netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=nhorman-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org \
    --cc=nicolas.dichtel-pdR9zngts4EAvxtiuMwx3w@public.gmane.org \
    --cc=ogerlitz-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=ronye-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=roopa-qUQiAmfTcIp+XZJcv9eMoEEOCMrvLtNR@public.gmane.org \
    --cc=ryazanov.s.a-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=simon.horman-wFxRvT7yatFl57MIdRCFDg@public.gmane.org \
    --cc=stephen-OTpzqLSitTUnbdJkjeBofR2eb7JE58TQ@public.gmane.org \
    --cc=vyasevic-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.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.