Subject: [netmod] routing-cfg: interfaces and routing instances

From: Ladislav Lhotka <[email-masked]>
Date: Fri, 04 Sep 2015 10:31:44 +0200

Hi,

one open issue regarding the routing-cfg document (where even the
co-authors cannot reach agreement) is the assignment of interfaces to
routing instances, see slides 7 and 8 in

https://www.ietf.org/proceedings/93/slides/slides-93-netmod-6.pdf

The discussion is only about configuration, in state data we already
have links in both directions: interface -> routing instance and routing
instance -> interfaces.

For configuring the assignment, there are essentially two options:

1. A leaf-list of leafref type under rt:routing-instance containing
   references to interfaces assigned to the routing instance (this is
   the current solution in -19).

2. A leaf of leafref type under if:interface containing a reference to
   the routing instance to which the interface is assigned.

I think the advantage of #1 is that it helps enforce two important
constraints:

A. Routing protocols, route filters etc. of a routing instance should
   refer only to interfaces assigned to the routing instance.

B. Interfaces assigned to a routing instance should be L3.

Constraint A can be represented via an XPath expression in both variants
#1 and #2 but the point is that interfaces need to be referenced many
times from a routing instance, e.g. every routing protocol instance
typically has some interface configuration. It is then IMO more
effective and cleaner to have just one set of references from
rt:routing-instance to if:interface where constraint A is stated and
validated. Other references from within the routing instance to
interfaces would use the assigned interfaces under rt:routing-instance
and constraint A is then trivially satisfied through containment
hierarchy. With option #2 it would be necessary to add a corresponding
"must" statement to every leafref pointing to if:interface.

Constraint B is difficult to validate formally because layering
information is not explicitly present in the flat if:interface list. But
even then I believe it is cleaner to have a list of all interfaces
assigned to a routing instance in one place rather than having this
information scattered thoughout if:interface - it is easier to check
that all these interfaces are in fact L3.

Acee advocates option #2 because it is more logical to assign IP address
space (which is done under if:interface) in conjuction with assigning
the interface to a routing instance.

Finally, let me note that either option is just a matter of internal
data model organisation in that user interfaces can use the other
alternative if their designers wish to do so - the mapping is actually
quite easy.

So please indicate your preference and add more arguments in favour of
either option. We would like to have this issue finally resolved.

Thanks, Lada

--

Ladislav Lhotka, CZ.NIC Labs
PGP Key ID: E74E8C0C

---

From: Juergen Schoenwaelder <[email-masked]>
Date: Fri, 4 Sep 2015 10:44:42 +0200

> either option. We would like to have this issue finally resolved.

I have no opinion what the "best" answer is but one dimension to
consider might be access control. Does one of the two options lead to
a simpler way to partition access rights for meaningful use cases?

/js

-- 
Juergen Schoenwaelder           Jacobs University Bremen gGmbH
Phone: +49 421 200 3587         Campus Ring 1 | 28759 Bremen | Germany
Fax:   +49 421 200 3103         <http://www.jacobs-university.de/>