Subject: [spring] Conflict resolution - a plea for simplicity

From: Stewart Bryant <[email-masked]>
Date: Fri, 2 Dec 2016 17:54:50 +0000

There was some discussion on the conflict resolution draft at IETF97
that got cut off with a request to discuss on the list.

As I understand the situation, we have a misconfiguration in the network,
and we are being encouraged to take an essentially aggressive strategy
of picking one of the configurations and assuming that must be right
in order to continue forwarding traffic. It seems to me that we are
tossing a coin here and whilst we could be sending traffic the
right way we could also be sending it the wrong way with bad
consequences in terms of misdelivery or inducing congestion.

The alternative strategy is to note the conflict and not believe either
router. This more conservative strategy seems the better approach for
a number of reasons:

1) Traffic will not be misdelivered, or use unintended parts of the network.

2) Traffic,  was being routed via SR rather than simple shortest path
for a reason and so you should not try to guess the operators decision,
you should rigidly execute it.

3) It seems to me that the aggressive approach fails 7 of Ross Callons
Twelve truths (RFC1925). These were published on 1/April, but the real
joke is that they ARE useful truths, so forget about the date. 3,
4, *5*, *6*, 8, probably 10, certainly 12.

4) Finally there is the protocol 101 rule stating that the exception
path MUST be simple, because it is rarely executed and thus often
hosts most of the bugs.

Point 4 is particularly important. What we have in the draft is
complex and difficult to test on a live network, and yet it is
only there to take action when someone makes a mistake.
Exception code like this is usually the Cinderella in the
system, rushed in at the end of development and hardly tested.

It is usually by far the best approach to assert that the
misconfiguration should never happen, have a very simple test
do detect it and do something very simple by effective when
it is detected. Given that routing only works because
routers tell the truth, and clearly one or both of the routers
has breached that trust, the best approach is to trust neither.

What is unclear to me is what to do with the traffic, i.e. do
you degrade it to the base path, or do you drop it. I would think
that the latter is the more conservative, because presumably it
was put in the SR path for a reason, and so SHOULD be carried on
an SR path.

- Stewart

---

From: "Stefano Previdi (sprevidi)" <[email-masked]>
Date: Sun, 4 Dec 2016 15:53:11 +0000

Stewart,

thanks for the feedback.

Just to give you an update, the work currently done in the context of the conflict-resolution draft aimed to, indeed, limit/reduce the impact of a misconfiguration in presence of conflicting prefix/sid mappings.

It is based on the concept that there’s no such “bad” or “wrong” prefix/sid mapping as long as all nodes use the same.

However, while we came up with a very efficient scheme, complexity is also part of the picture from an implementation, deployment, troubleshooting perspective. Not to mention the fun we’re going to have in doing interoperability tests.

So, the authors have raised this concern a few times but apparently the only feedback we got (so far) from the WG was more oriented on the efficiency of the conflict-resolution algorithm, regardless the simplicity (which is fine by me as long as it is well understood).

Les Ginsberg is about to propose a simplification of the algorithm in order to (re)introduce the simplicity of the original proposal (or at least try to improve simplicity in the current scheme).

Thanks.
s.

> On Dec 2, 2016, at 6:54 PM, Stewart Bryant <[email-masked]> wrote:
>

---

From: Stewart Bryant <[email-masked]>
Date: Sun, 4 Dec 2016 23:19:00 +0000

> It is based on the concept that there’s no such “bad” or “wrong” prefix/sid mapping as long as all nodes use the same.
This philosophy always seems incorrect to me.

If the operator planed for some traffic to go via an SR route, then must 
have done it for a reason. That reason may have been to protect a 
property of the service, or to protect other traffic from that service. 
Either way, if it is intended to go via an SR path, it really should go 
via that path and not via some other path that the network is guessing at.

> However, while we came up with a very efficient scheme, complexity is also part of the picture from an implementation, deployment, troubleshooting perspective. Not to mention the fun we’re going to…
Right, so why not just do something really simple.

> Les Ginsberg is about to propose a simplification of the algorithm in order to (re)introduce the simplicity of the original proposal (or at least try to improve simplicity in the current scheme).
OK, look forward to seeing it.

- S

---

From: "Les Ginsberg (ginsberg)" <[email-masked]>
Date: Sun, 4 Dec 2016 23:46:09 +0000

Stewart -

I also am happy to get more feedback.
Inline.

> -----Original Message-----
> From: Stewart Bryant [mailto:[email-masked]]
> Sent: Sunday, December 04, 2016 3:19 PM
> To: Stefano Previdi (sprevidi)
> Cc: [email-masked]; [email-masked]
> Subject: Re: Conflict resolution - a plea for simplicity
> 
> 
> 
> > Just to give you an update, the work currently done in the context of the
> conflict-resolution draft aimed to, indeed, limit/reduce the impact of a
> misconfiguration in presence of conflicting prefix/sid mappings.
> >
> > It is based on the concept that there’s no such “bad” or “wrong” prefix/sid
> mapping as long as all nodes use the same.
> If the operator planed for some traffic to go via an SR route, then must have
> done it for a reason. That reason may have been to protect a property of the
> service, or to protect other traffic from that service.
> Either way, if it is intended to go via an SR path, it really should go via that
> path and not via some other path that the network is guessing at.
> 
[Les:] The issue here isn't to go via an SR path or not. It is how to decide on what MPLS label to use when there is a conflict i.e. either the same prefix has been advertised with multiple SIDs or the same SID has been advertised for multiple prefixes. Clearly if not all nodes in the network make the same choice we cannot guarantee that forwarding will work correctly.

What the draft authors have advocated for from the beginning is simplicity. Since there is no way to know which of the conflicting advertisements is the intended one, the simplest thing to do is not use any of them. This likely means that traffic to all of the affected destinations will be dropped. But as anyone experienced in deployments knows, there are many ways to misconfigure a network - and it isn’t possible to guarantee traffic delivery in the face of misconfigurations. What is essential is to detect and report the misconfigurations so that corrective action can be taken. 

In the course of the last few months we received feedback that pushed in the direction of trying to maximize delivery of traffic by trying to minimize the advertisements which are ignored when conflicts are detected. It is, of course, still not possible to know whether the choice made is correct or will even result in maximizing traffic delivery. The winning entry might turn out to be for prefixes which do not cover any actual traffic. But the most significant aspect of trying to maximize the number of mapping entries that continue to be used in the face of conflicting configuration is the added complexity in implementing the agreed upon preference rule in an interoperable way. In this regard all the points you have made are - IMO - quite valid. And we therefore will be asking the WG to take another look at a simpler proposal.

   Les

> 
> >
> > However, while we came up with a very efficient scheme, complexity is
> also part of the picture from an implementation, deployment,
> troubleshooting perspective. Not to mention the fun we’re going to have in
> doing interoperability tests.
> > So, the authors have raised this concern a few times but apparently the
> only feedback we got (so far) from the WG was more oriented on the
> efficiency of the conflict-resolution algorithm, regardless the simplicity
> (which is fine by me as long as it is well understood).
> >
> > Les Ginsberg is about to propose a simplification of the algorithm in order
> to (re)introduce the simplicity of the original proposal (or at least try to
> improve simplicity in the current scheme).
> >> As I understand the situation, we have a misconfiguration in the
> >> network, and we are being encouraged to take an essentially
> >> aggressive strategy of picking one of the configurations and assuming
> >> that must be right in order to continue forwarding traffic. It seems
> >> to me that we are tossing a coin here and whilst we could be sending
> >> traffic the right way we could also be sending it the wrong way with
> >> bad consequences in terms of misdelivery or inducing congestion.
> >>
> >> The alternative strategy is to note the conflict and not believe
> >> either router. This more conservative strategy seems the better
> >> approach for a number of reasons:
> >>
> >> for a reason and so you should not try to guess the operators
> >> decision, you should rigidly execute it.
> >>
> >> 3) It seems to me that the aggressive approach fails 7 of Ross
> >> Callons Twelve truths (RFC1925). These were published on 1/April, but
> >> the real joke is that they ARE useful truths, so forget about the
> >> date. 3, 4, *5*, *6*, 8, probably 10, certainly 12.
> >>
> >> complex and difficult to test on a live network, and yet it is only
> >> there to take action when someone makes a mistake.
> >> Exception code like this is usually the Cinderella in the system,
> >> rushed in at the end of development and hardly tested.
> >>
> >> misconfiguration should never happen, have a very simple test do
> >> detect it and do something very simple by effective when it is
> >> detected. Given that routing only works because routers tell the
> >> truth, and clearly one or both of the routers has breached that
> >> trust, the best approach is to trust neither.
> >>
> >> What is unclear to me is what to do with the traffic, i.e. do you
> >> degrade it to the base path, or do you drop it. I would think that
> >> the latter is the more conservative, because presumably it was put in
> >> the SR path for a reason, and so SHOULD be carried on an SR path.
> >>
> >> - Stewart
> >>

---

From: "Stefano Previdi (sprevidi)" <[email-masked]>
Date: Mon, 5 Dec 2016 08:13:41 +0000

> On Dec 5, 2016, at 12:19 AM, Stewart Bryant <[email-masked]> wrote:
> 
> 
> 
> If the operator planed for some traffic to go via an SR route, then must have done it for a reason. That reason may have been to protect a property of the service, or to protect other traffic from that service. Either way, if it is intended to go via an SR path, it really should go via that path and not via some other path that the network is guessing at.

an “SR route” is nothing else than a route for which you have a label.

the value this label (or index) has is mostly irrelevant as long as all nodes consistently use the same.

This is how SR works. Please refer to the long email thread on this matter.

s.

---

From: <[email-masked]>
Date: Fri, 9 Dec 2016 09:16:53 +0000

Hi Stewart,

Thanks for your comments.
As an individual contributor, please find some comments inlined. [Bruno]

> From: spring [mailto:[email-masked]] On Behalf Of Stewart Bryant  > Sent: Friday, December 02, 2016 6:55 PM
> 

[Bruno]
You are correct that the draft handles a case of network/node misconfiguration, and that we are mostly tossing a coin to select one of the conflicting entries.
However I'm not seeing cases that would lead to misdelivery, misrouting or induced congestion:
- we are facing a case were e.g. one SID have been affected to the two different Segment/IP prefix/FEC.
- Those SID are just a number, locally allocated by the Autonomous System. Nobody cares much whether a given FEC uses the index 53 or 42. However, what we do need is that all nodes use the same value for a given FEC. Hence the needs for a determinist rule. This is the purpose of this draft.

If you see such misrouting, could you please elaborate on this? e.g. with an example.

 > 1) Traffic will not be misdelivered, or use unintended parts of the network.
 
[Bruno] IMO that's the case for both strategy. cf 1rst comment.
 
 > you should rigidly execute it.
 
[Bruno] IMO that's the case for both strategy. cf 1rst comment.
 
 > 4, *5*, *6*, 8, probably 10, certainly 12.
 
[Bruno] They may be useful truths, but they are a bit too general to me. Not sure they will really help when discussing trade-off. 
One may add the robustness principle (RFC 3117, 761), especially since we are not even discussing a protocol error.
 
 > path MUST be simple, because it is rarely executed and thus often
 
[Bruno] good point. Thanks.
 
 > misconfiguration should never happen,

[Bruno] In an ideal world, there would be no configuration error and no bug. But unfortunately, I'm not living in this world, so this is not a valid hypothesis for me. Hence the need for this document, so that a consistent behavior is picked.
(Eventually, in a world with no human (involved), although even God seems to play dice with the universe :-) )

> have a very simple test
 
[Bruno] It's not about truth, and we don't care whether a given segment is given a value/index of N or M. In case of conflict, we have a set of values advertised, and we need to pick one, deterministically, using a preference or tie-break mechanism. 
That does not seem very far, to me, from the use case described in our draft https://tools.ietf.org/html/draft-bryant-rtgwg-param-sync-00#section-5 where different nodes advertise different value in the IGP and all nodes need to select the same one, in a distributed way.
 
 > was put in the SR path for a reason, and so SHOULD be carried on
 
[Bruno] traffic and path is not affected, whether value 42 or 53 is selected for a given segment. What we do need is consistency across all nodes.

-- Bruno

 > - Stewart
 > 
 > _______________________________________________
 > spring mailing list
 > [email-masked]
 > https://www.ietf.org/mailman/listinfo/spring

_________________________________________________________________________________________________________________________

Ce message et ses pieces jointes peuvent contenir des informations confidentielles ou privilegiees et ne doivent donc
pas etre diffuses, exploites ou copies sans autorisation. Si vous avez recu ce message par erreur, veuillez le signaler
a l'expediteur et le detruire ainsi que les pieces jointes. Les messages electroniques etant susceptibles d'alteration,
Orange decline toute responsabilite si ce message a ete altere, deforme ou falsifie. Merci.

This message and its attachments may contain confidential or privileged information that may be protected by law;
they should not be distributed, used or copied without authorisation.
If you have received this email in error, please notify the sender and delete this message and its attachments.
As emails may be altered, Orange is not liable for messages that have been modified, changed or falsified.
Thank you.