[net2-wg] Proposal for dissemination structure and interfaces

Kyle Jamieson jamieson at MIT.EDU
Sat Dec 17 18:03:09 PST 2005


This looks like a very well thought-out design.  I have a few small 
questions as follows.

> interface DisseminationValue <t> {
>   command const t* get();
>   event void changed();
> }

How about simplifying this down to

interface DisseminationValue <t> {
  event void changed(const t*);
}

for simplicity?  Passing just the pointer isn't very costly.

> Declaring a dissemination value requires instantiating a generic
> component:
> 
> generic configuration DisseminatorC(typedef t, uint16_t key) {
>   provides interface DisseminationValue <t>;
>   provides interface DisseminationUpdate <t>;
> }

This is a nit-pick, but why not two configs, say DisseminatorC
and DisseminationC, which each provide interface DisseminationUpdate
and interface DisseminationValue, respectively?  I guess the
motivation behind this is clarity for users.  Or, is there perhaps a
situation where an app might use both DisseminationValue and
DisseminationUpdate? (I can't think of one..)

> For now, we limit <t> to be values that can fit in a single TinyOS
> packet. The implementation will check this at compile-time. The
> developer selects an integer key for each value that does not conflict
> with other values (like selecting AM identifiers). 

Question: is the reason for this ease of implementation?  Or is there
something in the interface that precludes large objects?  (I can't see
anything).

> globally consistent versioning. Therefore, a value's metadata is a
> combination of a version number and the originator's AM address. This
> means that AM address is used to break ties. In the previous exammple,
> node A would eventually install node B's value (since B > A).

Just to clarify, you're saying that a dissemination version number is
an (app version number, AM addr) pair?

Kyle



More information about the net2-wg mailing list