| rfc9581-lastcall.txt | rfc9581.txt | |||
|---|---|---|---|---|
| skipping to change at line 67 ¶ | skipping to change at line 67 ¶ | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction | 1. Introduction | |||
| 1.1. Terminology | 1.1. Terminology | |||
| 2. Objectives | 2. Objectives | |||
| 3. Time Format | 3. Time Format | |||
| 3.1. Key 1 | 3.1. Key 1 | |||
| 3.2. Keys 4 and 5 | 3.2. Keys 4 and 5 | |||
| 3.3. Keys -3, -6, -9, -12, -15, and -18 | 3.3. Keys -3, -6, -9, -12, -15, and -18 | |||
| 3.4. Keys -1: Timescale | 3.4. Keys -1, -13, and 13: Timescale | |||
| 3.5. Clock Quality | 3.5. Clock Quality | |||
| 3.5.1. ClockClass (Key -2) | 3.5.1. ClockClass (Key -2) | |||
| 3.5.2. ClockAccuracy (Key -4) | 3.5.2. ClockAccuracy (Key -4) | |||
| 3.5.3. OffsetScaledLogVariance (Key -5) | 3.5.3. OffsetScaledLogVariance (Key -5) | |||
| 3.5.4. Uncertainty (Key -7) | 3.5.4. Uncertainty (Key -7) | |||
| 3.5.5. Guarantee (Key -8) | 3.5.5. Guarantee (Key -8) | |||
| 3.6. Keys -10, 10: Time Zone Hint | 3.6. Keys -10, 10: Time Zone Hint | |||
| 3.7. Keys -11, 11: IXDTF Suffix Information | 3.7. Keys -11, 11: IXDTF Suffix Information | |||
| 4. Duration Format | 4. Duration Format | |||
| 5. Period Format | 5. Period Format | |||
| skipping to change at line 310 ¶ | skipping to change at line 310 ¶ | |||
| Note that these keys have been provided to facilitate representing | Note that these keys have been provided to facilitate representing | |||
| pairs of the form second/decimal fraction of a second, as found for | pairs of the form second/decimal fraction of a second, as found for | |||
| instance in C timespec (Section 7.27.1 of [C]). When ingesting a | instance in C timespec (Section 7.27.1 of [C]). When ingesting a | |||
| timestamp with one of these keys into a type provided by the target | timestamp with one of these keys into a type provided by the target | |||
| platform, care has to be taken to meet its invariants. For example, | platform, care has to be taken to meet its invariants. For example, | |||
| for C timespec, the fractional part tv_nsec needs to be between 0 | for C timespec, the fractional part tv_nsec needs to be between 0 | |||
| inclusive and 10^9 exclusive, which can be achieved by also adjusting | inclusive and 10^9 exclusive, which can be achieved by also adjusting | |||
| the base time appropriately. | the base time appropriately. | |||
| 3.4. Keys -1: Timescale | 3.4. Keys -1, -13, and 13: Timescale | |||
| Key -1 is used to indicate a timescale. The value 0 indicates UTC, | Keys -1, -13, and 13 are used to indicate a timescale, where key 13 | |||
| with the POSIX epoch [TIME_T]; the value 1 indicates TAI, with the | is critical. Keys -1 and -13 have identical semantics (they are both | |||
| Precision Time Protocol (PTP) epoch (1 January 1970 00:00:00 TAI, see | assigned because key -1 was chosen first and then, when key 13 was | |||
| [IEEE1588-2019] or [IEEE1588-2008]). | added, it appeared desirable to have a negative equivalent). Each | |||
| extended time data item MUST NOT contain more than one of these keys. | ||||
| The value 0 indicates UTC, with the POSIX epoch [TIME_T]; the value 1 | ||||
| indicates TAI, with the Precision Time Protocol (PTP) epoch (1 | ||||
| January 1970 00:00:00 TAI, see [IEEE1588-2019] or [IEEE1588-2008]). | ||||
| $$ETIME-ELECTIVE //= (-1 => $ETIME-TIMESCALE) | $$ETIME-ELECTIVE //= (-1 => $ETIME-TIMESCALE) | |||
| $$ETIME-ELECTIVE //= (-13 => $ETIME-TIMESCALE) | ||||
| $$ETIME-CRITICAL //= (13 => $ETIME-TIMESCALE) | ||||
| $ETIME-TIMESCALE /= &(etime-utc: 0) | $ETIME-TIMESCALE /= &(etime-utc: 0) | |||
| $ETIME-TIMESCALE /= &(etime-tai: 1) | $ETIME-TIMESCALE /= &(etime-tai: 1) | |||
| If key -1 is not present, the default timescale value 0 is implied. | If none of the keys are present, the default timescale value 0 is | |||
| implied. | ||||
| Timescale values MUST be unsigned integers or text strings; text | Timescale values MUST be unsigned integers or text strings; text | |||
| strings are provided for experimentation and MUST NOT be used between | strings are provided for experimentation and MUST NOT be used between | |||
| parties that are not both part of the experiment. Additional | parties that are not both part of the experiment. Additional | |||
| unsigned integer values can be registered in the "Timescales" | unsigned integer values can be registered in the "Timescales" | |||
| registry (Section 7.2). (Note that there should be no timescales | registry (Section 7.2). (Note that there should be no timescales | |||
| "GPS" or "NTP" [RFC5905] -- instead, the time should be converted to | "GPS" or "NTP" [RFC5905] -- instead, the time should be converted to | |||
| TAI or UTC using a single addition or subtraction.) | TAI or UTC using a single addition or subtraction.) | |||
| t = t - 2208988800 | t = t - 2208988800 | |||
| skipping to change at line 692 ¶ | skipping to change at line 700 ¶ | |||
| "Specification Required" (Section 4.6 of RFC 8126 [BCP26]). | "Specification Required" (Section 4.6 of RFC 8126 [BCP26]). | |||
| The designated expert is requested to assign the key values with the | The designated expert is requested to assign the key values with the | |||
| shortest encodings (1+0 and 1+1 encoding) to registrations that are | shortest encodings (1+0 and 1+1 encoding) to registrations that are | |||
| likely to enjoy wide use and can benefit from short encodings. | likely to enjoy wide use and can benefit from short encodings. | |||
| Each entry needs to provide a map key value (CBOR integer, int, | Each entry needs to provide a map key value (CBOR integer, int, | |||
| -18446744073709551616..18446744073709551615), a brief description of | -18446744073709551616..18446744073709551615), a brief description of | |||
| the semantics, and a specification reference. Note that negative | the semantics, and a specification reference. Note that negative | |||
| integers indicate an elective key, while unsigned integers indicate a | integers indicate an elective key, while unsigned integers indicate a | |||
| key that either provides a base time or is critical. For the | key that either provides a base time or is critical. The designated | |||
| unsigned integers as keys, the choice of base time or critical needs | expert is requested to discuss with the registrant whether or not it | |||
| to be indicated in the brief semantics description. (Elective map | is desirable to register a pair of an elective and a critical key for | |||
| keys may be explicitly marked as such in the description, e.g., to | the same information, where the elective key value is the negative of | |||
| distinguish them from critical keys.) | the critical key (similar to how for example -11 and 11 have been | |||
| assigned in Table 4). For the unsigned integers as keys, the choice | ||||
| of base time or critical needs to be indicated in the brief semantics | ||||
| description. (Elective map keys may be explicitly marked as such in | ||||
| the description, e.g., to distinguish them from critical keys.) | ||||
| The initial contents are shown in Table 4. | The initial contents are shown in Table 4. | |||
| +=======+=====================================+============+ | +=======+=====================================+============+ | |||
| | Value | Semantics | Reference | | | Value | Semantics | Reference | | |||
| +=======+=====================================+============+ | +=======+=====================================+============+ | |||
| | -18 | attoseconds | [RFC9581] | | | -18 | attoseconds | [RFC9581] | | |||
| +-------+-------------------------------------+------------+ | +-------+-------------------------------------+------------+ | |||
| | -15 | femtoseconds | [RFC9581] | | | -15 | femtoseconds | [RFC9581] | | |||
| +-------+-------------------------------------+------------+ | +-------+-------------------------------------+------------+ | |||
| | -13 | timescale (elective) | [RFC9581] | | ||||
| +-------+-------------------------------------+------------+ | ||||
| | -12 | picoseconds | [RFC9581] | | | -12 | picoseconds | [RFC9581] | | |||
| +-------+-------------------------------------+------------+ | +-------+-------------------------------------+------------+ | |||
| | -11 | IXDTF Suffix Information (elective) | [RFC9581], | | | -11 | IXDTF Suffix Information (elective) | [RFC9581], | | |||
| | | | [RFC9557] | | | | | [RFC9557] | | |||
| +-------+-------------------------------------+------------+ | +-------+-------------------------------------+------------+ | |||
| | -10 | IXDTF Time Zone Hint (elective) | [RFC9581], | | | -10 | IXDTF Time Zone Hint (elective) | [RFC9581], | | |||
| | | | [RFC9557] | | | | | [RFC9557] | | |||
| +-------+-------------------------------------+------------+ | +-------+-------------------------------------+------------+ | |||
| | -9 | nanoseconds | [RFC9581] | | | -9 | nanoseconds | [RFC9581] | | |||
| +-------+-------------------------------------+------------+ | +-------+-------------------------------------+------------+ | |||
| skipping to change at line 731 ¶ | skipping to change at line 745 ¶ | |||
| | -6 | microseconds | [RFC9581] | | | -6 | microseconds | [RFC9581] | | |||
| +-------+-------------------------------------+------------+ | +-------+-------------------------------------+------------+ | |||
| | -5 | Offset-Scaled Log Variance | [RFC9581] | | | -5 | Offset-Scaled Log Variance | [RFC9581] | | |||
| +-------+-------------------------------------+------------+ | +-------+-------------------------------------+------------+ | |||
| | -4 | Clock Accuracy | [RFC9581] | | | -4 | Clock Accuracy | [RFC9581] | | |||
| +-------+-------------------------------------+------------+ | +-------+-------------------------------------+------------+ | |||
| | -3 | milliseconds | [RFC9581] | | | -3 | milliseconds | [RFC9581] | | |||
| +-------+-------------------------------------+------------+ | +-------+-------------------------------------+------------+ | |||
| | -2 | Clock Class | [RFC9581] | | | -2 | Clock Class | [RFC9581] | | |||
| +-------+-------------------------------------+------------+ | +-------+-------------------------------------+------------+ | |||
| | -1 | timescale (elective) legacy | [RFC9581] | | ||||
| +-------+-------------------------------------+------------+ | ||||
| | 1 | base time value as in CBOR tag 1 | [RFC8949], | | | 1 | base time value as in CBOR tag 1 | [RFC8949], | | |||
| | | | [RFC9581] | | | | | [RFC9581] | | |||
| +-------+-------------------------------------+------------+ | +-------+-------------------------------------+------------+ | |||
| | 4 | base time value as in CBOR tag 4 | [RFC8949], | | | 4 | base time value as in CBOR tag 4 | [RFC8949], | | |||
| | | | [RFC9581] | | | | | [RFC9581] | | |||
| +-------+-------------------------------------+------------+ | +-------+-------------------------------------+------------+ | |||
| | 5 | base time value as in CBOR tag 5 | [RFC8949], | | | 5 | base time value as in CBOR tag 5 | [RFC8949], | | |||
| | | | [RFC9581] | | | | | [RFC9581] | | |||
| +-------+-------------------------------------+------------+ | +-------+-------------------------------------+------------+ | |||
| | 10 | IXDTF Time Zone Hint (critical) | [RFC9557], | | | 10 | IXDTF Time Zone Hint (critical) | [RFC9557], | | |||
| | | | [RFC9581] | | | | | [RFC9581] | | |||
| +-------+-------------------------------------+------------+ | +-------+-------------------------------------+------------+ | |||
| | 11 | IXDTF Suffix Information (critical) | [RFC9557], | | | 11 | IXDTF Suffix Information (critical) | [RFC9557], | | |||
| | | | [RFC9581] | | | | | [RFC9581] | | |||
| +-------+-------------------------------------+------------+ | +-------+-------------------------------------+------------+ | |||
| | 13 | timescale (critical) | [RFC9581] | | ||||
| +-------+-------------------------------------+------------+ | ||||
| Table 4: Initial Content of Time Tag Map Keys Registry | Table 4: Initial Content of Time Tag Map Keys Registry | |||
| 8. Security Considerations | 8. Security Considerations | |||
| The security considerations of [RFC8949] apply; the tags introduced | The security considerations of [RFC8949] apply; the tags introduced | |||
| here are not expected to raise security considerations beyond those. | here are not expected to raise security considerations beyond those. | |||
| Time, of course, has significant security considerations; these | Time, of course, has significant security considerations; these | |||
| include the exploitation of ambiguities where time is security | include the exploitation of ambiguities where time is security | |||
| skipping to change at line 921 ¶ | skipping to change at line 939 ¶ | |||
| $$ETIME-BASETIME //= (5: ~bigfloat) | $$ETIME-BASETIME //= (5: ~bigfloat) | |||
| $$ETIME-ELECTIVE //= (-3: uint) | $$ETIME-ELECTIVE //= (-3: uint) | |||
| $$ETIME-ELECTIVE //= (-6: uint) | $$ETIME-ELECTIVE //= (-6: uint) | |||
| $$ETIME-ELECTIVE //= (-9: uint) | $$ETIME-ELECTIVE //= (-9: uint) | |||
| $$ETIME-ELECTIVE //= (-12: uint) | $$ETIME-ELECTIVE //= (-12: uint) | |||
| $$ETIME-ELECTIVE //= (-15: uint) | $$ETIME-ELECTIVE //= (-15: uint) | |||
| $$ETIME-ELECTIVE //= (-18: uint) | $$ETIME-ELECTIVE //= (-18: uint) | |||
| $$ETIME-ELECTIVE //= (-1 => $ETIME-TIMESCALE) | $$ETIME-ELECTIVE //= (-1 => $ETIME-TIMESCALE) | |||
| $$ETIME-ELECTIVE //= (-13 => $ETIME-TIMESCALE) | ||||
| $$ETIME-CRITICAL //= (13 => $ETIME-TIMESCALE) | ||||
| $ETIME-TIMESCALE /= &(etime-utc: 0) | $ETIME-TIMESCALE /= &(etime-utc: 0) | |||
| $ETIME-TIMESCALE /= &(etime-tai: 1) | $ETIME-TIMESCALE /= &(etime-tai: 1) | |||
| ClockQuality-group = ( | ClockQuality-group = ( | |||
| ? &(ClockClass: -2) => uint .size 1 ; PTP/RFC8575 | ? &(ClockClass: -2) => uint .size 1 ; PTP/RFC8575 | |||
| ? &(ClockAccuracy: -4) => uint .size 1 ; PTP/RFC8575 | ? &(ClockAccuracy: -4) => uint .size 1 ; PTP/RFC8575 | |||
| ? &(OffsetScaledLogVariance: -5) => uint .size 2 ; PTP/RFC8575 | ? &(OffsetScaledLogVariance: -5) => uint .size 2 ; PTP/RFC8575 | |||
| ? &(Uncertainty: -7) => ~time/~duration | ? &(Uncertainty: -7) => ~time/~duration | |||
| ? &(Guarantee: -8) => ~time/~duration | ? &(Guarantee: -8) => ~time/~duration | |||
| skipping to change at line 945 ¶ | skipping to change at line 965 ¶ | |||
| time-zone-info = tstr .abnf | time-zone-info = tstr .abnf | |||
| ("time-zone-name / time-numoffset" .det IXDTFtz) | ("time-zone-name / time-numoffset" .det IXDTFtz) | |||
| IXDTFtz = ' | IXDTFtz = ' | |||
| time-hour = 2DIGIT ; 00-23 | time-hour = 2DIGIT ; 00-23 | |||
| time-minute = 2DIGIT ; 00-59 | time-minute = 2DIGIT ; 00-59 | |||
| time-numoffset = ("+" / "-") time-hour ":" time-minute | time-numoffset = ("+" / "-") time-hour ":" time-minute | |||
| time-zone-initial = ALPHA / "." / "_" | time-zone-initial = ALPHA / "." / "_" | |||
| time-zone-char = time-zone-initial / DIGIT / "-" / "+" | time-zone-char = time-zone-initial / DIGIT / "-" / "+" | |||
| time-zone-part = time-zone-initial *13(time-zone-char) | time-zone-part = time-zone-initial *time-zone-char | |||
| ; but not "." or ".." | ; but not "." or ".." | |||
| time-zone-name = time-zone-part *("/" time-zone-part) | time-zone-name = time-zone-part *("/" time-zone-part) | |||
| ALPHA = %x41-5A / %x61-7A ; A-Z / a-z | ALPHA = %x41-5A / %x61-7A ; A-Z / a-z | |||
| DIGIT = %x30-39 ; 0-9 | DIGIT = %x30-39 ; 0-9 | |||
| ' ; extracted from [RFC9557] and [RFC3339]; update as needed | ' ; extracted from [RFC9557] and [RFC3339] | |||
| $$ETIME-ELECTIVE //= (-11: suffix-info-map) | $$ETIME-ELECTIVE //= (-11: suffix-info-map) | |||
| $$ETIME-CRITICAL //= (11: suffix-info-map) | $$ETIME-CRITICAL //= (11: suffix-info-map) | |||
| suffix-info-map = { * suffix-key => suffix-values } | suffix-info-map = { * suffix-key => suffix-values } | |||
| suffix-key = tstr .abnf ("suffix-key" .det IXDTF) | suffix-key = tstr .abnf ("suffix-key" .det IXDTF) | |||
| suffix-values = one-or-more<suffix-value> | suffix-values = one-or-more<suffix-value> | |||
| one-or-more<T> = T / [ 2* T ] | one-or-more<T> = T / [ 2* T ] | |||
| suffix-value = tstr .abnf ("suffix-value" .det IXDTF) | suffix-value = tstr .abnf ("suffix-value" .det IXDTF) | |||
| IXDTF = ' | IXDTF = ' | |||
| key-initial = lcalpha / "_" | key-initial = lcalpha / "_" | |||
| key-char = key-initial / DIGIT / "-" | key-char = key-initial / DIGIT / "-" | |||
| suffix-key = key-initial *key-char | suffix-key = key-initial *key-char | |||
| suffix-value = 1*alphanum | suffix-value = 1*alphanum | |||
| alphanum = ALPHA / DIGIT | alphanum = ALPHA / DIGIT | |||
| lcalpha = %x61-7A | lcalpha = %x61-7A | |||
| ALPHA = %x41-5A / %x61-7A ; A-Z / a-z | ALPHA = %x41-5A / %x61-7A ; A-Z / a-z | |||
| DIGIT = %x30-39 ; 0-9 | DIGIT = %x30-39 ; 0-9 | |||
| ' ; extracted from [RFC9557]; update as needed! | ' ; extracted from [RFC9557] | |||
| Duration = #6.1002(etime-detailed) | Duration = #6.1002(etime-detailed) | |||
| Period = #6.1003([ | simple-Period = #6.1003([ | |||
| start: ~Etime / null | start: ~Etime / null | |||
| end: ~Etime / null | end: ~Etime / null | |||
| ? duration: ~Duration / null | ? duration: ~Duration | |||
| ]) | ]) | |||
| clumsy-Period = #6.1003([ | Period = #6.1003([ | |||
| (start: ~Etime, | (start: ~Etime, | |||
| ((end: ~Etime, | ((end: ~Etime) // | |||
| ? duration: null) // | ||||
| (end: null, | (end: null, | |||
| duration: ~Duration))) // | duration: ~Duration))) // | |||
| (start: null, | (start: null, | |||
| end: ~Etime, | end: ~Etime, | |||
| duration: ~Duration) | duration: ~Duration) | |||
| ]) | ]) | |||
| etime = #6.1001({* (int/tstr) => any}) | etime = #6.1001({* (int/tstr) => any}) | |||
| duration = #6.1002({* (int/tstr) => any}) | duration = #6.1002({* (int/tstr) => any}) | |||
| period = #6.1003([~etime/null, ~etime/null, ~duration/null]) | period = #6.1003([~etime/null, ~etime/null, ?~duration]) | |||
| Figure 6: Collected CDDL Rules from This Specification | Figure 6: Collected CDDL Rules from This Specification | |||
| Acknowledgements | Acknowledgements | |||
| The authors would like to acknowledge the many comments from members | The authors would like to acknowledge the many comments from members | |||
| of the CBOR WG, Francesca Palombini for her AD review, and Thomas | of the CBOR WG, Francesca Palombini for her AD review, Thomas Fossati | |||
| Fossati and Qin Wu for their directorate reviews. | and Qin Wu for their directorate reviews, and Rohan Mahy for one more | |||
| review late in the process. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Carsten Bormann | Carsten Bormann | |||
| Universität Bremen TZI | Universität Bremen TZI | |||
| Postfach 330440 | Postfach 330440 | |||
| D-28359 Bremen | D-28359 Bremen | |||
| Germany | Germany | |||
| Phone: +49-421-218-63921 | Phone: +49-421-218-63921 | |||
| Email: cabo@tzi.org | Email: cabo@tzi.org | |||
| End of changes. 19 change blocks. | ||||
| 23 lines changed or deleted | 43 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||