Sorry for the late reply. I have uploaded a new version to address your
very useful comments:)
https://datatracker.ietf.org/doc/draft-ietf-rtgwg-bgp-pic/
See replies below "#Ahmed"
Thanks a lot
Ahmed
On 8/11/2016 6:39 PM, Rob Shakir wrote:
Ahmed, Clarence, Pradosh,
I did a review of draft-ietf-rtgwg-bgp-pic-02 as part of the process of doing a
shepherd write-up for this document. I have a number of comments which I want
to try and address first.
General:
1) This document feels really difficult to get the concepts from to me. The key
intent (in my view) is to describe the way that one can structure a FIB to be
able to reduce the number of updates that are required to reconverge.
Unfortunately, the extensive use of examples (to me) does not make the core
concepts that are being described super-clear. To this end, what I would
propose is re-working the overview section. In this section the two “pillars”
that are described can be outlined in more detail. For example:
BGP PIC is based on two FIB design concepts:
1. Rather than implementing a forwarding construct each BGP NLRI has
a corresponding next-hop property, the FIB is implemented as a
series of linked
entries, whereby many BGP NLRIs can link to a single next-hop
entry (or set of
next-hop entries).
2. Forwarding entries are represented as a chain - which may have
multiple
levels of hierarchy representing the forwarding dependencies for
packets
matching that criteria, for example, allowing a BGP NLRI to map to
a BGP
next-hop which itself maps to an IGP next-hop, which maps to an
interface.
Designing the FIB in this manner allows commonalities between different
prefixes
to be exploited to improve convergence time. Particularly, where a
particular
element is updated (e.g., IGP path to a BGP next-hop), then these
changes are
inherited by the other entries which are linked to the updated element
(i.e.,
all BGP NLRIs which share the BGP next-hop above).
#Ahmed: I modified the first part of the "overview" section to indicate
what you mentioned. I used prefix instead of NLRI because the concept of
BGP-pic is not only applicable to BGP, even though it is called "BGP"-pic:)
This high-level overview then allows a reader to be able parse *what* is really
implemented prior to getting stuck into the detailed examples and
walk-throughs. Defining this high-level approach would also help with the
definitions section, such that there is some context before trying to
understand the definitions.
2) The “Properties” section feels misplaced to me — it seems to be a back
reference to the rest of the document, whereas it would feel more natural if it
were a description of the benefits of implementing the concepts that are
described in the document, and a link to the sections where these are described
in more detail.
#Ahmed: I updated the "Properties" section to refer to the individual
sections as you suggested.
Section 4 has a similar issue, insofar that it now informs us of how to
implement some specifics of the actual forwarding behaviour following a number
of examples. I’d propose that the layout of the document should be something
more like:
Intro — why do we need PIC?
#Ahmed: This is what the abstract introduction does. First paragraph
says that BGP convergence is limited by its serial nature and that we
have multiple paths in many cases. The second paragraph says BGP-PIC is
solving this problem by not waiting to till updates reach the place to
take action
Overview — what is PIC?
a) FIB layout
b) FIB operation with PIC
c) Dealing with limited hierarchy FIBs
#Ahmed: I modified the document as follows
- Section 3 talks about constructing the forwarding chain and
illustrates it using an example
- Section 4 talks about the forwarding algorithm that uses the
hierarchical forwarding chain
- Section 5 talks about "flattening" the forwarding chain then applies
the "flattening" algorithm to an inter-AS example for illustration
Characteristics of PIC - what does PIC require, what does it not
require?
#Ahmed: I made the following modification
The two pillars of BGP-PIC is are mentioned at the beginning of the
"Overview" section. I added Section 2.1 to outline the requirements of
BGP. Section 2.1 used to be Section 7 on the previous version. I hope
this outlines the characteristics of BGP-PIC
Examples - demonstrating how PIC deals with various scenarios.
a) Basic example (as per Figure 2)
- Operation with iPE link failure
- Operation with remote link failure in the core
- Operation with ePE failure
- Operation with ePE-CE link failure
b) Optionally have the more complex example here.
#Ahmed: This what we have in Section "6" in the new version (Section 5
in the old version). There is really no "more complex" scenarios once
the hierarchical forwarding chain is constructed as described.
3) Use of the phrase “Prefix Independent Convergence”. I understand that this
is an established concept, which is widely implemented, however, if we are
trying to be more technically robust then I think that we need to work on how
this document describes the advantages of the methods that it proposes. In a
network that has 1:1 mapping of prefix to next-hop then the mechanisms that are
provided do not really mean that convergence is “prefix independent”. A more
robust way to describe this (IMHO) is that convergence time is now related to
the number of next-hop updates that need to be made, rather than the number of
NLRI. So - in the case that we have our 1:1 mapping of prefix to next-hop, then
we describe the number of updates we need to make is still # of prefixes == #
of next-hops. However, since we expect prefix to next-hop to be N:1 in most
cases, then we decouple of total number of *prefix* entries, but we’re still
coupled to the number of next-hops. I’d encourage that if we’re going to have
this document as output of the RTG WG then we are a little more robust in
describing the characteristics of the solution - even if it does not sound
quite so marketing-friendly as “prefix independent”.
#Ahmed: The existence of scenarios where convergence depends on prefixes
does not mean the algorithm itself depends on the number of prefixes.
As a general statement, the convergence of BGP-PIC depends on the
"degree of sharing" as well as the "depth of hierarchy". Exact modeling
and quantification of the "degree of sharing" and "depth of hierarchy"
was never a topic of this document. Most likely it requires more
mathematical modeling that would be a topic for another document that
would be closer to an academic research paper than an IETF informational RFC
On the other hand, we exactly mentioned what you said in this comment in
the last paragraph of Section 6.3 in the new version (5.3 in the
previous version) where we give two extreme abstract examples covering
both ends of the dependency spectrum
We also show in the same section that flattening (and thus reducing the
number of levels of hierarchy), reduces, but does not completely
eliminate, the benefit of BGP-PIC by comparing the number of objects to
modify in the flattened and normal forwarding chain for the same failure
4) Examples — in the doc, there is quite a lot of text which describes - in
words - what the routing table looks like for certain scenarios. It was my
feeling reviewing the document that actually adding this wording makes the
examples difficult to understand. Could one rather describe the RIB by writing
out what the entries would look like, or putting it in the context of each
device. It might be worth trying to use some actual documentation prefixes in
the examples, rather than the current approach, which creates some confusion as
to what kind of information is being represented by the notation used.
For instance, Figure 2 feels more readable to me if written as follows:
+--------------------------------+
| |
| ePE2 (loopback 192.0.2.1)
| | \
| | \
| | \
iPE | CE.......VRF "Blue"
| | / (VPN-IP1 -
65000:1:2001:DB8:1::/64)
| | / (VPN-IP2 -
65000:1:2001:DB8:2::/64)
| LDP/Segment-Routing Core | /
| ePE1 (loopback 192.0.2.2)
| |
+--------------------------------+
iPE’s routing table:
65000:1:2001:DB8:1::/64
via ePE1 (192.0.2.1), VPN Label: VPN-L11
via ePE2 (192.0.2.2), VPN Label:VPN-L21
65000:1:2001:DB8:2::/64
via ePE1 (192.0.2.1), VPN Label: VPN-L12
via ePE2 (192.0.2.2), VPN Label: VPN-L22
192.0.2.1/32
via Core, Label: IGP-L11
via Core, Label: IGP-L12
192.0.2.2/32
via Core, Label: IGP-L21
via Core, Label: IGP-L22
Tabulating the routing information then makes it much easier to refer to in the
subsequent diagram of the FIB layout.
#Ahmed: Thanks a lot for the suggestion. I added the RIB entries in
Section 2.2 as you suggested except I used IPv4 addresses for the BGP
NLRIs instead of IPv6 to fit inside the 80 character line with:). I also
added the the routing table for the flattened forwarding chain example
shown in figure 4 section 5.2 (Section 3.2 in the previous version)
5) In Section 3.2 - it seems like we go into a lot of detail of quite a complex
forwarding topology to explain the idea of how we can flatten entries together
in FIB hierarchy. I would propose that some text is added (ideally in the same
section as the proposal in 1) that describes the fundamentals of this section.
It also does not seem clear from the text (or the diagrams) what the “0” and
“1” in the pathlist and then subsequent flattened pathlist actually represent?
Are these next-hop IP addresses, or are they labels, or something different? (I
presume that they are next-hop addresses, but this doesn’t seem super-evident).
The entire idea of flattening has been re-organized and moved to
separate section (Section 5). Section 5.1 explains the steps. Section
5.2 applies these steps to an example. The "0" and "1" are path-
indices. The second bullet right before Figure 5 starts with " The index
inside the pathlist entry", Also the definition of "pathlist" in the
"terminology" section says "Each path in the pathlist carries its
"path-index" and the step 4 in Section 4 (in the new version) explains
how that index is used
6) There are some assertions in this document which I think are quite
implementation specific:
- 50msec failure detection of links — one could indicate that this
might be a typical time, but nothing in the mechanism that is described in this
document guarantees this.
- “Perspective” - 6.2.1 — I think quite a few things here depend on how
the implementation works. I would say that this section would be best moved to
an appendix as something that demonstrates the potential advantages based on
some example implementation and network topology.
#Ahmed: I moved that Section to an appendix and referred to it
At the moment, this feels like marketing numbers rather than anything that I’d
really expect to be in a technical publication from this WG.
Specifics:
1) OutLabel-List: There is a definition here that says that the array can be of
“one or more outgoing labels and/or label actions“, there is no provision
within this definition that the label can be unlabelled (or a no-op) - but this
is clearly implemented and used in a later example. I presume it should be
included in this definition.
#Ahmed: Modified the definition of the outlabel-list as you suggested
2) The definition of dependency seems to say that an object X is dependent on
object Y if Y can’t be deleted without X not being a dependency. It seems to me
like we might want to make this definition less self-referential in the text.
Perhaps something akin to:
One object X is determined to be a dependent of another object Y if a
link within
a specified forwarding chain exists between the two objects.
#Ahmed: The definition that you're proposing indicates that if X and Y
are in any forwarding chain, then they depend on each other because
there will be link between them. Instead I modified the dependency
definition to say that X depends on Y if the forwarding engine visits X
before Y while walking a forwarding chain
3) Definition of primary path — the definition here states that the path “can
be used all the time”. However, we have cases where the primary BGP path cannot
be used because the next-hop is unreachable in the IGP (for example). I think
the definition stating that path can be used all the time is not correct, and
rather one wants to indicate that the primary path is the first usable path
within a path list or similar.
#Ahmed: I modified the definition to say "can be used all the time as
long as a walk starting from this path can end with an adjacency". This
way it a primary path is a *resolved* path that can be used all the time
4) Definition of path — the definition here states that the path is the “next
hop in a sequence of unique connected nodes”. Is this really what we mean -
that a path needs to represent A-B-C-D. This doesn’t seem to tally with the
definition (and use) of PathList which is simply the next-hop. Is a more
rigorous definition that the a Path is an entry that corresponds to the first
hop (i.e., the local device’s next-hop) of a series of nodes that end at the
destination prefix?
#Ahmed: the definition starts with "It is the next-hop". So it coincides
directly with the pathlist, which is a list of "next-hops". I removed
"connected" and "unique" and added the statement " The nodes may not be
directly connected." to match how we use the term "next-hop" in the draft
5) Figure 3: It’s generally unclear to me what this figure is trying to show
with some of the arrows. We have VPN-L11 which is (I assume) an ingress LFIB
entry, and then VPN-IP1 which is an ingress IP leaf (within a VRF, I presume).
What do the arrows from the top to the bottom indicate?
#Ahmed: Both the IP and the label leaf use the same pathlist and
OutLabel-list but the label actions is different for the IP and the
label leaf. So I modified the diagram to show two different
OutLabel-lists for the IP and the label leaves but sharing the same pathlist
6) “BGP is inherently slow” — this seems to require some subjective view of
what ‘slow’ is. Would it not be better to state that the speed of convergence
of BGP is limited by the time taken to serially propagate reachability
information from the point of failure to the device that must reconverge.
#Ahmed: Modified the text as you suggested
7) “Another more common and widely deployed scenario is L3VPN” — do you want to
state that this is another *common* deployment scenario, otherwise, what is
this L3VPN deployment more common than?
#Ahmed: Removed the word "more"
8) There are some statements that this is “enabled with zero operator
intervention” — it is probably enabled by some software upgrade, so I’m not
sure that this is quite zero operator intervention - however, given that this
is mentioned, do you also need to discuss why this is something that can be
done on a per-node basis and what the potential negative impacts could be (if
any) of this happening? In general, having new things turn on by default and
not being able to test them, or know that they’ve changed is not a good way to
ensure that you can resolve faults in a network swiftly and effectively.
#Ahmed: The introduction of any feature on any product requires an
upgrade. However act of upgrade itself is never considered part of the
operator effort to "enable" that feature. Instead it is considered
capital expenditure. Hence the statement “enabled with zero operator
intervention” states an actual property of BGP-PIC. What you're refering
to is controlling the operation of BGP-PIC so as to be able to validate
it. The method of controlling or validating an implementation of a
feature is operator-dependent and implementation dependent. Also the
choice of how to enable/disable/control a feature (Whether to enable it
by default, disable it by default, have it enabled all the time without
possibility of disable) is also implementation dependent. So I do not
think this draft is the right place to discuss such implementation and
operator dependent properties. These discussion are more suitable in a
vendor-specific white paper or a 3rd party testing report
9) (nit) Through the “terminology” section - the definitions probably don’t
need to start with “it is” - one can simply say “BGP prefix: A prefix p/m…”
#Ahmed: Done:)
_______________________________________________
rtgwg mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/rtgwg