Dear Dhruv, all PCErs
Please find below a (rather long, apologies in advance) review and
comments for
draft-dhody-pce-pcep-domain-sequence-00. First and foremost, I believe
the draft
addresses a couple of much-needed extensions, namely, area sub-objects
encoding
and domain sequences. Following chairs suggestion to foster discussion, I am
sending directly to the main mailing list.
Comments and discussions welcome :)
Encoding of a Domain Sequence
================================
I agree that using the Include Route Object (IRO) is a natural choice rather
than adding a new object class. However, I have some doubts as detailed
below.
I may have missed previous discussions on this topic.
For the actual encoding, basically the options we have are:
a) Keep the RFC5440 IRO object (Object class 10, object type 1)
b) Use a new IRO object (Object class 10, object type 2) i.e. "the
request includes/refers to a domain sequence". In this case:
b.1. that replaces current one with better defined semantics and scenarios
b.2. that complements (can be together with) current one, requires
changes in
the PCEP request grammar.
c) Propose a new object class i.e. DOMAIN_SEQUENCE
It isn't clear to me which option is best. The reasons for this are several.
The first option, which is the one proposed in the draft has, imho, some
drawbacks, some of them due to the strictest interpretation of IRO as
defined in
RFC5440.
1. _Object Ordering_
Unfortunately RFC5440 does not mention anything regarding sub-object
ordering, it only says "to specify that the computed path MUST traverse
a set of specified network elements" and does not include some text in
the spirit of "Objects within an IRO object MUST appear in the
resulting
ERO in the same order that they appear in the IRO". Unless I am
mistaken,
this means that, at least in theory, we should not make assumptions
whether
the sub-objects included in the IRO shall appear in the resulting
ERO in the
same relative ordering. An implementation is free to iterate the IRO
subobjects, mark the nodes and links that appear in the IRO and execute
some kind of traveling salesman problem that makes sure that the path
travereses the referred elements, albeit the order is not guaranteed.
- The relative object ordering, however, is fundamental in the domain
sequence. This can be made explicit in the new type, i.e. we can
clearly
define new procedures and restrictions for a new object type.
2. _Different Scopes_
- Using new object or different object types easily differentiates two
different scopes. This was already done with RFC5440 BANDWIDTH
object, so type 2
means "bandwidth for re-optimization", or with draft-ietf-pce-gmpls
with the
ENDPOINTS / BANDWIDTH object since it was mentioned that the strictest
interpretation of RFC5440 forbids this object to have TLVs. With a
different type or class one IRO(10,1) can refer to objects to be
included
within the current domain and the other IRO(10,2) strictly to the
domain sequence.
- It is easier for an implementation to check type 1 for algorithmic
constraints and to check type 2 for domain sequence and "next PCE"
resolution.
In a typical implementation, this may be done at different places.
In other
words, a PCE may be able to support a domain sequence which is used
for next
PCE resolution / BRPC / etc. but may not be support an element
based IRO since
e.g. the backend algorithms may be based on some CSPF or Dijkstra path
computation. What should this PCE do? a new class or new type could
help. For
example, a new type can clearly state that a IRO (10,2) with the
p-bit set
means, for example, that Domain sequence must be honored, and that
elements
within a TE domain MAY be honored.
3. _Limited Procedures_
- Nothing is said in IRO and XRO objects what the procedures are when a
sub-object is not found. In XRO the straighforward option is to simply
ignore the unknown subobject. It is not clear to me what should be the
default procedure for an unkonwn IRO subobject. It could be ignored or
it could trigger an error. If we apply this to the domain sequence, I
would say that an unknown subobject at this level should trigger some
kind of high level error, like "PCE domain chain broken" or similiar
- An IRO object with a p-bit (mandatory) set, means that the object
must
be processed so, imho, means that the resulting ERO must contain the
elements in the IRO. This can be enforced / checked with the subobjects
are TED elements, but it is not clear how to proceed with Areas and AS.
- Does not support areas, and nothing is said regarding the order of
areas and AS.
4. _Strict vs Loose_
- RFC 5440 clearly states "The L bit of such sub-object has no meaning
within an IRO". If we now allow domain sequences, is there any use case
where having loose objects makes sense? For example, one may have
AS domain sequence with some AS being "loose". This is somehow against
current IRO.
Option c) has also several drawbacks, notably that it could end up somehow
redundant with IRO if we want to be able to specify domain sequences
while also
imposing also border nodes and/or inter-domain links. I think that my
personal
preference would be using a new IRO object type (e.g. 2) which could be
extended to include Areas, AS, clarify ordering, improve semantics and
better
define procedures. This new IRO "replaces" or "extends" the old IRO and may
appear where IRO(10,1) appears. A single intra domain PCE could use
"regular"
IRO, while the new type conveys "multi-domain information". If the
preferred
option is to keep (10,1) the draft should clarify procedures but this could
somehow contradict RFC5440? As stated above, my main driver to suggest
another
type is the previous work where a new type has been added where RFC5440 was
strict.
Area encoding
===================
The following encoding is proposed for Area IDs:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|L| Type | Length | Area Id (4 bytes) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Area Id (continued) | Resvd |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|L| Type | Length | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
// ISIS Area ID //
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
However, with the additional constraint for ISIS: "The Length MUST
be at least
4, and MUST be a multiple of 4." This implies that there will be
padding at the
end, or a reserved field, which is not clear neither from the text
or the
figure. An alternetive proposed encoding would be (uint32_t alignment):
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|L| Type | Length | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Area Id (4 bytes) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|L| Type | Length | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
// ISIS Area ID //
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
If, as Adrian mentioned in some old mail, 4-byte ASes need to be
taken into account
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|L| Type | Length | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Ext AS Id (4 bytes) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Scenarios
=======================
I believe that the draft should also address or just mention those cases
where
there are additional restrictions or constraints covering which border nodes
(ABRs, ASBRs) or border links (InterAS links) while defining a domain
sequence.
e.g. AS100, IPv4 prefix, AS200
e.g. Area0, ABR1, Area1
In Section3.3.1 It is somehow confusing to mention that Both AS are made of
area 0, somehow mixing "deployment scenarios" and "examples". I think that a
domain sequence made of AS only subobjects is independent of whether the
ASes
are, in turn, divided into IGP areas or not. In other words, a domain
sequence
composed of only AS is only a high level description of the domains that the
path must traverse, regardless of the areas. The domain sequence may or
may not
incude IGP areas .
Maybe the draft needs a formal section that details how the domain
sequence is
encoded, before jumping into deployment scenarios / examples. A rough draft,
not checked, and to be discussed would be as follows:
For reference, current RFC5440 basically is
IRO ::= <element-list>
element-list ::= <element> [<element-list>]
element := <ipv4prefix> | <ipv6prefix> | <unnum_ifid> | <AS subobject>
If we want to clearly define ordering and preferred format, a proposed
grammar
could be of the form
IRO ::= <inter-AS IRO> | <intra-AS IRO> | <intra-area IRO>
1) inter-AS IRO ::= [<intra-AS IRO>] <AS-list>
An inter-AS IRO is composed of a part regarding the current AS
followed by one or more AS parts
2) intra-AS IRO ::= [ <AS> ] <area-list>
An Intra-AS IRO is optionally qualified by an AS subobject
followed by one or more area IROs.
3) intra-Area IRO ::= <area>
An Intra Area IRO is optionally qualified by an area subobject
followed by one or more intra-area (i.e. TE domain) elements.
where
4) <AS-list> ::= <AS> [<AS-list>]
5) AS ::= <AS subobject> [<area-list>]
An AS list has one or more AS-level IROs, each AS-level IRO has one
AS subobject optionally followed by one or more area-level IRO which has
an Area subobject (in turn, optionally followed by network elements)
6) <area-list> ::= <area> [<area-list>]
7) area ::= [<IGP area subobject>] [<element-list>]
8) element-list ::= <element> [<element-list>]
9) element := <ipv4prefix> | <ipv6prefix> | <unnum_ifid> referring to
RFC5440 IRO subobjects.
And to cover AS inter-AS links
10) AS ::= <AS subobject> [ <area-list> | <element> ]
Example of Inter-AS IRO
=======================================
node1, node2, area2, AS100, AS200, area2, area3
<-----------><-----><------><----> <----------->
area area AS area list
<------------------><------><------------------>
area list AS AS
<-----------------><--------------------------->
IntraAS AS list
So the main points are: a) optimal encoding of domain sequence b) suggestion
for IGP area subobjects and c) formal (RBNF) specification of domain
sequences
within the IRO
Thanks for reading
Ramon
_______________________________________________
Pce mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/pce