Subject: Re: [Roll] MOP value calculation with MOPex

From: "Pascal Thubert (pthubert)" <[email-masked]>
Date: Wed, 4 Sep 2019 14:12:59 +0000

Dear all

Please see below

All the best,

Pascal

From: Roll <[email-masked]> On Behalf Of Rahul Arvind Jadhav

During ROLL session, it was suggested that using "Final MOP = Base MOP + MOPex" may not be a good idea, since the implementation becomes more complex.

My initial reasoning behind using such a scheme/calculation was to:

  1.  Reuse all the values in base MOP. We do not lose a single value i.e., there is no MOP value reserved for extn. If base MOP value is 7 and if MOPex is absent then the final MOP is 7.
  2.  When anyone references a MOP value X, it need not be referred to in context to base MOP or extended MOP. For e.g., when we say MOP=11 ... there will be only one Mode of Operation it refers to and need not be specified in the context of base or extended MOP.
Essentially we keep using the base MOP and add up from MOPex (if present) to derive final MOP.

?    My reasoning was that like the configuration option, the MOP > 7 could be elided, IOW not repeated upon every DIO. So we can place the MOPex in the config option if we liked. So 7 would mean, the MOP is elsewhere, whereever we decide that is.

How will the implementation handle it?

  1.  Process DIO base object and get the base MOP.
  2.  Keep processing DIO Options and on encountering MOPex add the MOPex value to the same var in step 1.
  3.  At the end of DIO message processing check if the node supports MOP.

?    It really matters if it is the first DIO the node sees for that instance.  If that is the case the node needs the config option and the DAG Metric Containers to figure if it can participate as a router, as a leaf or not at all. If those are elided, e.g., because the network has been stable, I guess the node should DIS to get them. Note that it is an intention that the MOP does not change on the fly. So once the MOP has been seen it can be remembered.

Section 3.2. makes it clear that if base MOP is 7 and MOPex is not present then the final MOP is 7.

?    I'd like to change that to say that means it is in the MOPex. No MOPex means elided, if the node already has it then no problem. The processing becomes much easier since there is no addition to make.

Another way of handling this would be, If MOPex is present then ignore base MOP and just use the value of MOPex as MOP. In this case we will lose out on 7 values of mop.

?    That could be a backward compatibility problem. Say the MOP says 2 and the MOPex says 12. A lecacy node that ignores MOPex will use the wrong value. OTOH a legacy node that does not understand 7 will join as leaf.

All the best

Pascal