Re: [vpp-dev] Neighbor DUMP Takes Forever

2017-11-08 Thread Jon Loeliger
On Wed, Nov 8, 2017 at 12:37 PM, Klement Sekera -X (ksekera - PANTHEON
TECHNOLOGIES at Cisco)  wrote:

> Hi Jon,
>
> the usual way to deal with possible-empty result sets is to wrap the
> call with a control-ping.
>
> 1.) send control-ping
> 2.) send e.g. sw_interface_dump
> 3.) start collecting sw_interface_details responses (if any)
> 4.) once control-ping reply is received, you know that there will be no
> more
> responses to the sw_interface_dump call.
>

Yep.  I get it.  I just botched it.  Sorry.


> HTH,
> Klement
>

Thanks,
jdl
___
vpp-dev mailing list
vpp-dev@lists.fd.io
https://lists.fd.io/mailman/listinfo/vpp-dev

Re: [vpp-dev] Neighbor DUMP Takes Forever

2017-11-08 Thread Klement Sekera -X (ksekera - PANTHEON TECHNOLOGIES at Cisco)
Hi Jon,

the usual way to deal with possible-empty result sets is to wrap the
call with a control-ping.

1.) send control-ping
2.) send e.g. sw_interface_dump
3.) start collecting sw_interface_details responses (if any)
4.) once control-ping reply is received, you know that there will be no more
responses to the sw_interface_dump call.

This approach is used by all the existing API bindings, python, C VAPI,
C++ VAPI...

There have been proposals to have this logic built-in, but it doesn't
seem to have happened so far..

HTH,
Klement

Quoting Jon Loeliger (2017-11-08 19:25:03)
>Hi Folks,
>OK, maybe the Neighbor DUMP doesn't literally take forever.
>But it sure does take too long!  Here is the problem:
>When one goes to DUMP the Neighbor tables, one has no idea which interface
>might have ARP/NDP entries on them.  So one determines the total number of
>interfaces, and then one iterates over them one at a time asking for an 
>IP_NEIGHBOR_DUMP of each sw_if_index and AF combination.
>That's all fine.  The problem is that the DUMP response DETAILS never come
>for
>interfaces that have NO entries.  So the message handling times-out
>instead.  With
>a one-second timeout on each (interface, AF) pair, it takes 2 seconds per
>IF.
>It makes for a very slow process to determine the ARP/Neighbor tables.
>This used to be a problem in the NAT DUMP as well, but that was fixed.  I
>don't
>recall how off-hand, but at least one solution would be to always reply,
>and if a
>bogus entry is needed, do that.  Use a detail with a sw_if_index = ~0 if
>necessary.
>(Yeah, the ip_neighbor_t detail should be returning the sw_if_index too
>anyway.)
>Maybe something like that?
>Oh, the reason that you never see this problem with vppctl is that it
>doesn't
>use the API. It goes straight to internal data structures instead.
>Thanks,
>jdl
___
vpp-dev mailing list
vpp-dev@lists.fd.io
https://lists.fd.io/mailman/listinfo/vpp-dev

Re: [vpp-dev] Neighbor DUMP Takes Forever

2017-11-08 Thread Jon Loeliger
On Wed, Nov 8, 2017 at 12:25 PM, Jon Loeliger  wrote:

> Hi Folks,
>
> OK, maybe the Neighbor DUMP doesn't literally take forever.
> But it sure does take too long!  Here is the problem:
>

The problem appears to be PEBCAK.

jdl
___
vpp-dev mailing list
vpp-dev@lists.fd.io
https://lists.fd.io/mailman/listinfo/vpp-dev

[vpp-dev] Neighbor DUMP Takes Forever

2017-11-08 Thread Jon Loeliger
Hi Folks,

OK, maybe the Neighbor DUMP doesn't literally take forever.
But it sure does take too long!  Here is the problem:

When one goes to DUMP the Neighbor tables, one has no idea which interface
might have ARP/NDP entries on them.  So one determines the total number of
interfaces, and then one iterates over them one at a time asking for an
IP_NEIGHBOR_DUMP of each sw_if_index and AF combination.

That's all fine.  The problem is that the DUMP response DETAILS never come
for
interfaces that have NO entries.  So the message handling times-out
instead.  With
a one-second timeout on each (interface, AF) pair, it takes 2 seconds per
IF.

It makes for a very slow process to determine the ARP/Neighbor tables.

This used to be a problem in the NAT DUMP as well, but that was fixed.  I
don't
recall how off-hand, but at least one solution would be to always reply,
and if a
bogus entry is needed, do that.  Use a detail with a sw_if_index = ~0 if
necessary.
(Yeah, the ip_neighbor_t detail should be returning the sw_if_index too
anyway.)

Maybe something like that?

Oh, the reason that you never see this problem with vppctl is that it
doesn't
use the API. It goes straight to internal data structures instead.

Thanks,
jdl
___
vpp-dev mailing list
vpp-dev@lists.fd.io
https://lists.fd.io/mailman/listinfo/vpp-dev