Subject: [i2rs] RIB Info/Data model questions: nexthop-id

From: "Jeffrey (Zhaohui) Zhang" <[email-masked]>
Date: Mon, 5 Oct 2015 13:58:32 +0000

Hi,

Both the RIB info and data model mentions nexthop-id, but neither specifies who manages/assigns the ID. Can the specs point that out?

It seems that it could be both ways - the IDs could be allocated by routers (servers) or could be allocated by clients. Different ID spaces would be used depending on who allocates the IDs.

Related to the above, a specific question on the data model:

  grouping nexthop {
    leaf nexthop-id {
      mandatory true;
      type uint32;
    }
    choice nexthop-type {
       ...
       case nexthop-protection {
        list nexthop-protection-list {
            key "nexthop-protection-id"; 
            leaf nexthop-protection-id {
              mandatory true;
              type uint32;
            }
           leaf nexthop-preference {
             ...
           }
           leaf nexthop {
             mandatory true;
             type nexthop-ref;
           }
        }
      }

Here a nexthop-protection is a list. Being a list it requires a key and we defined this uint32 nexthop-protection-id, which I assume the controller needs to assign and both the controller and the router needs to remember. The list entry has a member "nexthop" which is a nexthop-ref, which is a nexthop-id:

  typedef nexthop-ref {
    type leafref {
      path  "/i2rs-rib:routing-instance/i2rs-rib:rib-list" +
            "/i2rs-rib:route-list/i2rs-rib:nexthop/i2rs-rib:nexthop-id";
    }
  }

So - why can't we use the nexthop-id itself as the key?

Thanks.

Jeffrey

---

From: "Susan Hares" <[email-masked]>
Date: Wed, 7 Oct 2015 08:01:02 -0400

Jeffrey: 

to start this discussion going, I would like to provide you with the answer
that was given when the I2RS RIB Information Model was designed.

.         All I2RS RIB information is intended config (see
ietf-chairs-netmod-opstate-reqs-01 or ietf-openconfig-netmod-opstat for the
definition of intended config), 

.         nexthop-id is assigned by the I2RS client, and inserted into the
I2RS agent, 

.         the I2RS agent installs the I2RS RIB ephemeral state, and provides
back status (installed, not installed). 

nexthop id  allows for all types of next hops (chains, inet-v4, inet-v6,
mac-address, interface tunnels) to be indicated  with a single id that can
be directly accessed.  This allows these different types of next-hop to be
directly referenced with the nexthop-id. 

As to protection,  Let's base our discussion on I2RS RIB IM p. 19 (see
below) 

The protection id - identifies of preference, nexthop-id.  Preference ID
identifies the tuple.   You might have multiple tuples with a nexthop-id.  

Protection-id 1:  preference=10, nexthop-id=1

Protection-id 2:  preference = 2, nexthop-id=1

Protection-id 3:  preference=1, nexthop-id = 1

Protection-id 4: preference =1, nexthop-id=2 

I do not understand how the protection-id should be linked by nexthop. 

Sue 

======================

I2RS RIB IM p. 19 for your reference: 

----------------------------

<nexthop> ::= <NEXTHOP_PROTECTION> <1> <interface-primary>

                                   <2> <interface-backup>)

Derived as follows: 

<nexthop> ::= <nexthop-protection>
<nexthop> ::= <NEXTHOP_PROTECTION> (<NEXTHOP_PREFERENCE> <nexthop>
                      (<NEXTHOP_PREFERENCE> <nexthop>)...)
<nexthop> ::= <NEXTHOP_PROTECTION> (<NEXTHOP_PREFERENCE> <nexthop>
                      (<NEXTHOP_PREFERENCE> <nexthop>))
<nexthop> ::= <NEXTHOP_PROTECTION> ((<NEXTHOP_PREFERENCE> <nexthop-base>
                      (<NEXTHOP_PREFERENCE> <nexthop-base>))
<nexthop> ::= <NEXTHOP_PROTECTION> (<1> <interface-primary>
                      (<2> <interface-backup>))

Traffic can be load-balanced among multiple primary nexthops and a
single backup.  In such a case, the nexthop will look like:
 
   <nexthop> ::= <NEXTHOP_PROTECTION> (<1>
                 (<NEXTHOP_LOAD_BALANCE>
                  (<NEXTHOP_LB_WEIGHT> <nexthop-base>
                  (<NEXTHOP_LB_WEIGHT> <nexthop-base>) ...))
                   <2> <nexthop-base>)

-----Original Message-----
From: i2rs [mailto:[email-masked]] On Behalf Of Jeffrey (Zhaohui)
Zhang
Sent: Monday, October 05, 2015 9:59 AM
To: [email-masked]
Subject: [i2rs] RIB Info/Data model questions: nexthop-id

Hi,

Both the RIB info and data model mentions nexthop-id, but neither specifies
who manages/assigns the ID. Can the specs point that out?

It seems that it could be both ways - the IDs could be allocated by routers
(servers) or could be allocated by clients. Different ID spaces would be
used depending on who allocates the IDs.

  grouping nexthop {

    leaf nexthop-id {

      mandatory true;

      type uint32;

    }

    choice nexthop-type {

       ...

              mandatory true;

              type uint32;

            }

             ...

           }

           leaf nexthop {

             mandatory true;

             type nexthop-ref;

           }

        }

      }

Here a nexthop-protection is a list. Being a list it requires a key and we
defined this uint32 nexthop-protection-id, which I assume the controller
needs to assign and both the controller and the router needs to remember.
The list entry has a member "nexthop" which is a nexthop-ref, which is a
nexthop-id:

  typedef nexthop-ref {

    type leafref {

    }

  }

Thanks.

Jeffrey

_______________________________________________

i2rs mailing list

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

 <https://www.ietf.org/mailman/listinfo/i2rs>
https://www.ietf.org/mailman/listinfo/i2rs

---

From: "Jeffrey (Zhaohui) Zhang" <[email-masked]>
Date: Wed, 7 Oct 2015 12:50:43 +0000

Hi Sue,

Before I posted the questions, I searched "nexthop-id" in the IM draft and did not find anything definition; then this morning I found the following:

   Nexthops can be identified by an identifier to create a level of
   indirection.  The identifier is set by the RIB manager and returned
   to the external entity on request.

Is the above "identifier" the same as "nexthop-id"? If yes, then it conflicts with your text below?

Jeffrey

From: Susan Hares [mailto:[email-masked]]
Sent: Wednesday, October 07, 2015 8:01 AM
To: Jeffrey (Zhaohui) Zhang <[email-masked]>; [email-masked]
Subject: RE: [i2rs] RIB Info/Data model questions: nexthop-id

Jeffrey:

to start this discussion going, I would like to provide you with the answer that was given when the I2RS RIB Information Model was designed.

*        All I2RS RIB information is intended config (see ietf-chairs-netmod-opstate-reqs-01 or ietf-openconfig-netmod-opstat for the definition of intended config),

*        nexthop-id is assigned by the I2RS client, and inserted into the I2RS agent,

*        the I2RS agent installs the I2RS RIB ephemeral state, and provides back status (installed, not installed).

nexthop id  allows for all types of next hops (chains, inet-v4, inet-v6, mac-address, interface tunnels) to be indicated  with a single id that can be directly accessed.  This allows these different types of next-hop to be directly referenced with the nexthop-id.

As to protection,  Let's base our discussion on I2RS RIB IM p. 19 (see below)

The protection id - identifies of preference, nexthop-id.  Preference ID identifies the tuple.   You might have multiple tuples with a nexthop-id.

Sue

======================

Derived as follows:

                 (<NEXTHOP_LOAD_BALANCE>

                   <2> <nexthop-base>)

-----Original Message-----
From: i2rs [mailto:[email-masked]] On Behalf Of Jeffrey (Zhaohui) Zhang
Sent: Monday, October 05, 2015 9:59 AM
To: [email-masked]<mailto:[email-masked]>
Subject: [i2rs] RIB Info/Data model questions: nexthop-id

Hi,

  grouping nexthop {

    leaf nexthop-id {

      mandatory true;

      type uint32;

    }

    choice nexthop-type {

       ...

              mandatory true;

              type uint32;

            }

             ...

           }

           leaf nexthop {

             mandatory true;

             type nexthop-ref;

           }

        }

      }

  typedef nexthop-ref {

    type leafref {

    }

  }

Thanks.

Jeffrey

i2rs mailing list

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

---

From: "Jeffrey (Zhaohui) Zhang" <[email-masked]>
Date: Wed, 7 Oct 2015 19:54:55 +0000

Sue,

> Protection-id 4: preference =1, nexthop-id=2

Why would we have the first three tuples with the same nexthop-id?

Assuming that each tuple has a different nexthop-id. For nexthop-lb, nexthop-protection, and nexthop-replicate, the order of each tuple would not matter (ordered-by-system). Why bother using an additional protection/lb/replicate-id as the key?

Using a client-assigned ID as the protection/lb/replicate-id means a router will have to store it, and be able find the tuple given that ID. I'd rather using the nexthop-id for the purpose?

Jeffrey

From: Jeffrey (Zhaohui) Zhang
Sent: Wednesday, October 07, 2015 8:51 AM
To: 'Susan Hares' <[email-masked]>; [email-masked]
Subject: RE: [i2rs] RIB Info/Data model questions: nexthop-id

Hi Sue,

Jeffrey

From: Susan Hares [mailto:[email-masked]]
Sent: Wednesday, October 07, 2015 8:01 AM
To: Jeffrey (Zhaohui) Zhang <[email-masked]<mailto:[email-masked]>>; [email-masked]<mailto:[email-masked]>
Subject: RE: [i2rs] RIB Info/Data model questions: nexthop-id

Jeffrey:

Sue

======================

Derived as follows:

                 (<NEXTHOP_LOAD_BALANCE>

                   <2> <nexthop-base>)

-----Original Message-----
From: i2rs [mailto:[email-masked]] On Behalf Of Jeffrey (Zhaohui) Zhang
Sent: Monday, October 05, 2015 9:59 AM
To: [email-masked]<mailto:[email-masked]>
Subject: [i2rs] RIB Info/Data model questions: nexthop-id

Hi,

  grouping nexthop {

    leaf nexthop-id {

      mandatory true;

      type uint32;

    }

    choice nexthop-type {

       ...

              mandatory true;

              type uint32;

            }

             ...

           }

           leaf nexthop {

             mandatory true;

             type nexthop-ref;

           }

        }

      }

  typedef nexthop-ref {

    type leafref {

    }

  }

Thanks.

Jeffrey

i2rs mailing list

---

From: Nitin Bahadur <[email-masked]>
Date: Wed, 07 Oct 2015 17:04:42 -0700

The IM draft was written with the intent as in the draft. In other words,
the <nexthop-id> space is private to the I2RS agent. The agent allocates
nexthop-id and returns that to the Client. The client can use that as a
convenience. The client itself can maintain a global ID space across all
agents if it desires. But that is outside the scope of the IM draft.

> Is the above ³identifier² the same as ³nexthop-id²? If yes, then it conflicts
with your text below?

From:  Susan Hares <[email-masked]>
Date:  Wednesday, October 7, 2015 at 5:01 AM
To:  "'Jeffrey (Zhaohui) Zhang'" <[email-masked]>, <[email-masked]>
Subject:  Re: [i2rs] RIB Info/Data model questions: nexthop-id

Jeffrey: 

·         All I2RS RIB information is intended config (see
ietf-chairs-netmod-opstate-reqs-01 or ietf-openconfig-netmod-opstat for the
definition of intended config),
·         nexthop-id is assigned by the I2RS client, and inserted into the
I2RS agent, 
·         the I2RS agent installs the I2RS RIB ephemeral state, and provides
back status (installed, not installed).