As with most modeling work, there are several ways to extend the base models. Figuring out which one is right, and designing for extensibility is important no matter what the language is.

So, for the RIB, clearly it starts with a base RIB entry definition with the common stuff. The challenge with extensions is whether there are a number of orthogonal things we want, or a set of components that we want to be able to use.

To pick the hardest case, lets suppose that we use a RIB table LFB which uses a RIB datatype. If we can coordinate, the easiest thing is to assign an ID in the RIB structure for each substructure as you add it. One way or another, in order to have binary names for these, we have to achieve that. The subclassing mechanism supports this easily.

For alternatives, we do have unions. But I think that is a more narrow case and not as useful.

One can also define various components as freestanding LFB classes, and include aliases to reference them. That is even more flexible, and requires less coordination. But it is more opaque as a model. To do this, would would define in the base RIB entry a table of "extension points" which are aliases to an LFB class which inherits from a base LFB extension LFB. You can then reference any instances of any subclass of that. Arbitrarily flexible, but quite confusing.

Yours,
Joel

On 4/22/14, 11:19 AM, Jeffrey Haas wrote:
Joel,

On Tue, Apr 22, 2014 at 10:28:13AM -0400, Joel Halpern Direct wrote:
Since ForCES name space is per-lfb-class.  So that the collision
problem is mostly in the naming of the lfb classes.  (Some care is
needed in the naming of data types and such, but it is pretty easy
to do that in a colission avoiding fashion.  The harder problem,
which applies equally to NetConf and ForCES, is to know when you can
reuse an existing definition and when you need your own.)

I'm still working my way through my FORCES reading.  It would be very
helpful to see an example of this.

To offer an example from netconf that I commented upon at various WG
sessions, a RIB entry will tend to consist of things that are common across
implementations (prefix, nexthop[s], source protocol) and may be augmented
by either protocol-specific components (AS_PATH, communities for BGP; metric
for IGP) or vendor-specific ones (weight, administrative distance, etc.)

In YANG, this is mostly a matter of just decorating with additional XML
elements around the core objects.  (I'm over-generalizing.)

How does one do this in FORCES?

Note that the protocol on the wire does not use the names at all,
but only the assigned identifiers.  Which are registered precisely
to avoid collision.

One of my lesser concerns here is that code point registries provide another
pivot for coordinating development work, in or out of IETF.  Arguably, XML
token names have the same sort of issue to some extent, but tend not to be
"last code point +1".

-- Jeff

_______________________________________________
i2rs mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/i2rs


_______________________________________________
i2rs mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/i2rs

Reply via email to