From: roopa <roopa@cumulusnetworks.com>
To: Scott Feldman <sfeldma@gmail.com>
Cc: "Jamal Hadi Salim" <jhs@mojatatu.com>,
Netdev <netdev@vger.kernel.org>,
"David S. Miller" <davem@davemloft.net>,
"Jiří Pírko" <jiri@resnulli.us>,
"alexander.h.duyck@redhat.com" <alexander.h.duyck@redhat.com>
Subject: Re: [PATCH net-next v4 2/8] netdevice: add IPv4 fib add/del ops
Date: Sun, 08 Mar 2015 23:22:27 -0700 [thread overview]
Message-ID: <54FD3C23.2010002@cumulusnetworks.com> (raw)
In-Reply-To: <CAE4R7bCzV5zG5XPpgDAhO41Ym19W7Jd+97CMcJzOwwxLNOhTzA@mail.gmail.com>
On 3/8/15, 3:16 PM, Scott Feldman wrote:
> On Sun, Mar 8, 2015 at 7:31 AM, roopa <roopa@cumulusnetworks.com> wrote:
>> On 3/6/15, 11:59 AM, Scott Feldman wrote:
>>>
>>> I considered passing netlink flags in to driver, but the kernel logic
>>> in fib_table_insert() already takes care of the checks required by the
>>> flags, and from the driver's perspective, only three ops are needed:
>>> add, del, and mod. And I've combined add and mod into the same op,
>>> with the assumption the driver can know if an entry exists or not.
>>>
>>> Can it work?
>>>
>>> Let's try the various user cmds and see what happens:
>>>
>>> ip route add ... CREATE|EXCL
>>>
>>> if kernel FIB entry exists
>>> return -EEXIST to user
>>> else
>>> call driver add op
>>> add kernel FIB entry
>>>
>>> ip route change ... REPLACE
>>>
>>> if kernel FIB entry exists
>>> call driver add op // driver treats this as a mod
>>> modify kernel FIB entry
>>> else
>>> return -ENOENT
>>>
>>> ip route replace ... CREATE|REPLACE
>>>
>>> if kernel FIB entry exists
>>> call driver add op // driver treats this as a mod
>>> modify kernel FIB entry
>>> else
>>> call driver add op
>>> add kernel FIB entry
>>>
>>> ip route prepend ... CREATE
>>>
>>> if kernel FIB entry exists
>>> call driver add op // driver treats this as a mod
>>> prepend kernel FIB entry
>>> else
>>> call driver add op
>>> add kernel FIB entry
>>>
>>> ip route append ... CREATE|APPEND
>>>
>>> if kernel FIB entry exists
>>> call driver add op // driver treats this as a mod
>>> append kernel FIB entry
>>> else
>>> call driver add op
>>> add kernel FIB entry
>>>
>>>
>>> I'm not 100% on the prepend/append cases. Maybe don't try to offload
>>> prepend/append cases?
>> We will have to offload prepend/append cases as well (I had also raised this
>> earlier in v2).
> Can you show an working example of prepend/append case where
> programming hardware would be different than the replace case?
>
>
scott, I don't have an example of kernel vs hw right now. But, since we
only want to know if the switch driver can figure out
the kernel route ordering in case of append vs replace, below kernel
append and replace examples
might help (just pasting it from my notes and may contain unneeded
information).
Thanks,
Roopa
append:
=====
#ipv4
ip route show
10.0.12.2
nexthop via 10.0.13.2 dev dummy0 weight 1
nexthop via 10.0.14.2 dev dummy1 weight 1
ip route append 10.0.12.2 nexthop via 10.0.15.2 dev dummy2
ip monitor route
10.0.12.2 via 10.0.15.2 dev dummy2
# A new route was appended
ip route show
10.0.12.2
nexthop via 10.0.13.2 dev dummy0 weight 1
nexthop via 10.0.14.2 dev dummy1 weight 1
10.0.12.2 via 10.0.15.2 dev dummy2
#ipv6
ip -6 route show
3ffe:304:124:2306::/64 via fe80::b077:f0ff:fe23:5cc7 dev dummy0 metric 1024
3ffe:304:124:2306::/64 via fe80::d850:e7ff:fe87:cf6a dev dummy1 metric 1024
ip monitor route
3ffe:304:124:2306::/64 via fe80::c26:cdff:feca:18f2 dev dummy2 metric 1024
ip -6 route append 3ffe:304:124:2306::/64 nexthop via
fe80::c26:cdff:feca:18f2 dev dummy2
# A new nexthop was appended to the existing multipath route
ip -6 route show
3ffe:304:124:2306::/64 via fe80::b077:f0ff:fe23:5cc7 dev dummy0 metric 1024
3ffe:304:124:2306::/64 via fe80::d850:e7ff:fe87:cf6a dev dummy1 metric 1024
3ffe:304:124:2306::/64 nexthop via fe80::c26:cdff:feca:18f2 dev dummy2
replace:
=====
# ip route show
10.0.12.2
nexthop via 10.0.13.2 dev dummy0 weight 1
nexthop via 10.0.14.2 dev dummy1 weight 1
#ip route replace 10.0.12.2 nexthop via 10.0.15.2 dev dummy2
#ip monitor route
10.0.12.2 via 10.0.15.2 dev dummy2
# ipv4 route was replaced
ip route show
10.0.12.2 via 10.0.15.2 dev dummy2
#ipv6
ip -6 route show
3ffe:304:124:2306::/64 via fe80::b077:f0ff:fe23:5cc7 dev dummy0 metric 1024
3ffe:304:124:2306::/64 via fe80::d850:e7ff:fe87:cf6a dev dummy1 metric 1024
ip -6 route replace 3ffe:304:124:2306::/64 nexthop via
fe80::c26:cdff:feca:18f2 dev dummy2
ip monitor route
3ffe:304:124:2306::/64 via fe80::c26:cdff:feca:18f2 dev dummy2 metric 1024
# ipv6 nexthop was replaced
ip -6 route show
3ffe:304:124:2306::/64 via fe80::c26:cdff:feca:18f2 dev dummy2 metric 1024
3ffe:304:124:2306::/64 via fe80::d850:e7ff:fe87:cf6a dev dummy1 metric 1024
next prev parent reply other threads:[~2015-03-09 6:22 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-06 5:21 [PATCH net-next v4 0/8] switchdev: add IPv4 routing offload sfeldma
2015-03-06 5:21 ` [PATCH net-next v4 1/8] rtnetlink: add RTNH_F_EXTERNAL flag for fib offload sfeldma
2015-03-06 5:21 ` [PATCH net-next v4 2/8] netdevice: add IPv4 fib add/del ops sfeldma
2015-03-06 14:55 ` Jamal Hadi Salim
2015-03-06 19:59 ` Scott Feldman
2015-03-08 14:31 ` roopa
2015-03-08 22:16 ` Scott Feldman
2015-03-09 6:22 ` roopa [this message]
2015-03-09 8:38 ` Scott Feldman
2015-03-09 13:47 ` Jamal Hadi Salim
2015-03-09 18:07 ` Scott Feldman
2015-03-06 5:21 ` [PATCH net-next v4 3/8] switchdev: add IPv4 fib ndo ops wrappers sfeldma
2015-03-06 5:21 ` [PATCH net-next v4 4/8] switchdev: don't support custom ip rules, for now sfeldma
2015-03-06 5:21 ` [PATCH net-next v4 5/8] switchdev: implement IPv4 fib ndo wrappers sfeldma
2015-03-06 7:24 ` Jiri Pirko
2015-03-06 9:38 ` Scott Feldman
2015-03-06 11:53 ` Jiri Pirko
2015-03-06 5:21 ` [PATCH net-next v4 6/8] ipv4: add net bool fib_offload_disabled sfeldma
2015-03-06 5:21 ` [PATCH net-next v4 7/8] fib: hook IPv4 fib for hardware offload sfeldma
2015-03-06 5:21 ` [PATCH net-next v4 8/8] rocker: implement IPv4 fib offloading sfeldma
2015-03-06 5:27 ` [PATCH net-next v4 0/8] switchdev: add IPv4 routing offload David Miller
2015-03-06 15:43 ` Alexander Duyck
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=54FD3C23.2010002@cumulusnetworks.com \
--to=roopa@cumulusnetworks.com \
--cc=alexander.h.duyck@redhat.com \
--cc=davem@davemloft.net \
--cc=jhs@mojatatu.com \
--cc=jiri@resnulli.us \
--cc=netdev@vger.kernel.org \
--cc=sfeldma@gmail.com \
/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).