Subject: [Rift] not-a-ztp-offer flag

From: Bruno Rijsman <[email-masked]>
Date: Tue, 14 Aug 2018 19:15:58 +0000

Hi Tony,

Consider the following topology (2n_l0_l1.yaml in my repo)

#  +-----------+
#  | node1     |
#  | (level 1) |
#  +-----------+
#        | if1
#        |
#        | if1
#  +-----------+
#  | node2     |
#  | (level 0) |
#  +-----------+

Note that all levels are hard-configured (ZTP is not used to discover levels).

In this topology:

1) What is the correct value for the not_a_ztp_offer flag in LIE messages sent from node1 to node2, and why?

2) Same question for LIE messages sent from node2 to node1.

I am asking because I am seeing an unexpected difference in behavior in my Interop testing.

— Bruno

---

From: Tony Przygienda <[email-masked]>
Date: Tue, 14 Aug 2018 14:14:13 -0700

0 never constitues an offer, hence it's irrelevant ...

If 0 is derived from 1, then the 0 sends a true, if it's based on config
flag, then false (since it did NOT derive from 1)

not_a_ztp_offer is a strict poisoned split horizon ...

-- tony

---

From: Antoni Przygienda <[email-masked]>
Date: Wed, 15 Aug 2018 05:42:12 +0000

Thought about it, -03 will include

<t hangText="Valid Offered Level (VOL):">A neighbor's level
                    received
                    on a valid LIE (i.e. passing all checks for adjacency
                    formation while disregarding all clauses involving level
                    values)
                   persisting for the duration of the holdtime interval on the
                   LIE. Observe that offers from nodes offering level value
                   of 0 do not constitute VOLs (since no valid DERIVED_LEVEL
                   can be obtained from those and consequently `not_a_ztp_offer`
                   MUST be ignored). Offers from LIEs with
                   `not_a_ztp_offer` being true are not VOLs either. If a node
                   maintains parallel adjacencies to the neighbor, VOL on each
                   adjacency is considered as equivalent, i.e. the newest VOL
                   from any such adjacency updates the VOL received from the
                   same node.
                </t>

--- tony

Thus spake <[email-masked]<mailto:[email-masked]>>:

If 0 is derived from 1, then the 0 sends a true, if it's based on config flag, then false (since it did NOT derive from 1)

-- tony

On Tue, Aug 14, 2018 at 12:15 PM Bruno Rijsman <[email-masked]<mailto:[email-masked]>> wrote:
Hi Tony,

#  +-----------+
#  | node1     |
#  | (level 1) |
#  +-----------+
#        | if1
#        |
#        | if1
#  +-----------+
#  | node2     |
#  | (level 0) |
#  +-----------+

In this topology:

— Bruno

---

From: Tony Przygienda <[email-masked]>
Date: Wed, 15 Aug 2018 12:41:48 -0700

Thought about the semantics of not_an_offer more and as the word says, I
would expect a Good Implementation (TM ;-) to set that to true if

* it derived its level from the neighbor or
* it advertises its level as 0 in the LIE or
* it advertises its level as undefined (i.e. omits level in `PacketHeader`)

but the normative is in the definition of VOL so it's on the receiver to
disregard the not_an_offer and interpret 0/undefined as not VOL every time
...

Prrrrecise enough ;-) ?

--- tony

On Tue, Aug 14, 2018 at 10:42 PM Antoni Przygienda <[email-masked]> wrote:

>                    LIE. *Observe that offers from nodes offering level
> value*
>
> *                   of 0 do not constitute VOLs (since no valid
> DERIVED_LEVEL*
>
> *                   can be obtained from those and consequently
> `not_a_ztp_offer`*
>
> *                   MUST be ignored). *Offers from LIEs with
>
> Thus spake <[email-masked]>:
>
>
>