| rfc9034v4.xml | rfc9034.xml | |||
|---|---|---|---|---|
| skipping to change at line 472 ¶ | skipping to change at line 472 ¶ | |||
| leads to a small Epoch_Range; if DTL = 0, there will only be 16 RTUs | leads to a small Epoch_Range; if DTL = 0, there will only be 16 RTUs | |||
| within the Epoch_Range (i.e., Epoch_Range(DTL) = 16<sup>1</sup>) for any TU. The | within the Epoch_Range (i.e., Epoch_Range(DTL) = 16<sup>1</sup>) for any TU. The | |||
| values that can be represented in the current epoch are in the range | values that can be represented in the current epoch are in the range | |||
| [0, (Epoch_Range(DTL) - 1)].</t> | [0, (Epoch_Range(DTL) - 1)].</t> | |||
| <t> | <t> | |||
| Assuming wraparound does not occur, OT is represented by the value (OT m od Epoch_Range), | Assuming wraparound does not occur, OT is represented by the value (OT m od Epoch_Range), | |||
| and DT is represented by the value (DT mod Epoch_Range). All arithmetic is | and DT is represented by the value (DT mod Epoch_Range). All arithmetic is | |||
| to be performed modulo (Epoch_Range(DTL)), yielding only positive | to be performed modulo (Epoch_Range(DTL)), yielding only positive | |||
| values for DT - OT. | values for DT - OT. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In order to allow fine-grained control over the setting of the | In order to allow fine-grained control over the setting of the | |||
| deadline time, it is required to allow fractional seconds to be | deadline time, it is required to allow fractional seconds to be | |||
| used in the fields for DT and OTD. This is done by specifying | used in the fields for DT and OTD. This is done by specifying | |||
| a binary point which allocates some of the bits for fractional times. | a binary point, which allocates some of the bits for fractional times. | |||
| Thus, all such fractions are restricted to be negative powers of 2. | Thus, all such fractions are restricted to be negative powers of 2. | |||
| Each point of time between OT and DT is then represented by a time | Each point of time between OT and DT is then represented by a time | |||
| unit (either seconds or ASNs) and a fractional time unit. | unit (either seconds or ASNs) and a fractional time unit. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Let OT_abs, DT_abs, and CT_abs denote the true (absolute) values (on the | Let OT_abs, DT_abs, and CT_abs denote the true (absolute) values (on the | |||
| synchronized timelines) for Origination Time and Deadline Time, and | synchronized timelines) for OT, DT, and | |||
| Current Time. Let N be the number of bits to be used to represent | current time. Let N be the number of bits to be used to represent | |||
| the integer parts of OT_abs, DT_abs, and CT_abs; | the integer parts of OT_abs, DT_abs, and CT_abs: | |||
| </t> | </t> | |||
| <dl spacing="compact"> | <t indent="6">N = {4*(DTL+1)/2} + BinaryPt </t> | |||
| <dt>N = </dt> <dd> {4*(DTL+1)/2} + BinaryPt </dd> | ||||
| </dl> | ||||
| <t> | <t> | |||
| The originating node has to pick a segment size (2^N) so that | The originating node has to pick a segment size (2^N) so that | |||
| DT_abs - OT_abs < 2^N, and so that intermediate network nodes | DT_abs - OT_abs < 2^N, and so that intermediate network nodes | |||
| can detect whether or not CT_abs > DT_abs. | can detect whether or not CT_abs > DT_abs. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Given a value for N, the value for DT is represented in the | Given a value for N, the value for DT is represented in the | |||
| deadline-time format is by DT = (DT_abs mod 2^N). DT is typically | deadline-time format by DT = (DT_abs mod 2^N). DT is typically | |||
| represented as a positive value (even though negative modular | represented as a positive value (even though negative modular | |||
| values make sense). Also, let OT = OT_abs mod 2^N and | values make sense). Also, let OT = OT_abs mod 2^N and | |||
| CT = CT_abs mod 2^N, both OT and CT also considered as | CT = CT_abs mod 2^N, where both OT and CT are also considered as | |||
| non-negative values. | non-negative values. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When the packet is launched by the originating node (Orig_Node), | When the packet is launched by the originating node (Orig_Node), | |||
| CT_abs == OT_abs and CT == OT. Given a particular value for N, | CT_abs == OT_abs and CT == OT. Given a particular value for N, | |||
| then in order for downstream nodes to detect whether or not the | then in order for downstream nodes to detect whether or not the | |||
| deadline has expired (i.e., whether DT_abs > CT_abs), it is | deadline has expired (i.e., whether DT_abs > CT_abs), the following is | |||
| required that (***) DT_abs - OT_abs < 2^N. Otherwise the ambiguity | required: | |||
| </t> | ||||
| <t indent="6" anchor="assumption">Assumption 1: DT_abs - OT_abs < 2^N.</t | ||||
| > | ||||
| <t> | ||||
| Otherwise the ambiguity | ||||
| inherent in the modulus arithmetic yielding OT and DT will cause | inherent in the modulus arithmetic yielding OT and DT will cause | |||
| failure: one cannot measure time differences greater than 2^N using | failure: one cannot measure time differences greater than 2^N using | |||
| numbers in a time segment of length less than 2^N. | numbers in a time segment of length less than 2^N. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Under the assumption (***), downstream nodes must effectively check | Under <xref target="assumption" format="none">Assumption 1</xref>, downst | |||
| whether or not their Current Time is later than the Deadline Time | ream nodes must effectively check | |||
| -- but the value of the Deadline Time has to be inferred from the | whether or not their current time is later than the DT -- but | |||
| the value of the DT has to be inferred from the | ||||
| value of DT in the 6LoRHE, which is a number less than 2^N. This | value of DT in the 6LoRHE, which is a number less than 2^N. This | |||
| inference cannot be expected to reliably succeed unless assumption (***) | inference cannot be expected to reliably succeed unless <xref target="ass | |||
| is valid, which means that Orig_Node has to be careful to pick proper | umption" format="none">Assumption 1</xref> | |||
| is valid, which means that the Orig_Node has to be careful to pick proper | ||||
| values for DTL and for BinaryPt. | values for DTL and for BinaryPt. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Since OT is not necessarily provided in the 6loRHE, there may be a | Since OT is not necessarily provided in the 6loRHE, there may be a | |||
| danger of ambiguity. Surely, when DT = CT, the deadline time | danger of ambiguity. Surely, when DT = CT, the deadline time | |||
| is expiring and the packet should be dropped. But what if an | is expiring and the packet should be dropped. However, what if an | |||
| intermediate node measures that CT = DT+1? Was the packet | intermediate node measures that CT = DT+1? Was the packet | |||
| launched a short time before arrival at the intermediate node, | launched a short time before arrival at the intermediate node, | |||
| or has the current time wrapped around so that | or has the current time wrapped around so that | |||
| CT_abs - OT_abs > 2^N? | CT_abs - OT_abs > 2^N? | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In order to solve this problem, a safety margin has to be provided, | In order to solve this problem, a safety margin has to be provided, | |||
| in addition to requiring that DT_abs - OT_abs < 2^N. The value | in addition to requiring that DT_abs - OT_abs < 2^N. The value | |||
| of this safety margin is proportional to 2^N and is determined by | of this safety margin is proportional to 2^N and is determined by | |||
| skipping to change at line 607 ¶ | skipping to change at line 608 ¶ | |||
| o | | router | | router | o | | router | | router | |||
| +-----+ +-----+ | +-----+ +-----+ | |||
| o o o | o o o | |||
| o o o o o o o o o | o o o o o o o o o | |||
| o LLN o o LLN o o | o LLN o o LLN o o | |||
| o o o o o o o o o | o o o o o o o o o | |||
| 6LoWPAN Network (subnet N1) 6LoWPAN Network (subnet N2) | 6LoWPAN Network (subnet N1) 6LoWPAN Network (subnet N2) | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| <section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
| <name>Scenario 1: Endpoints in the same DODAG (N1)</name> | <name>Scenario 1: Endpoints in the Same DODAG (N1)</name> | |||
| <t> | <t> | |||
| In Scenario 1, shown in <xref target="fig4" format="default"/>, the Sende r 'S' has an | In Scenario 1, shown in <xref target="fig4" format="default"/>, the Sende r 'S' has an | |||
| IP datagram to be routed to a Receiver 'R' within | IP datagram to be routed to a Receiver 'R' within | |||
| the same Destination-Oriented Directed Acyclic Graph (DODAG). | the same Destination-Oriented Directed Acyclic Graph (DODAG). | |||
| For the route segment from the sender to the 6LBR, the sender | For the route segment from the sender to the 6LBR, the sender | |||
| includes a Deadline-6LoRHE by encoding the deadline time | includes a Deadline-6LoRHE by encoding the deadline time | |||
| contained in the packet. Subsequently, each 6LR will perform hop-by-hop | contained in the packet. Subsequently, each 6LR will perform hop-by-hop | |||
| routing to forward the packet towards the 6LBR. Once the 6LBR receives | routing to forward the packet towards the 6LBR. Once the 6LBR receives | |||
| the IP datagram, it sends the packet downstream towards 'R'. | the IP datagram, it sends the packet downstream towards 'R'. | |||
| </t> | </t> | |||
| skipping to change at line 1084 ¶ | skipping to change at line 1085 ¶ | |||
| <!-- [I-D.ietf-6lo-blemesh] IESG state Publication Requested as of 2020 Sept 1 --> | <!-- [I-D.ietf-6lo-blemesh] IESG state Publication Requested as of 2020 Sept 1 --> | |||
| <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D .ietf-6lo-blemesh-10.xml"/> | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D .ietf-6lo-blemesh-10.xml"/> | |||
| </references> | </references> | |||
| </references> | </references> | |||
| <section anchor="modular" title="Modular Arithmetic Considerations"> | <section anchor="modular" title="Modular Arithmetic Considerations"> | |||
| <t> | <t> | |||
| Graphically, one might visualize the timeline as follows: | Graphically, one might visualize the timeline as follows: | |||
| </t> | </t> | |||
| <figure anchor="fig7" title="Absolute time line representation"> | <figure anchor="fig7" title="Absolute Timeline Representation"> | |||
| <artwork><![CDATA[ | <artwork><![CDATA[ | |||
| OT_abs CT_abs DT_abs | OT_abs CT_abs DT_abs | |||
| -------|-------------|-------------|------------------>]]> | -------|-------------|-------------|------------------>]]> | |||
| </artwork> | </artwork> | |||
| </figure> | </figure> | |||
| <t> | <t> | |||
| In <xref target="fig7"/>, the value of CT_abs is envisioned | In <xref target="fig7"/>, the value of CT_abs is envisioned | |||
| as traveling to the right as time progresses, getting farther away | as traveling to the right as time progresses, getting farther away | |||
| from OT_abs and getting closer to DT_abs. The timeline is considered | from OT_abs and getting closer to DT_abs. The timeline is considered | |||
| to be subdivided into time subintervals [i,j] starting and ending at | to be subdivided into time subintervals [i,j] starting and ending at | |||
| absolute times equal to k*(2^N), for integer values of k. Let | absolute times equal to k*(2^N), for integer values of k. Let | |||
| I_k = k*(2^N) and I_(k+1) = (k+1)*2^N. Intervals starting at I_k | I_k = k*(2^N) and I_(k+1) = (k+1)*2^N. Intervals starting at I_k | |||
| and I_(k+1) may occur at various placements in the above timeline. | and I_(k+1) may occur at various placements in the above timeline. | |||
| Even though OT_abs is *always* less than DT_abs, it could be that | Even though OT_abs is <em>always</em> less than DT_abs, it could be that | |||
| DT < OT because of the way that DT and OT are represented within | DT < OT because of the way that DT and OT are represented within | |||
| the range [0, 2^N). Similarly for CT_abs and CT compared to OT and DT. | the range [0, 2^N) and similarly for CT_abs and CT compared to OT and DT. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Representing the above situation in time segments of length 2^N | Representing the above situation in time segments of length 2^N | |||
| (and values OT, CT, DT) results in several cases where the deadline | (and values OT, CT, DT) results in several cases where the deadline | |||
| time has not elapsed: | time has not elapsed: | |||
| </t> | </t> | |||
| <dl> | <dl> | |||
| <dt> 1) OT < CT < DT </dt> | <dt> 1) OT < CT < DT </dt> | |||
| <dd> (e.g, I_k < OT_abs < CT_abs < DT_abs < I_(k+1) ) < /dd> | <dd> (e.g., I_k < OT_abs < CT_abs < DT_abs < I_(k+1) ) </dd> | |||
| <dt> 2) DT < OT < CT </dt> <dd>(e.g, I_k < OT_abs < CT_abs | <dt> 2) DT < OT < CT </dt> <dd>(e.g., I_k < OT_abs < CT_abs | |||
| < I_(k+1) < DT_abs ) </dd> | < I_(k+1) < DT_abs ) </dd> | |||
| <dt> 3) CT < DT < OT </dt> <dd> (e.g, I_k < OT_abs < I_(k+1) | <dt> 3) CT < DT < OT </dt> <dd> (e.g., I_k < OT_abs < I_(k+1 | |||
| < CT_abs < DT_abs ) </dd> | ) < CT_abs < DT_abs ) </dd> | |||
| </dl> | </dl> | |||
| <t> | <t> | |||
| In the following cases, the deadline time has elapsed and the | In the following cases, the deadline time has elapsed and the | |||
| packet should be dropped. | packet should be dropped. | |||
| </t> | </t> | |||
| <dl> | <dl> | |||
| <dt> 4) DT < CT < OT </dt> <dd></dd> | <dt> 4) DT < CT < OT </dt> <dd></dd> | |||
| <dt> 5) OT < DT < CT </dt> <dd></dd> | <dt> 5) OT < DT < CT </dt> <dd></dd> | |||
| <dt> 6) CT < OT < DT </dt> <dd></dd> | <dt> 6) CT < OT < DT </dt> <dd></dd> | |||
| </dl> | </dl> | |||
| skipping to change at line 1136 ¶ | skipping to change at line 1137 ¶ | |||
| moving away from OT_abs and towards DT_abs. | moving away from OT_abs and towards DT_abs. | |||
| For times CT_abs before the expiration of the deadline time, we also | For times CT_abs before the expiration of the deadline time, we also | |||
| have CT_abs - OT_abs == CT - OT mod 2^N and similarly for DT_abs - | have CT_abs - OT_abs == CT - OT mod 2^N and similarly for DT_abs - | |||
| CT_abs. | CT_abs. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| As time proceeds, DT_abs - CT_abs gets smaller. When the deadline time | As time proceeds, DT_abs - CT_abs gets smaller. When the deadline time | |||
| expires, DT_abs - CT_abs begins to grow negative. A proper selection | expires, DT_abs - CT_abs begins to grow negative. A proper selection | |||
| for SAFETY_FACTOR allows it to go | for SAFETY_FACTOR allows it to go | |||
| *slightly negative* but for an intermediate point to *detect* that it | <em>slightly negative</em> but for an intermediate point to <em>detect</e m> that it | |||
| has gone negative. | has gone negative. | |||
| Note that in modular arithmetic, "slightly negative" means *exactly* | Note that in modular arithmetic, "slightly negative" means <em>exactly</e m> | |||
| the same as "almost as large as the modulus (i.e., 2^N)". | the same as "almost as large as the modulus (i.e., 2^N)". | |||
| Now consider the test condition | Now consider the test condition | |||
| ((CT - DT) mod 2^N) > SAFETY_FACTOR*2^N. | ((CT - DT) mod 2^N) > SAFETY_FACTOR*2^N. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| (DT_abs - OT_abs) < 2^N*(1-SAFETY_FACTOR) satifies the test | (DT_abs - OT_abs) < 2^N*(1-SAFETY_FACTOR) satifies the test | |||
| condition when CT_abs == OT_abs (i.e., when the packet it launched). | condition when CT_abs == OT_abs (i.e., when the packet is launched). | |||
| In modular arithmetic, 2^N*(1-SAFETY_FACTOR) == | In modular arithmetic, 2^N*(1-SAFETY_FACTOR) == | |||
| 2^N - 2^N*SAFETY_FACTOR == -2^N*(SAFETY_FACTOR). | 2^N - 2^N*SAFETY_FACTOR == -2^N*(SAFETY_FACTOR). | |||
| Then DT_abs - OT_abs < -2^N*(1-SAFETY_FACTOR). | Then DT_abs - OT_abs < -2^N*(1-SAFETY_FACTOR). | |||
| Inverting the inequality, | Inverting the inequality, | |||
| OT_abs - DT_abs > 2^N*(1-SAFETY_FACTOR), and thus at | OT_abs - DT_abs > 2^N*(1-SAFETY_FACTOR), and thus at | |||
| launch CT_abs - DT_abs > 2^N*(1-SAFETY_FACTOR). | launch CT_abs - DT_abs > 2^N*(1-SAFETY_FACTOR). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| As CT_abs grows larger, CT_abs - DT_abs gets LARGER in (non-negative) | As CT_abs grows larger, CT_abs - DT_abs gets LARGER in (non-negative) | |||
| modular arithmetic until the time at which CT_ABS == DT_ABS, and | modular arithmetic until the time at which CT_ABS == DT_ABS, and | |||
| suddenly CT_ABS - DT_abs becomes zero. And, suddenly, the test | suddenly CT_ABS - DT_abs becomes zero. Also suddenly, the test | |||
| condition is no longer fulfilled. | condition is no longer fulfilled. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| As CT_abs grows still larger, CT_abs > DT_abs, and we need to detect | As CT_abs grows still larger, CT_abs > DT_abs, and we need to detect | |||
| this condition as soon as possible. Requiring the SAFETY_FACTOR | this condition as soon as possible. Requiring the SAFETY_FACTOR | |||
| enables this detection until CT_abs exceeds DT_abs | enables this detection until CT_abs exceeds DT_abs | |||
| by an amount equal to SAFETY_FACTOR*2^N. | by an amount equal to SAFETY_FACTOR*2^N. | |||
| </t> | </t> | |||
| skipping to change at line 1180 ¶ | skipping to change at line 1181 ¶ | |||
| A note about "inverting the inequality". Observe that a < b | A note about "inverting the inequality". Observe that a < b | |||
| implies that -a > -b on the real number line. Also, | implies that -a > -b on the real number line. Also, | |||
| (a - b) == -(b - a). These facts hold also for modular arithmetic. | (a - b) == -(b - a). These facts hold also for modular arithmetic. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| During the times prior to the expiration of the deadline, for | During the times prior to the expiration of the deadline, for | |||
| Safe = 2^N*SAFETY_FACTOR we have: | Safe = 2^N*SAFETY_FACTOR we have: | |||
| </t> | </t> | |||
| <t> | <t indent="6"> | |||
| (DT_abs - 2^N) < OT_abs < CT_abs < DT_abs < DT_abs+Safe | (DT_abs - 2^N) < OT_abs < CT_abs < DT_abs < DT_abs+Safe | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Naturally DT_abs - 2^N == DT_abs mod 2^N == DT. | Naturally, DT_abs - 2^N == DT_abs mod 2^N == DT. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Again considering <xref target="fig7"/>, it is easy to see | Again considering <xref target="fig7"/>, it is easy to see | |||
| that {CT_abs - (DT_abs - 2^N)} gets larger and larger until the time | that {CT_abs - (DT_abs - 2^N)} gets larger and larger until the time | |||
| at which CT_abs = DT_abs, which is the first time at which | at which CT_abs = DT_abs, which is the first time at which | |||
| CT - DT == 0 mod 2^N. As CT_abs increases past the deadline time, | CT - DT == 0 mod 2^N. As CT_abs increases past the deadline time, | |||
| 0 < CT_abs - DT_abs < Safe. In this range, any intermediate | 0 < CT_abs - DT_abs < Safe. In this range, any intermediate | |||
| node can detect that the deadline has expired. As CT_abs increases | node can detect that the deadline has expired. As CT_abs increases | |||
| past DT_abs+Safe, it is no longer possible for an intermediate node | past DT_abs+Safe, it is no longer possible for an intermediate node | |||
| End of changes. 22 change blocks. | ||||
| 33 lines changed or deleted | 37 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||