All of lore.kernel.org
 help / color / mirror / Atom feed
From: roopa <roopa@cumulusnetworks.com>
To: Scott Feldman <sfeldma@gmail.com>
Cc: David Miller <davem@davemloft.net>,
	Netdev <netdev@vger.kernel.org>,
	Shrijeet Mukherjee <shm@cumulusnetworks.com>
Subject: Re: ARP resolving for switch drivers
Date: Wed, 25 Feb 2015 21:56:49 -0800	[thread overview]
Message-ID: <54EEB5A1.1000706@cumulusnetworks.com> (raw)
In-Reply-To: <CAE4R7bDnrMZSsZeZmYkT8HhkXUpgnedBo8VX5iEtyJmzJ7gV5A@mail.gmail.com>

On 2/25/15, 9:08 PM, Scott Feldman wrote:
> On Sat, Feb 21, 2015 at 10:28 PM, Scott Feldman <sfeldma@gmail.com> wrote:
>> On Sat, Feb 21, 2015 at 10:11 PM, David Miller <davem@davemloft.net> wrote:
>>> Scott I looked into the current state of affairs and you should
>>> be able to use generic infrastructure to resolve a neighbour
>>> entry and even trigger the state machine.
>>>
>>> For ipv4:
>>>
>>>          n = __ipv4_neigh_lookup(dev, ip_addr);
>>>          if (!n)
>>>                  n = neigh_create(&arp_tbl, &ip_addr, dev, true);
>>>          if (!n)
>>>                  goto error;
>>>
>>>          if (!(n->nud_state & NUD_VALID))
>>>                  neigh_event_send(n, NULL);
>>>          else
>>>                  memcpy(&hw_entry->mac_addr, n->ha, dev_addr_len);
>>>
>>> If you have to take the neigh_event_send() path, you have to wait for
>>> the notifier to be invoked.  And in the notifier you can fetch the
>>> MAC address.
>> Perfect!  I'll give this a try shortly and test and report back.
>> (Trying to beat down some remaining L2 issues first).
>>
> David,
>
> Just following up on this.  The code above works great, at least for
> the initial nh resolution when route is installed.  I need to do some
> more testing for the cases when the neigh entry goes to !NUD_VALID,
> but I'm still holding a route with nhs looking for that neigh.  I
> guess I need to re-trigger the above code.  Need to play around with
> it.
>
> There are two other items I had on my list for L3 from netconf:
>
> 1) Routes that overlap tables, or how to assign priority.  I'll look
> at the RFC you sent for collapsing local/main tables.  For now, I used
> fib_info->fib_priority for the priority in the rocker L3 table.  Maybe
> that's good enough once local/main are collapsed?  But for other
> tables, I'm not sure if fib_info->fib_priority will be sufficient.  I
> probably need some guidance here.
>
> 2) Marking routes as "external"[1].  I added a RTAX_FEATURE_EXTERNAL
> bit to be set by application (iproute2, quagga, etc) when wanting to
> install route externally, for example to a switchdev switch.  Then if
> application sets bit, it is the applications responsibility to handle
> failure cases and rollback any lesser-prefixed routes than may have
> been pushed earlier, successfully to external.  The problem I'm
> running into is internal kernel routes need to be pushed to external
> and I don't want to mark those as "external", but I also want those to
> be install externally (to the device), if possible.
>
> [1] "external" seems to be the label we're giving kernel objects that
> get mirrored externally to a device, such as the mark we used for FDB
> entries populated into the bridge's FDB by a learning device.
scott,  don't mean to interrupt dave and your conversation here.
But, I am not seeing the hw learnt fdb entries to be same as
the routes from iproute2 or quagga.  In the fdb case, you had to mark it
external to indicate ownership of the entry to age it appropriately in 
the offload model
where both kernel and hw mirror fdb database and both can populate the 
fdb database.

I am not seeing the need to generalize the notion of  'external' used in 
fdb offloads across other sub-systems.
In this case  its the app (iproute2, quagga). What you want here is 
failure policy flags (as discussed @netdev01)
that user-space owns. And these should be optional with kernel having 
its own default policy (And default policy is where I am interested in :).

I guess I am re-iterating your intent but labeling it differently. :)

Thanks,
Roopa

  reply	other threads:[~2015-02-26  5:56 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-22  6:11 ARP resolving for switch drivers David Miller
2015-02-22  6:28 ` Scott Feldman
2015-02-26  5:08   ` Scott Feldman
2015-02-26  5:56     ` roopa [this message]
2015-02-26 12:03       ` Scott Feldman
2015-02-27 22:26         ` David Miller
2015-02-26  6:18     ` 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=54EEB5A1.1000706@cumulusnetworks.com \
    --to=roopa@cumulusnetworks.com \
    --cc=davem@davemloft.net \
    --cc=netdev@vger.kernel.org \
    --cc=sfeldma@gmail.com \
    --cc=shm@cumulusnetworks.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 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.