On Fri, 15 May 2015, David Lamparter wrote:

Ooooh.  I think I found the source of our different approaches.

Yes, you're designing to minimise CPU churn. I had an eye on the network churn, which is what GR was intended to do. From the introduction:

  "Usually, when BGP on a router restarts, all the BGP peers detect that
   the session went down and then came up.  This "down/up" transition
   results in a "routing flap" and causes BGP route re-computation,
   generation of BGP routing updates, and unnecessary churn to the
   forwarding tables.  It could spread across multiple routing domains.
   Such routing flaps may create transient forwarding blackholes and/or
   transient forwarding loops.  They also consume resources on the
   control plane of the routers affected by the flap.  As such, they are
   detrimental to the overall network performance."

It has the side effect of doing something useful for startup, but it
isn't trying to combat generic churn from router outages.

The RFC does seem to be concerned with minimising network churn, see the intro. The ordering of table dumps, and making the restarted router converge first is intended to help with that. It also mentions unplanned outages.

RFC 4724, Section 4.1:

                                 [...]  However, it MUST defer route
  selection for an address family until it either (a) receives the
  End-of-RIB marker from all its peers (excluding the ones with the
  "Restart State" bit set in the received capability and excluding the
  ones that do not advertise the graceful restart capability) or (b)
  the Selection_Deferral_Timer referred to below has expired.  It is
  noted that prior to route selection, the speaker has no routes to
  advertise to its peers and no routes to update the forwarding state.

Update-delay seems to be for all AFs at once, so we don't exactly do this to the letter, but I'd argue "close enough" with possibility for a future improvement.

What I would like is to defer UPDATEs only from the R-domain to S-domain
peers. This is what the current code does.

You're designing a different approach.  I would suggest you take it to
the idr WG @ IETF.

Except that's what the code has now.

The update-delay removes a nice convergence feature.

I'm asking the same thing, you don't seem to be listening to me. You, however, switched to a meta-argument that contributes nothing to the matter at hand, instead being only useful to get one opinion a higher weight than the other. That's not a valid move in a discussion between equals.


   After a (good) off-list discussion, and me posting a follow-up to
   address a concern you raised, which you reply to again arguing the need
   for a timer, you then post your own patch which, gosh, goes and removes
   the startup timer and makes the R-bit timer be, gosh, dependent on
   state, just as I had argued.

   WTF dude? Is that working together?

WTF dude, the timer is still there, it's called t_update_delay.
+bgp_update_delay_active (struct bgp *bgp)
+{
+  if (bgp->t_update_delay)
+    return 1;
+  return 0;
+}

The timer is a max-delay (potentially quite long). Until then it acts as a flag that may be disabled by changes to the state (sensible).

I don't have a problem with that. Behaving sensibly based on state is precisely what I was arguing for. I don't think there's a good way to pick the max-delay though, nor do I think it necessary to stall all UPDATEs.

then I really don't know what glasses you're reading my mails with.

The original timer wasn't sensible. Making it state-based is sensible to me. I thought we were having a discussion about going in that direction.

I hadn't objected to integrating update-delay at all, later.

I'm still arguing we should implement RFC 4724.  You seem to be arguing
we should try and design a new churn-reduction scheme.

It's not new - it's in the existing code. To remove it would be a convergence regression.

RFC 4724 doesn't even care greatly about the restarted-restarted case. Further, network RFCs are generally about the external behaviour. Internals are usually an implementation detail. There is no way the "Receiving Speaker" can tell whether or not the "Restarting Speaker" deferred its route-selection globally.

What matters here is that on the wire the "Restarting Speaker" is seen to wait for the EoR of the "Receiving Speaker", and that no speaker gets into deferal dead-locks because of this feature.

So, it's cool stuff, but I would join Michael in thinking this needs more time to develop outside of master to see the demand before committing to it.

The difference is, the src-dst stuff has been looked at by a 2-digit number of people @ IETF, and has been implemented by others. Your churn-reduction protocol for BGP is completely new with no written specification and no review at all.

The src-dest comment is on making it the default RIB lookup.

I made a comment asking about certain src-dest table lookup interactions that are not covered by the described use-cases, nor anywhere else (AFAICT) asking what the implications were, as it seems unclear and potentially problematic. I'd tend to want those assuaged before making it the default. Be it now (e.g. update an RFC?), or through wider experience later.

Until then, add it as an optional thing and I have no issue. (And the API for this will benefit other people doing extended routing lookups).

If you want to implement it in Quagga, sure - but implementing it in Quagga doesn't get you any interop testing, doesn't result in adequate feedback from other qualified people who either operate networks or have written the other BGP implementations you need to interact with.

While a Quagga implementation can (maybe should) be part of the creation process of a new protocol, it shouldn't be the very first thing.

That's just abusing our users' networks for testbeds.

"Send UPDATEs without artificial delays when it's perfectly acceptable" is abusing people's networks?

regards,
--
Paul Jakma      [email protected]  @pjakma Key ID: 64A2FF6A
Fortune:
A star wars satellite accidently blew up the WAN.

_______________________________________________
Quagga-dev mailing list
[email protected]
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to