[Nml-wg] About modelisation of the network description

Freek Dijkstra fdijkstr at science.uva.nl
Thu Mar 6 02:12:43 CST 2008


Aaron,

That's a clear argument!
Two comments.



Aaron Brown wrote:

> A network in its most reasonable XML description looks like this:
> 
> <network name="internet2">
>    <node name="host1">
>       <port name="eth0" />
>    </node>
>    <node name="host2">
>       <port name="eth0" />
>    </node>
>    <node name="host3">
>       <port name="eth0" />
>    </node>
> </network>

I strongly oppose the above description. It mixes naming and addressing, 
which is both inflexible and verbose. The following is so much better:

> <node name="router1">
>    <port name="eth0" />
>    <port name="eth1" />
>    <port name="eth2" />
> </node>

The reason: the first description describes an object by its properties, 
rather than its name. (It mixes naming and addressing). Doing so is bad. 
Beside that the description is longer, it is also less flexible. For 
example, what if host2 suddenly goes down, and the interface host2_eth0 
is automatically flipped to host3_eth2. You probably don't want to let 
your client know all these implementation details, but simply like to 
refer to the same interface. So: we should name interfaces, 
independently of the host they are in. The following description is 
better (modification of your description):

> <network name="internet2">
>    <port name="host1_eth0" />
>    <port name="host2_eth0" />
>    <port name="host3_eth2" />
> 
>    <comprised-of>
>        <node name="host1">
>           <port name="host1_eth0" />
>        </node>
>        <node name="host2">
>           <port name="host2_eth0" />
>           <port name="host2_eth3" />
>        </node>
>        <node name="host3">
>           <port name="host3_eth2" />
>           <port name="host3_eth4" />
>        </node>
>        <link name="link2-3">
>           <port name="host2_eth3" />
>           <port name="host3_eth4" />
>        </link>
>    </comprised-of>
> </network>

Note that I did name the interfaces (ports) generically. In your 
previous example, there was no way of knowing that

 >    <port name="host1_eth0" />

was the same as

 >        <node name="host1">
 >           <port name="eth0" />
 >        </node>

By simply using the same name, I now can relate them. I also included

In short: name MUST NOT be context-sensitive. I think it is bad if I can 
only describe an interface as "eth0 of host3 in network 8". I much 
rather say interface "intf639" and only if required tell that it is in 
"host3" and that "host3" is in "network8".

Of course, this requires that names are globally unique. I prefer to use 
opaque names (any string, without syntax requirements), as long as it is 
unique. URIs come to mind.



Second, totally different:

> Network seems to be 'domain inside of domain'. If I can subdivide my 
> domain into 4 large networks, why can't i subdivide my networks into 
> smaller networks? Relatedly, why can't a node exist in two networks at 
> once? Example: layer4 overlay network or a VPN.

This is an important one. So far, I said that I prefer that network 
elements are only part of one network. That is by all means a 
convention. It is useful because it makes it easy for software to 
contact the domain, given a certain network element. If the network 
element can be in more domain, the software does not know who to contact 
at first.

Of course, you can subdivide. However, my preference at the moment is to 
use different views. For example, one layer4 overlay view and a real 
topology view.

This is not a strong preference though. It is just that I have not heard 
enough use cases to make the relations between network element, network, 
view and domain more complex than it already is in this discussion.

I let it rest for a couple of days and think about your arguments.

Regards,
Freek


More information about the nml-wg mailing list