[Roll] Review of rpl-03
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Roll] Review of rpl-03



Roll mailing list,

I recently started monitoring this mailing list as well as catching up on
RPL, specifically draft-ietf-roll-rpl-03. Through this mail, I would like to
offer my "first time reader" feedback.

I am aware of various mail threads addressing some of the below topics. I
have tried not to repeat comments/questions made by others, and it is
generally not my intention to reopen old debates. However, being new to this
list, I am less than 100% in sync with all previous discussions, and thus
run the risk of repeating old comments. In these cases, please feel free to
refer me to the "FAQ" :)

BTW, my name is Anders Jagd, and I work for Eka Systems.

Here goes:

Section 1.1

319  each instantiation of the protocol to be optimized in terms of
320  required code space.  It must be noted that RPL is not restricted

  Suggest change to "required code space and other limited computation
resources"

Section 2

407  each DAG that a node is a member of, the node will maintain a
408  set of DAG siblings.  If a node is a member of multiple DAGs

  Suggest change to "may maintain a set of DAG siblings"

Section 3.3.1

  Should RPL discourage "soft greediness", where a node initially joining a
DAG chooses to enter at a higher rank than it could have done ?

Section 3.3.4

1263  has subsequently cleaned up the state.  This loop happens when a no-
1264  DAO was missed till a heartbeat cleans up all states.  The DAO loop

  General comment: Document includes some "forward references".
  In this example "no-DAO" has not been defined previously.

Section 5.1.1

1545  Length:  8-bit unsigned integer set to 4 when there is no suboption.
1546  The length of the option (including the type and length fields

  "4" does not match Figure 1 (Figure one has 4.5 "8 octet units")

1662  The following values MUST NOT change during the propagation of RA-DIO
1663  messages outwards along the DAG: Type, Length, G, DAGPreference,
1664  DAGDelay and DAGID.  All other fields of the RA-DIO message are
1665  updated at each hop of the propagation.
 
  List not complete - what about D, A, Sequence number, DIOIntDouble,
DIOIntMin ?

Section 5.1.1 (general)

  - Do we need 8 bit for sequence number ?

  - Do we need 8 bit for DAGPreference ?

  - Is one byte enough for DAGRank ?

  - Do we need BootTimeRandom, NodePref at all, and if so, do they need to
be so big ? 

I understand the collision scenario with associated "risk window", but do we
need this tie-breaker, as opposed to simply discarding everything within
risk window regardless of any tie-breaker ? If the answer is "yes, we need
it", then should we at least consider making it less costly (less bits ?)

  - Can we come up with less "expensive" PathDigest ? 

Meaning less than 32 bit, and something less computationally intensive than
CRC. Also, do we need PathDigest at all, given that we have the "D" bit to
trigger DA ?

  - DAGRank: Is rank of root "typically 1" or "always 1" ? 

Document not quite consistent. Since a root could "exaggerate" it's rank, I
assume "typically" is correct, but 5.3.1 seems to indicate otherwise:

2040  1.   A node that does not have any DAG parents in a DAG is the root
2041       of its own floating DAG.  It's rank is 1.  A node will end up in

Section 5.1.1.1.5

1803  The Destination Prefix suboption has an alignment requirement of
1804  4n+1.  Its format is as follows:

  "4n+1" is a bit unclear to me.
      
Section 5.2.2

1913  it is expected to produce a different and unique DAGID for each of
1914  the multiple DAGs.

  Suggest change: "expected to" to be replaced with "MUST"

Section 5.3.1

2099  rank, or whatever metrics the LLN cares to use.  A node may jump
 
  Suggest change: "whatever metric the LLN cares to use" replaced by
"metrics defined by the OCP"

Section 5.3.2.2

2227  If the other DAG is now empty of candidate parents, then
2228  directly follow SRC into the new DAG by adding it as a DAG

  Could the node have another choice (jumping to a parent in a third DAG) ?

2252  described in Section 5.3.  When a node adds another node to its set
2253  of candidate parents, the node becomes attached to the DAG through
2254  the parent node.

  Not exactly - the new node simply becomes another "candidate parent"

Section 5.3.3

2302  overhead and saving energy consumption (which is of utmost
2303  importance for battery-operated nodes).

  Suggest to delete "(which is of .....)"
  (Not to say it is not true, but may not belong in section 5)

2344  (2^DIOIntervalMin)ms.  The default value is
2345  DEFAULT_DIO_INTERVAL_MIN.

  Suggest to clarify that the default at this point is simply given a
"name". This (I assume) to facilitate later reference to this when actual
values are discussed.

Section 5.3.4.1.  Resetting the Trickle Timer

  It wasn't obvious to me at first that this is all done in order to limit
the amount of localized traffic/congestion due to broadcasts from parent
nodes (i.e. "make children be quiet if their parents are talking a lot", if
I understand it correctly). May want to clarify for sake of readability.

Section 5.7

2490  preferred DAG parent and its rank.  At that time any
2491  remaining DAG parents of greater rank than this node must

  Shouldn't it be "greater than or equal rank" ?

Section 5.7.1

2534  A new DAG is discovered upon receiving a RA message with or without a
2535  DIO.  The node joins the DAG by selecting the source of the RA

  It took me a while to realize this must be coming from a "non RPL" node.
  Suggest to clarify for readability (incl. the whole "rank 0" concept).

2553  The duration of the DAG Hop timer depends on the DAG Delay of the new
2554  DAG and on the rank of candidate parent that triggers it: (candidates
2555  rank + random) * candidate's DAG_delay (where 0 <= random < 1).  It
2556  is randomized in order to limit collisions and synchronizations.

  I understand "random" may be important in order to manage nodes that
somehow get in sync. But I suggest "random" may also be
difficult/"expensive" to implement (sure, it doesn't say how random it has
to be, but still). I believe I understand the intention behind making the
timer depend on the "candidate rank that would be achieved in DAG"; in the
sense that it allows for other/better parents to be discovered within this
time. However, could we somehow avoid "random" ?

How is this impacted by the ongoing thread regarding use of "Sequence
number" vs "Hop timer" ?

Section 5.7.3.  Collision

  As discussed above, can this "risk window" be handled less expensively ?
  (less bits in RA-DIO for "tie-breaker" or no "tie-breaker" at all)

Section 5.7.4

2623  A node is instable when it is prepared to shortly replace a set of
2624  DAG parents in order to jump to a different DAGID.  This happens

  Suggest to rephrase (node jumps to a different DAG, not a different DAGID)

Section 5.8.1

2695  o  The OF scans all the candidate neighbors on the possible
2696     interfaces to check whether they can act as an attachment router

  Suggest to replace "attachment router" with "router"

2702  o  The OF computes self's rank by adding the step of rank to that
2703     candidate to the rank of that candidate.  The step of rank is
2704     estimated as follows:

  Suggest to replace "estimated" with "based upon"

2757  *  Candidate neighbors that are of worse rank than self are
2758     ignored
2759	
2760  *  Candidate neighbors of a better rank than self (non-siblings)
2761     are preferred

  For completeness: There is no description of handling of "Candidate
neighbors of same rank" (siblings)

  Also, suggest to replace "worse rank" with "higher rank".

Section 5.8.2

2766  corresponding to OCP codepoint 0.  This is a very simple reference to
2767  help design more complex Objective Functions.  In particular, the

  This makes it sound like OCP-0 is merely a "template". It is of course
more than that, being the "default" OCP. 

2773  This document specifies a default objective metric, called OF0, and
2774  using the OCP 0.  OF0 is the default objective function of RPL, and

  Is OFO "default objective metric" or "default objective function" (acronym
matches neither)

Section 5.8.2.2

2819  4.   If none are grounded then a DAG with a more preferred
2820       administrative preference is better.

  Is this DAGPreference from RA-DIO ? (unclear to me)

Section 5.9.2.1

3183  o  A counter of retries to count how many RA-DIO messages were sent
3184     on the interface to the advertising neighbor without reachability
3185     confirmation for the prefix.

  At this point it may not be quite clear to the reader that this is related
to requesting a DA but not receiving it (if I understand correctly). 
  Suggest to clarify.

Section 5.9.2.4

3369  o  Destination advertisement operation stopped: All entries in the
3370     abstract lists are freed.  All the routes learned from NA-DAO
3371     messages are removed.

  Why would a node stop DA operation once commenced ?

Section 7.1.2

3677  A RPL implementation SHOULD allow configuring the following routing
3678  protocol parameters, which are further described in Section 5.1.1:

  I don't think PathDigest belongs in this list (nothing to configure, it is
by definition initialized to zero by root)

3715  DAG Hop Timer:  A RPL implementation MUST provide the ability to

  Wouldn't it be more precise to describe configuration of DagDelay, since
"Hop Timer" is based on DagDelay.

Section 7.1.5

3771  o  The Remove timer

  "Remove timer" or "DestroyTimer" ? (Document seems to be inconsistent)

/Anders (Jagd)



Note: Messages sent to this list are the opinions of the senders and do not imply endorsement by the IETF.