[Nml-wg] Dealing with unknown relations

Jeroen van der Ham vdham at uva.nl
Fri Aug 17 10:37:27 EDT 2012


Hi,

On 17 Aug 2012, at 14:57, Freek Dijkstra <freek.dijkstra at sara.nl> wrote:
> I like NML to be extensible. For example, if some NML publisher likes to
> add information that benefits monitoring or provisioning, that should be
> possible.
> 
> A NML receiver should silently ignore this added information. However,
> we also don't want a receiver to just accept anything. If there is some
> obvious error in the NML, the receiver should still just reply with an
> error message.

I am not entirely sure that we can reasonably make this distinction. And even if we can, without bloating the current schema into probably twice its current size.

> Imagine a receiver that receives some NML line containing a relation.
> 
> 1. The relation is well-defined.
>   e.g. Node N --hasService--> SwitchingService S
> 2. The relation is unknown
>   e.g. Node N --hasDynamicService--> SwitchingService S
> 3. The relation is clearly invalid
>   e.g. Node N --hasService--> Node Y
> 4. The relation is known, but the meaning is undefined
>   e.g. Port P --hasService--> LabelService L
> 
> Should we make a distinction between 3 and 4?
> 
> For the purpose of extensibility, I would argue that it is useful to
> make this distinction.
> 
> In fact, the current document makes this distinction. To quote the text
> on "hasService":
> 
>> hasService relates a Network Object to a Service. This schema only
>> defines the meaning of:
>> • Port to AdaptationService, relating one server-layer Port to an
>>  adaptation function
>> • Port to DeadaptationService, relating one server-layer Port to a
>>  deadaptation function
>> • Node or Topology to SwitchingService, describing a switching
>>  capability of that Node or Topology.
> 
> So in this case "Port P --hasService--> LabelService L" would be
> syntactical VALID NML but with UNDEFINED meaning. "Node N
> --hasService--> Node Y" would simply be syntactically INVALID NML.

I am not sure how you make that distinction based on the description given above. For both Port and Node there is a possible "hasService" relation defined, and neither "LabelService" nor "Node" are defined as possible ranges of the hasService relation.

Just the fact that "LabelService" is a new kind of object should not make it different.

> Regardless if we think this distinction is useful, we should define how
> a NML receiver should handle the information. I can think of four
> situation what it should do with it:
> a) reject the line and reply with an error message
> b) accept the line and process it (for an known relation)
> c) silently drop the line
> d) store the line, even though it is unknown
> 
> I'm not sure if (d) is ever a good idea. It means that a receiver will
> accept a Topology from T, and store all, including unknown statements,
> and if asked by someone else, it would faithfully replicate the original
> topology, including all unknown statements.

D is a very well established way of handling things which is also applied to OSPFs extension fields for example. It is an excellent way of easing a new kind of relation into the system without having to rely on a flag-day where everyone switches over.

Silently dropping is a really bad idea, which makes diagnostics a nightmare.

I am very much in favor of always accepting and storing.

Jeroen.


More information about the nml-wg mailing list