diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..52f32f5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +lib +venv +.refcache diff --git a/archive.json b/archive.json new file mode 100644 index 0000000..70536de --- /dev/null +++ b/archive.json @@ -0,0 +1,1139 @@ +{ + "magic": "E!vIA5L86J2I", + "timestamp": "2023-03-07T01:55:38.480330+00:00", + "repo": "ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang", + "labels": [ + { + "name": "bug", + "description": "Something isn't working", + "color": "d73a4a" + }, + { + "name": "documentation", + "description": "Improvements or additions to documentation", + "color": "0075ca" + }, + { + "name": "duplicate", + "description": "This issue or pull request already exists", + "color": "cfd3d7" + }, + { + "name": "enhancement", + "description": "New feature or request", + "color": "a2eeef" + }, + { + "name": "good first issue", + "description": "Good for newcomers", + "color": "7057ff" + }, + { + "name": "help wanted", + "description": "Extra attention is needed", + "color": "008672" + }, + { + "name": "invalid", + "description": "This doesn't seem right", + "color": "e4e669" + }, + { + "name": "question", + "description": "Further information is requested", + "color": "d876e3" + }, + { + "name": "wontfix", + "description": "This will not be worked on", + "color": "ffffff" + }, + { + "name": "tooling", + "description": "tooling related issue", + "color": "FBCA04" + }, + { + "name": "action", + "description": "Action Item", + "color": "e99695" + }, + { + "name": "Agreed", + "description": "", + "color": "0E8A16" + }, + { + "name": "Wait", + "description": "", + "color": "FEF2C0" + } + ], + "issues": [ + { + "number": 1, + "id": "I_kwDOGF2QDc5BqbwP", + "title": "Create SVG Example in Markdown", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/1", + "state": "CLOSED", + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "assignees": [ + "samans" + ], + "labels": [ + "tooling" + ], + "body": "Provide a SVG file and example of including the SVG file as a figure in a draft. Provide markdown example.", + "createdAt": "2022-01-13T12:23:41Z", + "updatedAt": "2022-04-21T10:36:50Z", + "closedAt": "2022-04-21T10:36:49Z", + "comments": [ + { + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "body": "Scott will send a list with the tools tht can be used for creation & iinclusion into the textfile.", + "createdAt": "2022-04-21T10:36:49Z", + "updatedAt": "2022-04-21T10:36:49Z" + } + ] + }, + { + "number": 2, + "id": "I_kwDOGF2QDc5BqdUO", + "title": "Support for tx-enabled or not? ", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/2", + "state": "OPEN", + "author": "JonasAhl", + "authorAssociation": "NONE", + "assignees": [], + "labels": [ + "question", + "Wait" + ], + "body": "Is this used on a node level for troubleshooting only, or is it needed also in the topology model", + "createdAt": "2022-01-13T12:28:44Z", + "updatedAt": "2022-02-17T13:03:05Z", + "closedAt": null, + "comments": [ + { + "author": "JonasAhl", + "authorAssociation": "NONE", + "body": "The meeting agrees that the need to disable the transmitter is only related to trouble-shooting (mainly on site).\r\nClose of issue pending input from other uW WG-members.", + "createdAt": "2022-01-27T13:11:52Z", + "updatedAt": "2022-01-27T13:11:52Z" + }, + { + "author": "JonasAhl", + "authorAssociation": "NONE", + "body": "I suggest that we rely on the te-topology leaf \"tet:te-link-attributes/tet:admin-status\" for enabling/disabling a carrier, e.g. in an energy-efficiency use-case, instead of adding the tx-enabled leaf.\r\nThen it is up to the controller implementation if this should be translated into turning off the transmitter only or if both transmitter and receiver should be turned off.", + "createdAt": "2022-01-27T15:31:31Z", + "updatedAt": "2022-01-27T15:31:31Z" + }, + { + "author": "italobusi", + "authorAssociation": "MEMBER", + "body": "In order to support the energy efficiency use case, I am wondering whether the MW topology model should provide the management of the operational modes as defined in section 3.2 of [RFC 8432](https://datatracker.ietf.org/doc/html/rfc8432) rather than the management of each specific MW interface attributes\r\n\r\nThe controller can properly set the MW interface attributes based on the configured operational mode", + "createdAt": "2022-02-10T09:05:58Z", + "updatedAt": "2022-02-10T09:05:58Z" + }, + { + "author": "JonasAhl", + "authorAssociation": "NONE", + "body": "I suppose that the use of operational modes as suggested above assumes that there is a standardized definition of those modes, which I don't think is the case.", + "createdAt": "2022-02-17T12:00:55Z", + "updatedAt": "2022-02-17T12:00:55Z" + }, + { + "author": "JonasAhl", + "authorAssociation": "NONE", + "body": "Open up a separate issue related operation modes. If included/supported, then it makes the requirement to include detailed configuration parameters superfluous.", + "createdAt": "2022-02-17T13:01:39Z", + "updatedAt": "2022-02-17T13:01:39Z" + } + ] + }, + { + "number": 3, + "id": "I_kwDOGF2QDc5Bqdeu", + "title": "Bandwidth utilization ", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/3", + "state": "OPEN", + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "assignees": [ + "DanielaSpreafico" + ], + "labels": [ + "question", + "Wait" + ], + "body": "o\tDo nodes provide this info on a link/carrier level?\r\no\tHow often do they change?\r\no\tAverage value over which period of time?\r\no\tRetrieve from node?\r\n", + "createdAt": "2022-01-13T12:29:15Z", + "updatedAt": "2022-12-15T10:29:07Z", + "closedAt": null, + "comments": [ + { + "author": "DanielaSpreafico", + "authorAssociation": "CONTRIBUTOR", + "body": "I add my considerations about Bandwidth utilization.\r\n\r\nThe Bandwidth utilization could provide a way to understand whether the nominal (maximum) radio capacity is coherent with the traffic passing through it.\r\nThe formula to calculate it has to use the throughput (transmitted data in specific period time ) and the nominal capacity (or nominal maximum bandwidth)\r\nBandwidth-utilization = [throughput (Mb/s) / nominal-maximum-bandwidth (Mb/s)] * 100\r\n\r\nIs this information is on link level, taking into account the single carriers and the mode they are combined for the link (1+1, 2+0, etc). Or is it on carrier level (each single carrier on a link, whatever the mode of the radio link?\r\n\r\nDue to the frequent change of throughput then also the Bandwidth utilization could change frequently.\r\nIt is mainly a performance counter (both as statistic/timely data value or on period-time basis data value).\r\n\r\nCould it be recovered from the node? It is not a standard counter, so not all devices are able to provide it.\r\nOr based on other data from the node (tx bytes sent) ? In this case it is needed a reference time to calculated delta-time and delta-tx-bytes-sent).\r\n\r\n", + "createdAt": "2022-01-13T14:40:33Z", + "updatedAt": "2022-01-13T14:40:33Z" + }, + { + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "body": "I agree with the definition and questions raised by Daniela in the previous comment.\r\nAnother question is if it perhaps is more relevant to measure this on the Ethernet link level rather than on radio link level. It is most likely dependent upon the use case to be supported.", + "createdAt": "2022-01-27T10:23:05Z", + "updatedAt": "2022-01-27T10:23:05Z" + }, + { + "author": "italobusi", + "authorAssociation": "MEMBER", + "body": "FYI, this is the definition of band in [RFC8776](https://datatracker.ietf.org/doc/html/rfc8776):\r\n\r\n```\r\n leaf one-way-utilized-bandwidth {\r\n type rt-types:bandwidth-ieee-float32;\r\n units \"bytes per second\";\r\n default \"0x0p0\";\r\n description\r\n \"Bandwidth utilization that represents the actual\r\n utilization of the link (i.e., as measured in the router).\r\n For a bundled link, bandwidth utilization is defined to\r\n be the sum of the component link bandwidth utilizations.\";\r\n }\r\n\r\n```\r\n", + "createdAt": "2022-02-10T08:52:55Z", + "updatedAt": "2022-02-10T08:52:55Z" + }, + { + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "body": "Bandwidth utilization is an important information for use cases such as energy efficiency.\r\nThere are a couple of questions to be answered:\r\n- Is there a need to manage this in a multidomain context or not, and in such case do you measure utilization on a radio link level or on e.g. the Ethernet level which is a multidomain technology?\r\n- Is this specific for microwave or is it generic and can be used for many technologies and thereby perhaps should be included in the topology model itself, alternatively included in the bandwidth-availability module.\r\n- ", + "createdAt": "2022-02-10T12:59:53Z", + "updatedAt": "2022-02-10T12:59:53Z" + }, + { + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "body": "Check with authors of RFC 8776 why not in te-topology.", + "createdAt": "2022-02-17T12:50:22Z", + "updatedAt": "2022-02-17T12:50:22Z" + }, + { + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "body": "Agreed to define a new attribute specifically for microwave topology, instead of reusing the grouping above.\r\nDaniela to suggest a definition of the leaf & description.", + "createdAt": "2022-04-07T10:51:40Z", + "updatedAt": "2022-04-07T10:51:40Z" + }, + { + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "body": "The period over which the bandwidth is measured should be clear. 1s? 6 sec? Leo to investigate.\r\nCheck what the difference is between the leaf defined by RFC 8776 and the leaf actual-bandwidth in the generic module ietf-bandwidth-availability-topology.", + "createdAt": "2022-04-28T11:02:35Z", + "updatedAt": "2022-04-28T11:02:35Z" + }, + { + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "body": "Bandwidth utilization is recommended to be based on \"tx-bytes-sent\".\r\n\"tx-bytes-sent is not included/supported in the RFC 8561 device model.\r\nout-octets is included in RFC 7223, but is referring to the ethernet level.\r\nTime slot for the measurement still remains to be decided - or should we allow vendor specific implementations, described in a separate data node for the time window used.", + "createdAt": "2022-09-29T10:00:48Z", + "updatedAt": "2022-09-29T10:00:48Z" + }, + { + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "body": "Continued to discuss Issue #3:\r\nClarify that it is about utilized bandwidth, not utilization in percentage.\r\nChange the name of the attribute accordingly.\r\nProposal is to add a node/leaf for the time-window.\r\nClarify/describe that the utilization can be calculated in different ways depending on the policy used. \r\nCompare e.g. with max in highest modulation, or max in current modulation, etc.\r\n", + "createdAt": "2022-10-20T09:56:12Z", + "updatedAt": "2022-10-20T09:56:12Z" + }, + { + "author": "italobusi", + "authorAssociation": "MEMBER", + "body": "Let's check that we have a common view about the definitions:\r\n\r\n\r\n\r\n\r\n\r\nIn order to get comparable values, a common/standard definition is needed for\r\n1. _txBytes_\r\n2. _timeWindow_ \r\n3. _linkBw_\r\n\r\nReporting the _utilizedBw_ instead of the _BwUtilization_ removes the need for a common/standard definition of the _linkBw_.\r\n\r\nReporting the _timeWindow_ removes the need for a common/standard definition of the _timeWindow_,\r\n\r\nI am not sure whether we have a common/standard definition for counting the _txBytes_: to be investigated.", + "createdAt": "2022-10-26T13:03:17Z", + "updatedAt": "2022-10-26T13:03:17Z" + }, + { + "author": "DanielaSpreafico", + "authorAssociation": "CONTRIBUTOR", + "body": "I agree with the concept and the formula about utilizedBw and BwUtilization.\r\n\r\nThe txBytes has to be the bytes sent on the timeWindow, so the difference between the tx bytes sent at T0 and tx bytes sent at T1 where T1-T0 = timeWindow.\r\n", + "createdAt": "2022-10-26T13:58:49Z", + "updatedAt": "2022-10-26T13:58:49Z" + }, + { + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "body": "I also agree with the concept and Daniela\u00b4s addition, but I'm not sure I understand the first formula.\r\nWhy is there a multiplication with 8?\r\nIsn't 1 byte = 8 bits and not the opposite, which I think could be the mistake.\r\n", + "createdAt": "2022-10-26T15:05:30Z", + "updatedAt": "2022-10-26T15:05:30Z" + }, + { + "author": "italobusi", + "authorAssociation": "MEMBER", + "body": "> I also agree with the concept and Daniela\u00b4s addition, but I'm not sure I understand the first formula. Why is there a multiplication with 8? Isn't 1 byte = 8 bits and not the opposite, which I think could be the mistake.\r\n\r\nGood point, I think that adding the measurements units would help:\r\n\r\n\r\n\r\n\r\n", + "createdAt": "2022-10-27T09:00:50Z", + "updatedAt": "2022-10-27T09:00:50Z" + }, + { + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "body": "A few observations and questions about the bandwidth topic.\r\n[mw-bandwidth-questions.pptx](https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/files/9878722/mw-bandwidth-questions.pptx)\r\n", + "createdAt": "2022-10-27T11:11:24Z", + "updatedAt": "2022-10-27T11:11:24Z" + } + ] + }, + { + "number": 4, + "id": "I_kwDOGF2QDc5Bqde3", + "title": "Markdown cheat sheet", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/4", + "state": "CLOSED", + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "assignees": [ + "samans" + ], + "labels": [ + "tooling" + ], + "body": "Create a markdown cheat sheet", + "createdAt": "2022-01-13T12:29:16Z", + "updatedAt": "2022-02-10T11:43:50Z", + "closedAt": "2022-02-10T11:43:03Z", + "comments": [ + { + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "body": "This is the website with all the syntax for kramdown: https://kramdown.gettalong.org/syntax.html\r\nThe https://github.com/cabo/kramdown-rfc2629 site has the directives specifically used for IETF RFCs and I-Ds.", + "createdAt": "2022-02-10T11:43:03Z", + "updatedAt": "2022-02-10T11:43:03Z" + }, + { + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "body": "https://xml2rfc.tools.ietf.org/experimental.html#kramdown is an online converter to use for testing.", + "createdAt": "2022-02-10T11:43:50Z", + "updatedAt": "2022-02-10T11:43:50Z" + } + ] + }, + { + "number": 5, + "id": "I_kwDOGF2QDc5BqdkU", + "title": "\u2022\tRequest & consider feedback from CCAMP on the suggestion to include generic modules for bandwidth & interface ref ", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/5", + "state": "CLOSED", + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "assignees": [ + "JonasAhl" + ], + "labels": [ + "question" + ], + "body": "", + "createdAt": "2022-01-13T12:29:32Z", + "updatedAt": "2022-12-08T10:53:27Z", + "closedAt": "2022-12-08T10:53:27Z", + "comments": [ + { + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "body": "Suggestion is to point out that YANG model has been decomposed into generic portion and mw portion. Get feedback on the decomposition when draft is reviewed by the YANG doctors.", + "createdAt": "2022-02-24T12:53:38Z", + "updatedAt": "2022-02-24T12:53:38Z" + }, + { + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "body": "Based on CCAMP comments and consensus the internet draft has been split into three internet drafts one for each yang module. There is a mw-topo, bwa, and if-ref internet drafts now.", + "createdAt": "2022-12-08T10:53:27Z", + "updatedAt": "2022-12-08T10:53:27Z" + } + ] + }, + { + "number": 6, + "id": "I_kwDOGF2QDc5Bqd0H", + "title": "Consider including more example instantiations (JSON) ", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/6", + "state": "CLOSED", + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "assignees": [ + "DanielaSpreafico" + ], + "labels": [ + "enhancement", + "Agreed" + ], + "body": "Agree on what examples to include", + "createdAt": "2022-01-13T12:30:22Z", + "updatedAt": "2022-04-21T10:16:33Z", + "closedAt": "2022-04-21T10:16:33Z", + "comments": [ + { + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "body": "Same as the existing example but with 1+1 configuration of the carriers. Daniela to make a proposal.", + "createdAt": "2022-02-17T12:34:02Z", + "updatedAt": "2022-02-17T12:34:02Z" + }, + { + "author": "DanielaSpreafico", + "authorAssociation": "CONTRIBUTOR", + "body": "I add an example (exampleL2OnePlusOne.json) in the repository. \r\nThis is related to 'l2-topology' network type, but a new one could be created for 'ETH topology' type.", + "createdAt": "2022-02-23T18:03:09Z", + "updatedAt": "2022-02-23T18:03:09Z" + }, + { + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "body": "Action to validate the json using yanglint.", + "createdAt": "2022-02-24T12:18:28Z", + "updatedAt": "2022-02-24T12:18:28Z" + }, + { + "author": "DanielaSpreafico", + "authorAssociation": "CONTRIBUTOR", + "body": "I updated the json example (file 'exampleL2OnePlusOne.json') to introduce ACM coding modulation mode with 2 modulation values and adding entries on 'link-availability' list.", + "createdAt": "2022-03-03T10:09:19Z", + "updatedAt": "2022-03-03T10:09:19Z" + }, + { + "author": "DanielaSpreafico", + "authorAssociation": "CONTRIBUTOR", + "body": "I changed on exampleL2OnePlusOne.jsin file the 'ietf-bandwidth-availability-topology:link-availability' list putting the lowest value of \"link-bandwidth\" on higher values of \"availability\".\r\nThat both for 'microwave-rltp' and 'microwave-ctp'.\r\nThat means the \"link-bandwidth\" for lower modulation values have more chances of 'availabiliy'.", + "createdAt": "2022-03-10T11:53:12Z", + "updatedAt": "2022-03-10T11:53:12Z" + }, + { + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "body": "Inserted in the draft.", + "createdAt": "2022-04-21T10:16:33Z", + "updatedAt": "2022-04-21T10:16:33Z" + } + ] + }, + { + "number": 7, + "id": "I_kwDOGF2QDc5Bqd6n", + "title": "Send the draft for review by the YANG doctors", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/7", + "state": "CLOSED", + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "assignees": [ + "samans" + ], + "labels": [ + "action" + ], + "body": "", + "createdAt": "2022-01-13T12:30:42Z", + "updatedAt": "2022-12-15T10:28:06Z", + "closedAt": "2022-12-15T10:28:06Z", + "comments": [ + { + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "body": "When do we want to send it? \r\nDeadline for meeting consideration:\r\n2022-03-07 (Monday): Internet Draft submission cut-off (for all drafts, including -00) by UTC 23:59. Upload using the ID Submission Tool.", + "createdAt": "2022-01-13T12:42:53Z", + "updatedAt": "2022-01-13T12:42:53Z" + }, + { + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "body": "Updated draft ready for review by YANG doctors by 1st week of February\r\n", + "createdAt": "2022-01-13T12:44:46Z", + "updatedAt": "2022-01-13T12:44:46Z" + }, + { + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "body": "Implemented the split of the draft into multiple drafts that have one module per draft.", + "createdAt": "2022-12-15T10:28:06Z", + "updatedAt": "2022-12-15T10:28:06Z" + } + ] + }, + { + "number": 8, + "id": "I_kwDOGF2QDc5CHZ_w", + "title": "Using a makefile, submit to github directly from markdown", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/8", + "state": "CLOSED", + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "assignees": [ + "samans" + ], + "labels": [], + "body": "Use the [Martin Thomson environment](https://github.com/martinthomson/i-d-template) to support uploading to github (IETF's ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang repository).\r\n\r\nSubmit the draft to the IETF using the makefile.", + "createdAt": "2022-01-20T12:23:24Z", + "updatedAt": "2022-12-08T10:51:40Z", + "closedAt": "2022-12-08T10:51:40Z", + "comments": [] + }, + { + "number": 9, + "id": "I_kwDOGF2QDc5ChwyN", + "title": "Consider remove leafs \"supporting-network\" attributes in the example tree A.1.", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/9", + "state": "CLOSED", + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "assignees": [ + "samans", + "JonasAhl" + ], + "labels": [ + "enhancement", + "Agreed" + ], + "body": "", + "createdAt": "2022-01-27T12:22:33Z", + "updatedAt": "2022-04-14T10:45:13Z", + "closedAt": "2022-04-14T10:45:13Z", + "comments": [ + { + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "body": "The meeting agrees with the proposal and assigns the task to Jonas to make an update of the tree example accordingly.", + "createdAt": "2022-02-17T12:28:22Z", + "updatedAt": "2022-02-17T12:28:22Z" + }, + { + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "body": "If we remove supporting-network, then I don't think we can use the concept of supporting-termination-point between radio-link-terminal and the supporting carrier-terminations. OK?\r\nCheck with Scott about the JSON instantiation. Consider checking with the authors of RFC 8345", + "createdAt": "2022-03-03T11:41:40Z", + "updatedAt": "2022-03-03T12:16:27Z" + }, + { + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "body": "Cannot be removed.", + "createdAt": "2022-04-14T10:45:13Z", + "updatedAt": "2022-04-14T10:45:13Z" + } + ] + }, + { + "number": 10, + "id": "I_kwDOGF2QDc5DVWWy", + "title": "L2 topology in Appendix A", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/10", + "state": "CLOSED", + "author": "italobusi", + "authorAssociation": "MEMBER", + "assignees": [ + "italobusi" + ], + "labels": [ + "Agreed" + ], + "body": "Appendix A assumes to use the L2 topology model defined in [RFC8944](https://datatracker.ietf.org/doc/html/rfc8944)\r\n\r\nIn ETSI DGS mWT-024. the Ethernet TE and Client Topology topology model defined in [draft-ietf-ccamp-eth-client-te-topo-yang](https://datatracker.ietf.org/doc/html/draft-ietf-ccamp-eth-client-te-topo-yang)\r\n\r\nThe advantages of the Ethernet TE and Client Topology topology model are that:\r\n- It supports administrative/operational state management from TE topology (profile)\r\n- It supports for inter-domain link discovery (plug-id) from TE topology (profile)\r\n- It supports a common way to manage link bundling (e.g., LAG) from TE topology (profile)\r\n- Allows reporting the VLAN classification capabilities at the edge of the network\r\n", + "createdAt": "2022-02-10T09:01:45Z", + "updatedAt": "2022-04-14T10:16:53Z", + "closedAt": "2022-04-14T10:16:53Z", + "comments": [ + { + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "body": "The meeting agrees with the proposal and assigns the task to Italo to make an update of the JSON example accordingly.", + "createdAt": "2022-02-17T12:24:26Z", + "updatedAt": "2022-02-17T12:24:26Z" + }, + { + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "body": "Now included in the latest github version.", + "createdAt": "2022-04-14T10:16:53Z", + "updatedAt": "2022-04-14T10:16:53Z" + } + ] + }, + { + "number": 11, + "id": "I_kwDOGF2QDc5EBwZZ", + "title": "Operational Mode", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/11", + "state": "OPEN", + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "assignees": [], + "labels": [ + "enhancement", + "Wait" + ], + "body": "", + "createdAt": "2022-02-17T13:03:31Z", + "updatedAt": "2022-12-15T10:26:23Z", + "closedAt": null, + "comments": [ + { + "author": "italobusi", + "authorAssociation": "MEMBER", + "body": "See section 3.2 of https://www.rfc-editor.org/rfc/rfc8432.html", + "createdAt": "2022-10-26T16:37:32Z", + "updatedAt": "2022-10-26T16:37:32Z" + } + ] + }, + { + "number": 12, + "id": "I_kwDOGF2QDc5Ef6zK", + "title": "Contact ccamp chairs about errata ", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/12", + "state": "CLOSED", + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "assignees": [ + "JonasAhl" + ], + "labels": [ + "action" + ], + "body": " Errata status\r\n - https://datatracker.ietf.org/doc/html/rfc8561\r\n - https://www.rfc-editor.org/errata_search.php?rfc=8561&rec_status=0\r\n - Contact Daniele and Fatai about errate process (Issue)", + "createdAt": "2022-02-24T12:16:42Z", + "updatedAt": "2022-04-14T10:11:44Z", + "closedAt": "2022-04-14T10:11:43Z", + "comments": [ + { + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "body": "The guidance I received is...\r\n\r\nA note to the relevant AD from the lead author, with a copy to the CCAMP working group, indicating the author\u2019s expectation about resolution should cause the AD to act.\r\n\r\nSo... \r\nJonas needs to send the email to Fatai Zhang (Document Shephard) and John Scudder (AD) with CC to the current leaders:\r\nChairs Daniele Ceccarelli\u00a0Fatai Zhang\r\nAD: John Scudder\r\nCCAMP Secretary: Oscar de Dios\r\nResponsible AD when draft was completed: Deborah Brungard", + "createdAt": "2022-03-10T15:37:37Z", + "updatedAt": "2022-03-10T15:37:37Z" + }, + { + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "body": "Errata verified and included in data tracker.", + "createdAt": "2022-04-14T10:11:43Z", + "updatedAt": "2022-04-14T10:11:43Z" + } + ] + }, + { + "number": 13, + "id": "I_kwDOGF2QDc5FcusK", + "title": "Ensure that the new md-file covers everything in the latest xml-based version", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/13", + "state": "CLOSED", + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "assignees": [ + "samans", + "JonasAhl" + ], + "labels": [], + "body": "", + "createdAt": "2022-03-10T12:26:46Z", + "updatedAt": "2022-04-14T10:15:24Z", + "closedAt": "2022-04-14T10:15:24Z", + "comments": [ + { + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "body": "Successfully done. MD-file/text-file in Github is now the latest version.", + "createdAt": "2022-04-14T10:15:24Z", + "updatedAt": "2022-04-14T10:15:24Z" + } + ] + }, + { + "number": 15, + "id": "I_kwDOGF2QDc5HyT4k", + "title": "Add supporting-network & supporting-node for the two \"RLT\" termination points in the examples", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/15", + "state": "CLOSED", + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "assignees": [], + "labels": [], + "body": "", + "createdAt": "2022-04-14T10:45:29Z", + "updatedAt": "2022-04-21T10:12:51Z", + "closedAt": "2022-04-21T10:12:51Z", + "comments": [ + { + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "body": "One instance of supporting-network under mw-network and one instance supporting-node for each node, mw-N1 and mw-N2.", + "createdAt": "2022-04-14T10:50:55Z", + "updatedAt": "2022-04-14T10:50:55Z" + }, + { + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "body": "Make sure that all examples are updated accordingly", + "createdAt": "2022-04-14T10:53:22Z", + "updatedAt": "2022-04-14T10:53:22Z" + }, + { + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "body": "The leafs have been added to the examples and been successfully validate.", + "createdAt": "2022-04-21T10:11:35Z", + "updatedAt": "2022-04-21T10:11:35Z" + } + ] + }, + { + "number": 16, + "id": "I_kwDOGF2QDc5HyXzM", + "title": "Open up a repository for RFC8561 bis", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/16", + "state": "CLOSED", + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "assignees": [], + "labels": [], + "body": "Look into how band/carrier aggregation can be supported by an update of RFC8561.", + "createdAt": "2022-04-14T11:03:19Z", + "updatedAt": "2022-04-14T14:07:35Z", + "closedAt": "2022-04-14T14:07:35Z", + "comments": [ + { + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "body": "https://github.com/samans/draft-ybam-rfc8561bis\r\nUse the above repository for work on the draft for rfc8561bis.", + "createdAt": "2022-04-14T14:07:35Z", + "updatedAt": "2022-04-14T14:07:35Z" + } + ] + }, + { + "number": 17, + "id": "I_kwDOGF2QDc5IK5la", + "title": "Inconsistencies in the examples", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/17", + "state": "CLOSED", + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "assignees": [ + "DanielaSpreafico" + ], + "labels": [], + "body": "Go through the two examples to remove any inconsistences wrt to the type of configurations and associated frequencies.", + "createdAt": "2022-04-21T10:15:11Z", + "updatedAt": "2022-04-28T10:50:00Z", + "closedAt": "2022-04-28T10:49:59Z", + "comments": [ + { + "author": "DanielaSpreafico", + "authorAssociation": "CONTRIBUTOR", + "body": "I found the following inconsistencies on example-fold.json (2+0 case) on \"ietf-interfaces:interfaces\" section:\r\n\r\n 1. \"interface\": [\r\n ..\r\n ..\r\n {\r\n \"name\": \"RLT-1\",\r\n \"description\": \"'Radio Link Terminal 1'\",\r\n \"type\": \"iana-if-type:microwaveRadioLinkTerminal\",\r\n \"ietf-microwave-radio-link:mode\":\r\n \"ietf-microwave-types:**one-plus-zero\",** --> to be changed to **two-plus-zero**\r\n\r\nThe same for RLT-2.\r\n\r\n2. The 'tx-frequency' attribute values for CT-2/CT-3/CT-4 need to be changed according to the 'tx-frequency' \r\n and 'rx-frequency' attributes of 'te-link-attributes' :\r\n \r\n \"interface\": [\r\n ...\r\n \"name\": \"CT-3\",\r\n ...\r\n \"ietf-microwave-radio-link:tx-frequency\": **10728000**, --> **10528000**\r\n ...\r\n \"name\": \"CT-2\",\r\n ...\r\n \"ietf-microwave-radio-link:tx-frequency\": **10728000**, --> **10615000**\r\n ...\r\n \"name\": \"CT-4\",\r\n ...\r\n \"ietf-microwave-radio-link:tx-frequency\": **10728000**, --> **10415000**", + "createdAt": "2022-04-22T13:57:58Z", + "updatedAt": "2022-04-22T13:57:58Z" + }, + { + "author": "DanielaSpreafico", + "authorAssociation": "CONTRIBUTOR", + "body": "These inconsistencies were present on the actual draft.", + "createdAt": "2022-04-22T14:04:31Z", + "updatedAt": "2022-04-22T14:04:31Z" + }, + { + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "body": "The updates were made to the 2+0 json example.", + "createdAt": "2022-04-28T10:49:59Z", + "updatedAt": "2022-04-28T10:49:59Z" + } + ] + }, + { + "number": 18, + "id": "I_kwDOGF2QDc5IK6z6", + "title": "Pictures for the examples", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/18", + "state": "CLOSED", + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "assignees": [ + "samans" + ], + "labels": [], + "body": "Add a picture to illustrate the configuration in the second JSON example.", + "createdAt": "2022-04-21T10:19:16Z", + "updatedAt": "2022-04-28T10:49:31Z", + "closedAt": "2022-04-28T10:49:31Z", + "comments": [ + { + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "body": "The existing figure is valid for both 1+1 and 2+0, so modify text to indicate that. A new action to create small diagrams to show difference in instance data between 1+1 and 2+0 will be created.", + "createdAt": "2022-04-28T10:49:31Z", + "updatedAt": "2022-04-28T10:49:31Z" + } + ] + }, + { + "number": 19, + "id": "I_kwDOGF2QDc5ILAJT", + "title": "Create SVG versions of the diagrams/pictures in the two examples", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/19", + "state": "CLOSED", + "author": "JonasAhl", + "authorAssociation": "CONTRIBUTOR", + "assignees": [ + "samans" + ], + "labels": [], + "body": "", + "createdAt": "2022-04-21T10:37:52Z", + "updatedAt": "2022-04-28T10:47:40Z", + "closedAt": "2022-04-28T10:47:40Z", + "comments": [ + { + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "body": "Information about SVG files...\r\n\r\n```raw\r\nFor svg art-work, do this in the xml code...\r\n \r\n \r\n \r\n \r\n \r\n```\r\n\r\nMarkdown doesn't support the artset\r\nhttps://www.ietf.org/archive/id/draft-fossati-svg-test-01.html\r\n\r\ngoat (ascii to svg) can't get this to install.\r\nhttps://xml2rfc.tools.ietf.org/xml2rfc3.html\r\nhttps://www.rfc-editor.org/rse/wiki/doku.php?id=svg_files\r\nhttps://www.rfc-editor.org/materials/FAQ-xml2rfcv3.html#name-how-do-i-generate-svg-that\r\n", + "createdAt": "2022-04-21T12:14:15Z", + "updatedAt": "2022-04-21T12:18:22Z" + }, + { + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "body": "Discussion related to diagrams, add new action to fix legend. (a new action item will be created with the list of updates)\r\nProcess is to run makefile to generate xml file, then modify xml file to include artset.\r\ngoat works but does not provide a good representation of the ascii art we currently have. So use the hand drawn svg for the svg version.", + "createdAt": "2022-04-28T10:47:40Z", + "updatedAt": "2022-04-28T10:47:40Z" + } + ] + }, + { + "number": 20, + "id": "I_kwDOGF2QDc5IoZeJ", + "title": "JSON instance file fold and unfold tooling", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/20", + "state": "CLOSED", + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "assignees": [ + "italobusi" + ], + "labels": [], + "body": "Provide information on the tools related to folding and unfolding JSON instance files.\r\nAlso provide a pointer to the guidelines for extracting JSON instance files without using ...", + "createdAt": "2022-04-28T10:51:38Z", + "updatedAt": "2022-05-10T18:21:49Z", + "closedAt": "2022-05-10T18:21:49Z", + "comments": [ + { + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "body": "merging, txt file will be deleted and regenerated.", + "createdAt": "2022-05-10T18:21:49Z", + "updatedAt": "2022-05-10T18:21:49Z" + } + ] + }, + { + "number": 21, + "id": "I_kwDOGF2QDc5IoaUD", + "title": "Example Diagrams", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/21", + "state": "CLOSED", + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "assignees": [ + "samans" + ], + "labels": [], + "body": "To the SVG diagram for examples add a legend. Differentiate the the lines used (need a new line style for tp-to-interface-path.\r\n\r\nModify the text describing the diagram (that it is for both examples).\r\n\r\nAdd text above the instance data to describe what the example is showing.\r\n\r\nCreate a small diagram that graphically represents what is different between the instance data in each example.", + "createdAt": "2022-04-28T10:55:10Z", + "updatedAt": "2022-05-10T19:28:01Z", + "closedAt": "2022-05-10T19:28:00Z", + "comments": [ + { + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "body": "Updated with folding and supporting the SVG for html version.", + "createdAt": "2022-05-10T19:28:00Z", + "updatedAt": "2022-05-10T19:28:00Z" + } + ] + }, + { + "number": 23, + "id": "I_kwDOGF2QDc5Ralsr", + "title": "Replace type from 8561bis to topology model", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/23", + "state": "CLOSED", + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "assignees": [ + "italobusi" + ], + "labels": [], + "body": "decouple the 68561bis work from the mw-topo-yang work.", + "createdAt": "2022-09-08T09:47:50Z", + "updatedAt": "2022-10-20T17:13:34Z", + "closedAt": "2022-10-20T17:13:34Z", + "comments": [] + }, + { + "number": 25, + "id": "I_kwDOGF2QDc5XruD9", + "title": "Clean-up the repository", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/25", + "state": "CLOSED", + "author": "italobusi", + "authorAssociation": "MEMBER", + "assignees": [], + "labels": [], + "body": "After the updated draft is available (see issue #5), clean-up the repository, e.g.:\r\n- remove YANG and tree files not needed", + "createdAt": "2022-12-01T10:39:07Z", + "updatedAt": "2022-12-08T10:50:56Z", + "closedAt": "2022-12-08T10:50:56Z", + "comments": [] + }, + { + "number": 26, + "id": "I_kwDOGF2QDc5YeNNj", + "title": "tree files for all three projects", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/26", + "state": "CLOSED", + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "assignees": [ + "samans" + ], + "labels": [], + "body": "Create full tree files for each project, then edit down to only the elements that are related to the project. For example in if-ref ...\r\n\r\nmodule: ietf-te-topology\r\n...\r\n augment /nw:networks/nw:network/nw:node/nt:termination-point:\r\n +--rw te-tp-id? te-types:te-tp-id\r\n +--rw te!\r\n...\r\n +--rw name? string\r\n...\r\n +--rw ifref:tp-to-interface-path? -> /if:interfaces/interface/name", + "createdAt": "2022-12-08T10:37:37Z", + "updatedAt": "2023-03-06T15:40:35Z", + "closedAt": "2023-03-06T15:40:35Z", + "comments": [] + }, + { + "number": 27, + "id": "I_kwDOGF2QDc5ZTQDn", + "title": "Example updates", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/27", + "state": "CLOSED", + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "assignees": [ + "samans", + "DanielaSpreafico" + ], + "labels": [], + "body": "Provide updated example in the mw-topo-yang draft that includes the use of if-ref-topo-yang and bwa-topo-yang. Add the bwa-topo-yang and if-ref-topo-yang as an informative reference.\r\n\r\nPut the geolocation data in the node instead of the termination-point. The te-topology model supports adding the geolocation data to nodes.", + "createdAt": "2022-12-15T10:55:12Z", + "updatedAt": "2023-03-06T15:40:27Z", + "closedAt": "2023-03-06T15:40:27Z", + "comments": [ + { + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "body": "Take the example1plus1.json and example2plus0.json examples from https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/ and remove the interface-reference and bandwidth-availability elements.\r\nCreate a generic example for interface-reference and bandwidth-availability for use in their respective drafts.\r\nMaintain a combined example (that includes mw, bwa, and if-ref) that can be used in presentations to show how to use the drafts together.", + "createdAt": "2023-01-12T10:47:52Z", + "updatedAt": "2023-01-12T10:47:52Z" + }, + { + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "body": "Validate all examples", + "createdAt": "2023-01-12T10:52:16Z", + "updatedAt": "2023-01-12T10:52:16Z" + }, + { + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "body": "- Question on the example related to geo-location information associated with the termination-point. Put the geolocation data in the node instead of the termination-point. The te-topology model supports adding the geolocation data to nodes.", + "createdAt": "2023-01-12T10:57:01Z", + "updatedAt": "2023-01-12T10:57:01Z" + }, + { + "author": "DanielaSpreafico", + "authorAssociation": "CONTRIBUTOR", + "body": "A new example file exampleInterfRef.json has been uploaded on a new branch on [draft-ietf-ccamp-if-ref-topo-yang](https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-if-ref-topo-yang) and submitted a pull request for that.\r\n\r\nFor the new example exampleBwa.json the file has been uploaded directly on the branch Generic-drafts.\r\n\r\nFor the update of [draft-ietf-ccamp-mw-topo-yang](https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang) new files (example1plus1-withoutBwaInterfRef.json and example2plus0-withoutBwaInterfRef.json ) have been uploaded on the branch Generic-drafts.\r\n\r\nChecks are needed for all files.\r\n", + "createdAt": "2023-01-19T09:10:39Z", + "updatedAt": "2023-01-19T09:10:39Z" + } + ] + }, + { + "number": 28, + "id": "I_kwDOGF2QDc5bOaJX", + "title": "Align introduction text in all drafts", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/28", + "state": "CLOSED", + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "assignees": [ + "samans" + ], + "labels": [], + "body": "", + "createdAt": "2023-01-12T10:52:49Z", + "updatedAt": "2023-03-06T15:40:22Z", + "closedAt": "2023-03-06T15:40:22Z", + "comments": [] + }, + { + "number": 29, + "id": "I_kwDOGF2QDc5bOamU", + "title": "Clean-up drafts", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/29", + "state": "CLOSED", + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "assignees": [ + "samans", + "JonasAhl" + ], + "labels": [], + "body": "- Clean-up and review drafts\r\n - edit the tree files to include only the branches and leafs necessary (by hand)\r\n - revisions of the imports and references\r\n - clean up any idnits (copyright dates, boiler plate)\r\n - ensure the rfcstrip for yang files produces yang files that validate with pyang\r\n - ensure the version numbering of the yang files is correct", + "createdAt": "2023-01-12T10:54:10Z", + "updatedAt": "2023-03-06T15:40:16Z", + "closedAt": "2023-03-06T15:40:16Z", + "comments": [] + }, + { + "number": 30, + "id": "I_kwDOGF2QDc5bOazh", + "title": "Drafts loaded on datatracker", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/issues/30", + "state": "CLOSED", + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "assignees": [], + "labels": [], + "body": "Before the IETF 116 cutoff (13 Mar 2023)\r\nRequest Last Call", + "createdAt": "2023-01-12T10:54:47Z", + "updatedAt": "2023-03-06T15:40:08Z", + "closedAt": "2023-03-06T15:40:08Z", + "comments": [] + } + ], + "pulls": [ + { + "number": 14, + "id": "PR_kwDOGF2QDc41eJCS", + "title": "Proposal for ETH TE Topology in Appendix A ", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/pull/14", + "state": "CLOSED", + "author": "italobusi", + "authorAssociation": "MEMBER", + "assignees": [], + "labels": [], + "body": "Proposed changes to the JSON example in Appendix A to use the ETH TE Topology instead of the L2 Topology model: fix #10 \r\n", + "createdAt": "2022-04-01T08:31:01Z", + "updatedAt": "2022-04-14T10:19:18Z", + "baseRepository": "ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang", + "baseRefName": "main", + "baseRefOid": "241f0debd8611858a2cd32c46cf0f3c1d3118ad7", + "headRepository": "italobusi/draft-ietf-ccamp-mw-topo-yang", + "headRefName": "eth-te-topo", + "headRefOid": "8c3c35e2033ae071420b8bfbb01d00441267ce6f", + "closedAt": "2022-04-08T12:54:02Z", + "mergedAt": null, + "mergedBy": null, + "mergeCommit": null, + "comments": [ + { + "author": "italobusi", + "authorAssociation": "MEMBER", + "body": "@samans : could you also check that the JSON example can be validated using yanglint?", + "createdAt": "2022-04-01T08:32:06Z", + "updatedAt": "2022-04-01T08:32:06Z" + }, + { + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "body": "The JSON example passes yanglint. I had to modify the expect script to include the ietf-eth-te-topology and ietf-eth-tran-types modules. The file produced by yanglint is attached\r\n[example-yanglint.txt](https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/files/8445976/example-yanglint.txt)\r\n.", + "createdAt": "2022-04-07T19:36:55Z", + "updatedAt": "2022-04-07T19:36:55Z" + }, + { + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "body": "I integrated the changes, but made further modifications. So closed this pull request.", + "createdAt": "2022-04-08T12:54:39Z", + "updatedAt": "2022-04-08T12:54:39Z" + } + ], + "reviews": [] + }, + { + "number": 22, + "id": "PR_kwDOGF2QDc43Ix0-", + "title": "Folding JSON examples", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/pull/22", + "state": "CLOSED", + "author": "italobusi", + "authorAssociation": "MEMBER", + "assignees": [], + "labels": [], + "body": "Folding JSON examples using RFC 8792 tool\r\n\r\nUse artwork and sourcecode kramdown instructions for RFC strip\r\n\r\nNote 1: RFC 8792 provides instructions (and shell sript) for folding/unfolding files\r\n\r\nNote 2: rfcstrip will extract YANG code from txt files and other files (e.g., folded JSON examples) from xml files\r\n\r\nFix #20 \r\n", + "createdAt": "2022-05-01T22:04:47Z", + "updatedAt": "2022-10-12T10:23:52Z", + "baseRepository": "ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang", + "baseRefName": "main", + "baseRefOid": "eef4f0e384f001a06fa93d1b2323447f63fc8950", + "headRepository": "italobusi/draft-ietf-ccamp-mw-topo-yang", + "headRefName": "rfcfold", + "headRefOid": "43a093e3183878aced20a48e0abf12c69c31bb5f", + "closedAt": "2022-05-10T18:31:15Z", + "mergedAt": null, + "mergedBy": null, + "mergeCommit": null, + "comments": [ + { + "author": "samans", + "authorAssociation": "CONTRIBUTOR", + "body": "Closed this without merging. Will make the changes and then push the changes.", + "createdAt": "2022-05-10T18:31:59Z", + "updatedAt": "2022-05-10T18:31:59Z" + } + ], + "reviews": [] + }, + { + "number": 24, + "id": "PR_kwDOGF2QDc5ApAs7", + "title": "Updated RLT mode", + "url": "https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang/pull/24", + "state": "MERGED", + "author": "italobusi", + "authorAssociation": "MEMBER", + "assignees": [], + "labels": [], + "body": "Updated RLT mode definition: fix #23", + "createdAt": "2022-10-12T10:46:36Z", + "updatedAt": "2022-10-21T09:10:12Z", + "baseRepository": "ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang", + "baseRefName": "main", + "baseRefOid": "6e7b271779cf3ef50ab4e6f7217def682df2e872", + "headRepository": "italobusi/draft-ietf-ccamp-mw-topo-yang", + "headRefName": "rlt-mode", + "headRefOid": "f3f47dc320ac530bcae53edf58548ae4848ac361", + "closedAt": "2022-10-20T17:13:33Z", + "mergedAt": "2022-10-20T17:13:33Z", + "mergedBy": "samans", + "mergeCommit": { + "oid": "063a2ee292f74e9777c37817379b9d41b3d32f51" + }, + "comments": [ + { + "author": "italobusi", + "authorAssociation": "MEMBER", + "body": "@samans : I cannot run the make file on my machine, maybe this is the reason why checks fail", + "createdAt": "2022-10-20T10:24:41Z", + "updatedAt": "2022-10-20T10:24:41Z" + } + ], + "reviews": [ + { + "id": "PRR_kwDOGF2QDc5Eh0eW", + "commit": { + "abbreviatedOid": "f3f47dc" + }, + "author": "DanielaSpreafico", + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "body": "No comments. I accept the changes", + "createdAt": "2022-10-20T17:44:35Z", + "updatedAt": "2022-10-20T17:44:35Z", + "comments": [] + } + ] + } + ] +} \ No newline at end of file diff --git a/draft-ietf-ccamp-mw-topo-yang.html b/draft-ietf-ccamp-mw-topo-yang.html new file mode 100644 index 0000000..54a1c13 --- /dev/null +++ b/draft-ietf-ccamp-mw-topo-yang.html @@ -0,0 +1,3235 @@ + + + + + + +A YANG Data Model for Microwave Topology + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Internet-DraftMicrowave Topology YANG ModelMarch 2023
Ahlberg, et al.Expires 7 September 2023[Page]
+
+
+
+
Workgroup:
+
ccamp
+
Internet-Draft:
+
draft-ietf-ccamp-mw-topo-yang-05
+
Published:
+
+ +
+
Intended Status:
+
Standards Track
+
Expires:
+
+
Authors:
+
+
+
J. Ahlberg
+
Ericsson
+
+
+
S. Mansfield
+
Ericsson
+
+
+
M. Ye
+
Huawei Technologies
+
+
+
I. Busi
+
Huawei Technologies
+
+
+
X. Li
+
NEC Laboratories Europe
+
+
+
D. Spreafico
+
Nokia - IT
+
+
+
+
+

A YANG Data Model for Microwave Topology

+
+

Abstract

+

This document defines a YANG data model to describe microwave/millimeter radio links in a network topology.¶

+
+
+

+Discussion Venues +

+

This note is to be removed before publishing as an RFC.¶

+

Source for this draft and an issue tracker can be found at + https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang.¶

+
+
+
+

+Status of This Memo +

+

+ This Internet-Draft is submitted in full conformance with the + provisions of BCP 78 and BCP 79.¶

+

+ Internet-Drafts are working documents of the Internet Engineering Task + Force (IETF). Note that other groups may also distribute working + documents as Internet-Drafts. The list of current Internet-Drafts is + at https://datatracker.ietf.org/drafts/current/.¶

+

+ Internet-Drafts are draft documents valid for a maximum of six months + and may be updated, replaced, or obsoleted by other documents at any + time. It is inappropriate to use Internet-Drafts as reference + material or to cite them other than as "work in progress."¶

+

+ This Internet-Draft will expire on 7 September 2023.¶

+
+
+ +
+
+ â–²

+Table of Contents +

+ +
+
+
+
+

+1. Introduction +

+

This document defines a YANG data model to describe topologies of microwave/millimeter wave (hereafter microwave is used to simplify the text). The YANG data model describes radio links, supporting carrier(s) and the associated termination points. A carrier is a description of a link providing transport capacity over the air by a single carrier. It is typically defined by its transmitting and receiving frequencies. A radio link is a link providing the aggregated transport capacity of the supporting carriers in aggregated and/or protected configurations, which can be used to carry traffic on higher topology layers such as Ethernet and TDM. The model augments "YANG Data Model for Traffic Engineering (TE) Topologies" defined in [RFC8795], which is based on "A YANG Data Model for Network Topologies" defined in [RFC8345].¶

+

The microwave point-to-point radio technology provides connectivity on L0/L1 over a radio link between two termination points, using one or several supporting carriers in aggregated or protected configurations. That application of microwave technology cannot be used to perform cross-connection or switching of the traffic to create network connectivity across multiple microwave radio links. Instead, a payload of traffic on higher topology layers, normally L2 Ethernet, is carried over the microwave radio link and when the microwave radio link is terminated at the endpoints, cross-connection and switching can be performed on that higher layer creating connectivity across multiple supporting microwave radio links.¶

+

The microwave topology model is expected to be used between a Provisioning Network Controller (PNC) and a Multi Domain Service Coordinator(MDSC) [RFC8453]. Examples of use cases that can be supported are:¶

+
    +
  1. Correlation between microwave radio links and the supported links on higher topology layers. e.g. an L2 Ethernet topology. This information can be used to understand how changes in the performance/status of a microwave radio link affect traffic on higher layers.¶ +
  2. +
  3. Propagation of relevant characteristics of a microwave radio link, such as bandwidth, to higher topology layers, where it e.g. could be used as a criterion when configuring and optimizing a path for a connection/service through the network end to end.¶ +
  4. +
  5. Optimization of the microwave radio link configurations on a network level, e.g. with the purpose to minimize overall interference and/or maximize the overall capacity provided by the links.¶ +
  6. +
+
+
+

+1.1. Terminology and Definitions +

+

The following acronyms are used in this document:¶

+

PNC Provisioning Network Controller¶

+

MDSC Multi Domain Service Coordinator¶

+
+
+
+
+

+1.2. Tree Structure +

+

A simplified graphical representation of the data model is used in chapter 3.1 of this document. The meaning of the symbols in these diagrams is defined in [RFC8340].¶

+
+
+
+
+
+
+

+2. Requirements Language +

+

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶

+
+
+
+
+

+3. Microwave Topology YANG Data Model +

+
+
+

+3.1. YANG Tree +

+
+
+module: ietf-microwave-topology
+
+  augment /nw:networks/nw:network/nw:network-types/tet:te-topology:
+    +--rw mw-topology!
+  augment /nw:networks/nw:network/nw:node/nt:termination-point
+            /tet:te:
+    +--rw mw-tp-choice
+       +--rw (mw-tp-option)?
+          +--:(microwave-rltp)
+          |  +--rw microwave-rltp!
+          |     +---u microwave-rltp-attributes
+          +--:(microwave-ctp)
+             +--rw microwave-ctp!
+                +---u microwave-ctp-attributes
+  augment /nw:networks/nw:network/nt:link/tet:te
+            /tet:te-link-attributes:
+    +--rw mw-link-choice
+       +--rw (mw-link-option)?
+          +--:(microwave-radio-link)
+          |  +--rw microwave-radio-link!
+          |     +---u microwave-radio-link-attributes
+          +--:(microwave-carrier)
+             +--rw microwave-carrier!
+                +---u microwave-carrier-attributes
+  augment /nw:networks/nw:network/nt:link/tet:te
+            /tet:te-link-attributes/tet:max-link-bandwidth
+            /tet:te-bandwidth/tet:technology:
+    +--:(microwave)
+       +---u microwave-bandwidth
+
¶ +
+
+
+ +
+
+

+3.3. Relationship with client topology model +

+

A microwave radio link carries a payload of traffic on higher topology layers, normally L2 Ethernet. The leafs supporting-network, supporting-node, supporting-link, and supporting-termination-point in the generic YANG module for Network Topologies [RFC8345] are expected to be used to model a relationship/dependency from higher topology layers to a supporting microwave radio link topology layer. Appendix A includes JSON examples of an L2 Ethernet link transported over one supporting microwave link.¶

+
+
+
+
+

+3.4. Applicability of the Data Model for Traffic Engineering (TE) Topologies +

+

Since microwave is a point-to-point radio technology providing connectivity on L0/L1 over a radio link between two termination points and cannot be used to perform cross-connection or switching of the traffic to create network connectivity across multiple microwave radio links, a majority of the leafs in the Data Model for Traffic Engineering (TE) Topologies augmented by the microwave topology model are not applicable. An example of which leafs are considered applicable can be found in appendices Appendix A and Appendix B in this document.¶

+

More specifically, admin-status and oper-status are recommended to be reported for links only. Status for termination points can be used when links are inter-domain and when the status of only one side of link is known, but since microwave is a point-to-point technology where both ends normally belong to the same domain it is not expected to be applicable in normal cases. Furthermore, admin-status is not applicable for microwave radio links. Enable and disable of a radio link is instead done in the constituent carriers.¶

+
+
+
+
+

+3.5. Microwave Topology YANG Module +

+
+
<CODE BEGINS> file "ietf-microwave-topology.yang"
+
+ module ietf-microwave-topology {
+   yang-version "1.1";
+   namespace
+   "urn:ietf:params:xml:ns:yang:ietf-microwave-topology";
+
+   prefix "mwtopo";
+
+   import ietf-network {
+     prefix "nw";
+     reference "RFC 8345: A YANG Data Model for Network Topologies";
+   }
+
+   import ietf-network-topology {
+     prefix "nt";
+     reference "RFC 8345: A YANG Data Model for Network Topologies";
+   }
+
+   import ietf-te-topology {
+     prefix "tet";
+     reference "RFC 8795: YANG Data Model for Traffic Engineering
+                (TE) Topologies";
+   }
+
+   import ietf-microwave-types {
+     prefix mw-types;
+     reference "RFC 8561";
+   }
+
+   organization
+     "Internet Engineering Task Force (IETF) CCAMP WG";
+   contact
+    "WG Web: <https://datatracker.ietf.org/wg/ccamp/>
+     WG List: <mailto:ccamp@ietf.org>
+
+      Editor: Jonas Ahlberg
+              <mailto:jonas.ahlberg@ericsson.com>
+      Editor: Scott Mansfield
+              <mailto:scott.mansfield@ericsson.com>
+      Editor: Min Ye
+              <mailto:amy.yemin@huawei.com>
+      Editor: Italo Busi
+              <mailto:Italo.Busi@huawei.com>
+      Editor: Xi Li
+              <mailto:Xi.Li@neclab.eu>
+      Editor: Daniela Spreafico
+              <mailto:daniela.spreafico@nokia.com>
+     ";
+
+   description
+     "This is a module for microwave topology.
+
+     Copyright (c) 2023 IETF Trust and the persons
+     identified as authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Revised BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (https://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC XXXX; see
+     the RFC itself for full legal notices.";
+
+   revision 2023-02-15   {
+     description
+     "Draft to be used as a basis for the continued microwave
+      team discussions";
+     reference "";
+   }
+
+   grouping rlt-mode {
+     description
+       "This grouping provides a flexible definition of number
+       of bonded carriers and protecting carriers of a radio
+       link.";
+     leaf num-bonded-carriers {
+       type uint32;
+       mandatory true;
+       description
+         "Number of bonded carriers.";
+     }
+     leaf num-protecting-carriers {
+       type uint32;
+       mandatory true;
+       description
+         "Number of protecting carriers.";
+     }
+   }
+
+   grouping microwave-radio-link-attributes {
+     description "Grouping used for attributes describing a microwave
+                  radio link.";
+     container rlt-mode {
+       description
+         "This grouping provides a flexible definition of number
+         of bonded carriers and protecting carriers of a radio
+         link.";
+       uses rlt-mode;
+     }
+   }
+
+   grouping microwave-carrier-attributes {
+     description "Grouping used for attributes describing a microwave
+                  carrier.";
+     leaf tx-frequency {
+       type uint32;
+       units "kHz";
+       description
+         "Selected transmitter frequency.
+          Related to the data node tx-frequency in RFC 8561.";
+       reference
+         "RFC 8561: A YANG Data Model for Microwave Radio Link";
+     }
+     leaf rx-frequency {
+       type uint32;
+       units "kHz";
+       description
+         "Selected receiver frequency.
+          Related to the data node actual-rx-frequency in RFC 8561.";
+       reference
+         "RFC 8561: A YANG Data Model for Microwave Radio Link";
+     }
+     leaf channel-separation {
+       type uint32;
+       units "kHz";
+       description
+         "The amount of bandwidth allocated to a carrier.  The
+          distance between adjacent channels in a radio
+          frequency channels arrangement.
+          Related to the data node channel-separation in RFC 8561.";
+       reference
+         "ETSI EN 302 217-1 and
+          RFC 8561: A YANG Data Model for Microwave Radio Link";
+     }
+     leaf actual-tx-cm {
+       type identityref {
+         base mw-types:coding-modulation;
+       }
+       config false;
+       description
+         "Actual coding/modulation in transmitting direction.
+          Related to the data node actual-tx-cm in RFC 8561.";
+       reference
+         "RFC 8561: A YANG Data Model for Microwave Radio Link";
+     }
+     leaf actual-snir {
+       type decimal64 {
+         fraction-digits 1;
+         range "0..99";
+       }
+       units "dB";
+       config false;
+       description
+         "Actual signal to noise plus the interference ratio
+          (0.1 dB resolution).
+          Related to the data node actual-snir in RFC 8561.";
+       reference
+         "RFC 8561: A YANG Data Model for Microwave Radio Link";
+     }
+     leaf actual-transmitted-level {
+       type decimal64 {
+         fraction-digits 1;
+         range "0..99";
+       }
+       units "dBm";
+       config false;
+       description
+         "Actual transmitted power level (0.1 dBm resolution).
+          Related to the data node actual-transmitted-level
+          in RFC 8561.";
+       reference
+         "ETSI EN 301 129 and
+          RFC 8561: A YANG Data Model for Microwave Radio Link";
+     }
+   }
+
+   grouping microwave-bandwidth {
+     description "Grouping used for microwave bandwidth.";
+     leaf mw-bandwidth {
+       type uint64;
+       units "Kbps";
+       config false;
+       description
+         "Nominal microwave radio link and carrier bandwidth.";
+     }
+   }
+
+   augment "/nw:networks/nw:network/nw:network-types/"
+           + "tet:te-topology" {
+     description
+       "Augment network types to define a microwave network
+        topology type.";
+     container mw-topology {
+       presence "Indicates a topology type of microwave.";
+       description "Microwave topology type";
+     }
+   }
+
+   augment "/nw:networks/nw:network/nw:node/nt:termination-point/"
+           + "tet:te" {
+     when '../../../nw:network-types/tet:te-topology/'
+          + 'mwtopo:mw-topology' {
+       description
+         "Augmentation parameters apply only for networks with an
+          microwave network topology type.";
+     }
+     description
+       "Augmentation to add microwave technology specific
+        characteristics to a termination point.";
+     container mw-tp-choice {
+       description "Specification of type of termination point.";
+       choice mw-tp-option {
+         description "Selection of type of termination point.";
+         case microwave-rltp {
+           container "microwave-rltp" {
+             presence
+               "Denotes a microwave radio link termination point.
+                It corresponds to a microwave RLT interface as
+                defined in RFC 8561.";
+             description
+               "Denotes and describes a microwave radio link
+                termination point.";
+           }
+         }
+         case microwave-ctp {
+           container "microwave-ctp" {
+             presence
+               "Denotes a microwave carrier termination point.
+                It corresponds to a microwave CT interface as
+                defined in RFC 8561.";
+             description
+               "Denotes and describes a microwave carrier
+                termination point.";
+           }
+         }
+       }
+     }
+   }
+
+   augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:te-link-attributes" {
+     when '../../../nw:network-types/tet:te-topology/'
+        + 'mwtopo:mw-topology' {
+       description
+         "Augmentation parameters apply only for networks with an
+          microwave network topology type.";
+     }
+     description
+       "Augmentation to add microwave technology specific
+        characteristics to a link.";
+     container mw-link-choice {
+       description "Specification of type of link.";
+       choice mw-link-option {
+         description "Selection of type of link.";
+         case microwave-radio-link {
+           container "microwave-radio-link" {
+             presence
+               "Denotes a microwave radio link";
+             uses microwave-radio-link-attributes;
+             description
+               "Denotes and describes a microwave radio link";
+           }
+         }
+         case microwave-carrier {
+           container "microwave-carrier" {
+             presence "Denotes a microwave carrier";
+             uses microwave-carrier-attributes;
+             description "Denotes and describes a microwave carrier";
+           }
+         }
+       }
+     }
+   }
+
+   augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:te-link-attributes/"
+           + "tet:max-link-bandwidth/"
+           + "tet:te-bandwidth/tet:technology" {
+     when '../../../../../nw:network-types/tet:te-topology/'
+          + 'mwtopo:mw-topology' {
+       description
+         "Augmentation parameters apply only for networks with an
+          microwave network topology type.";
+     }
+     description
+       "Augmentation for TE bandwidth.";
+     case microwave {
+      uses microwave-bandwidth;
+     }
+   }
+ }
+
+<CODE ENDS>
¶ +
+
+
+
+
+
+
+

+4. Security Considerations +

+

The YANG module specified in this document defines schemas for data + that is designed to be accessed via network management protocols such + as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer + is the secure transport layer, and the mandatory-to-implement secure + transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer + is HTTPS, and the mandatory-to-implement secure transport is TLS + [RFC8446].¶

+

The NETCONF access control model [RFC8341] provides the means to + restrict access for particular NETCONF or RESTCONF users to a + preconfigured subset of all available NETCONF or RESTCONF protocol + operations and content.¶

+

The YANG module specified in this document imports and augments the + ietf-network and ietf-network-topology models defined in [RFC8345]. + The security considerations from [RFC8345] are applicable to the + module in this document.¶

+

There are a several data nodes defined in this YANG module that are + writable/creatable/deletable (i.e., config true, which is the + default). These data nodes may be considered sensitive or vulnerable + in some network environments. Write operations (e.g., edit-config) + to these data nodes without proper protection can have a negative + effect on network operations. These are the subtrees and data nodes + and their sensitivity/vulnerability:¶

+
    +
  • rlt-mode: A malicious client could attempt to modify the mode in + which the radio link is configured and thereby change the + intended behaviour of the link.¶ +
  • +
  • tx-frequency, rx-frequency and channel-separation: A malicious + client could attempt to modify the frequency configuration of + a carrier which could modify the intended behaviour or make + the configurtion invalid and thereby stop the operation of it.¶ +
  • +
+
+
+
+
+

+5. IANA Considerations +

+

IANA is asked to assign a new URI from the "IETF XML Registry" [RFC3688] as follows:¶

+
+
+URI: urn:ietf:params:xml:ns:yang:ietf-microwave-topology
+Registrant Contact: The IESG
+XML: N/A; the requested URI is an XML namespace.
+
¶ +
+

It is proposed that IANA should record YANG module names in the "YANG + Module Names" registry [RFC6020] as follows:¶

+
+
+    Name: ietf-microwave-topology
+    Maintained by IANA?: N
+    Namespace: urn:ietf:params:xml:ns:yang:ietf-microwave-topology
+    Prefix: mwtopo
+    Reference: RFC XXXX
+
¶ +
+
+
+
+

+6. References +

+
+

+6.1. Normative References +

+
+
[RFC2119]
+
+Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, , <https://www.rfc-editor.org/rfc/rfc2119>.
+
+
[RFC3688]
+
+Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, DOI 10.17487/RFC3688, , <https://www.rfc-editor.org/rfc/rfc3688>.
+
+
[RFC6020]
+
+Bjorklund, M., Ed., "YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)", RFC 6020, DOI 10.17487/RFC6020, , <https://www.rfc-editor.org/rfc/rfc6020>.
+
+
[RFC6241]
+
+Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., and A. Bierman, Ed., "Network Configuration Protocol (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, , <https://www.rfc-editor.org/rfc/rfc6241>.
+
+
[RFC6242]
+
+Wasserman, M., "Using the NETCONF Protocol over Secure Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, , <https://www.rfc-editor.org/rfc/rfc6242>.
+
+
[RFC8040]
+
+Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF Protocol", RFC 8040, DOI 10.17487/RFC8040, , <https://www.rfc-editor.org/rfc/rfc8040>.
+
+
[RFC8174]
+
+Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, , <https://www.rfc-editor.org/rfc/rfc8174>.
+
+
[RFC8341]
+
+Bierman, A. and M. Bjorklund, "Network Configuration Access Control Model", STD 91, RFC 8341, DOI 10.17487/RFC8341, , <https://www.rfc-editor.org/rfc/rfc8341>.
+
+
[RFC8345]
+
+Clemm, A., Medved, J., Varga, R., Bahadur, N., Ananthakrishnan, H., and X. Liu, "A YANG Data Model for Network Topologies", RFC 8345, DOI 10.17487/RFC8345, , <https://www.rfc-editor.org/rfc/rfc8345>.
+
+
[RFC8446]
+
+Rescorla, E., "The Transport Layer Security (TLS) Protocol Version 1.3", RFC 8446, DOI 10.17487/RFC8446, , <https://www.rfc-editor.org/rfc/rfc8446>.
+
+
[RFC8795]
+
+Liu, X., Bryskin, I., Beeram, V., Saad, T., Shah, H., and O. Gonzalez de Dios, "YANG Data Model for Traffic Engineering (TE) Topologies", RFC 8795, DOI 10.17487/RFC8795, , <https://www.rfc-editor.org/rfc/rfc8795>.
+
+
+
+
+

+6.2. Informative References +

+
+
[RFC8340]
+
+Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", BCP 215, RFC 8340, DOI 10.17487/RFC8340, , <https://www.rfc-editor.org/rfc/rfc8340>.
+
+
[RFC8453]
+
+Ceccarelli, D., Ed. and Y. Lee, Ed., "Framework for Abstraction and Control of TE Networks (ACTN)", RFC 8453, DOI 10.17487/RFC8453, , <https://www.rfc-editor.org/rfc/rfc8453>.
+
+
[RFC8944]
+
+Dong, J., Wei, X., Wu, Q., Boucadair, M., and A. Liu, "A YANG Data Model for Layer 2 Network Topologies", RFC 8944, DOI 10.17487/RFC8944, , <https://www.rfc-editor.org/rfc/rfc8944>.
+
+
+
+
+
+
+

+Appendix A. Microwave Topology Model with base topology models +

+

This appendix provides some examples and illustrations of how the Microwave Topology Model can be used. The tree illustrates an example of a complete Microwave Topology Model including the relevant data nodes from network-topology and te-topology (base topology models). There are also JSON based instantiations of the Microwave Topology Model for a couple of small network examples.¶

+

The tree below shows an example of the relevant leafs for a complete Microwave Topology Model including the augmented Network Topology Model defined in [RFC8345] and the Traffic Engineering (TE) Topologies model defined in [RFC8795].¶

+
+
+module: ietf-network
+  +--rw networks
+     +--rw network* [network-id]
+        +--rw network-id                network-id
+        +--rw network-types
+        |  +--rw tet:te-topology!
+        |     +--rw mwtopo:mw-topology!
+        +--rw supporting-network* [network-ref]
+        |  +--rw network-ref
+        |          -> /nw:networks/nw:network/nw:network-id
+        +--rw node* [node-id]
+        |  +--rw node-id               node-id
+        |  +--rw supporting-node* [network-ref node-ref]
+        |  |  +--rw network-ref
+        |  |  |      -> ../../../nw:supporting-network/nw:network-ref
+        |  |  +--rw node-ref
+        |  |          -> /nw:networks/nw:network/nw:node/nw:node-id
+        |  +--rw nt:termination-point* [tp-id]
+        |  |   +--rw nt:tp-id                              tp-id
+        |  |  +--rw nt:supporting-termination-point*
+        |  |  |       [network-ref node-ref tp-ref]
+        |  |  |  +--rw nt:network-ref
+        |  |  |  |      -> ../../../nw:supporting-node/nw:network-ref
+        |  |  |  +--rw nt:node-ref
+        |  |  |  |       -> ../../../nw:supporting-node/nw:node-ref
+        |  |  |  +--rw nt:tp-ref         leafref
+        |  |  +--rw tet:te!
+        |  |     +--rw tet:admin-status?
+        |  |     |       te-types:te-admin-status
+        |  |     +--rw tet:name?                             string
+        |  |     +--ro tet:oper-status?
+        |  |     |       te-types:te-oper-status
+        |  |     +--rw mwtopo:mw-tp-choice
+        |  |        +--rw (mwtopo:mw-tp-option)?
+        |  |           +--:(mwtopo:microwave-rltp)
+        |  |           |  +--rw mwtopo:microwave-rltp!
+        |  |           +--:(mwtopo:microwave-ctp)
+        |  |              +--rw mwtopo:microwave-ctp!
+        |  +--rw tet:te-node-id?           te-types:te-node-id
+        |  +--rw tet:te!
+        |     +--ro tet:geolocation
+        |        +--ro tet:altitude?    int64
+        |        +--ro tet:latitude?    geographic-coordinate-degree
+        |        +--ro tet:longitude?   geographic-coordinate-degree
+        +--rw nt:link* [link-id]
+           +--rw nt:link-id               link-id
+           +--rw nt:source
+           |  +--rw nt:source-node?   -> ../../../nw:node/nw:node-id
+           |  +--rw nt:source-tp?     leafref
+           +--rw nt:destination
+           |  +--rw nt:dest-node?   -> ../../../nw:node/nw:node-id
+           |  +--rw nt:dest-tp?     leafref
+           +--rw tet:te!
+              +--rw (tet:bundle-stack-level)?
+              |  +--:(tet:bundle)
+              |     +--rw tet:bundled-links
+              |        +--rw tet:bundled-link* [sequence]
+              |           +--rw tet:sequence      uint32
+              |           +--rw tet:src-tp-ref?   leafref
+              |           +--rw tet:des-tp-ref?   leafref
+              +--rw tet:te-link-attributes
+              |  +--rw tet:name?                             string
+              |  +--rw tet:admin-status?
+              |  |       te-types:te-admin-status
+              |  +--rw tet:max-link-bandwidth
+              |  |  +--rw tet:te-bandwidth
+              |  |     +--rw (tet:technology)?
+              |  |        +--:(mwtopo:microwave)
+              |  |           +--ro mwtopo:mw-bandwidth?   uint64
+              |  +--rw mwtopo:mw-link-choice
+              |     +--rw (mwtopo:mw-link-option)?
+              |        +--:(mwtopo:microwave-radio-link)
+              |        |  +--rw mwtopo:microwave-radio-link!
+              |        |     +--rw mwtopo:rlt-mode
+              |        |        +--rw mwtopo:num-bonded-carriers
+              |        |        |       uint32
+              |        |        +--rw mwtopo:num-protecting-carriers
+              |        |                uint32
+              |        +--:(mwtopo:microwave-carrier)
+              |           +--rw mwtopo:microwave-carrier!
+              |              +--rw mwtopo:tx-frequency?
+              |              |       uint32
+              |              +--rw mwtopo:rx-frequency?
+              |              |       uint32
+              |              +--rw mwtopo:channel-separation?
+              |              |       uint32
+              |              +--ro mwtopo:actual-tx-cm?
+              |              |       identityref
+              |              +--ro mwtopo:actual-snir?
+              |              |       decimal64
+              |              +--ro mwtopo:actual-transmitted-level?
+              |                      power
+              +--ro tet:oper-status?
+
¶ +
+

The Microwave Topology Model augments the TE Topology Model.¶

+
+
+     Node N1                          Node N2
++--------------+                 +--------------+
+| +----------+ |                 | +----------+ | L2-network
+| | L2-N1-   | |    L2-N1-N2     | |    L2-N2-| | -L2 topology
+| | TP1      o---------------------o    TP2   | |
+| +----------+ |        '        | +----------+ | Supporting
+|          :   |        '        |   :          | ' mw link
+|          :   |        '        |   :          | : TPs
+| +----------+ |        '        | +----------+ |
+| |mw-N1-    | |   mwrl-N1-N2    | |    mw-N2-| | MW-network
+| |RLTP1     o---------------------o    RLTP2 | | -MW topology
+| +----------+ |        *        | +----------+ |
+|         : :  | ******* ******* |  : :         |
+|         ::   |**             **|   ::         | Supporting
+| +-------:--+ * *             * * +--:-------+ | : TPs
+| |mw-N1- :  * | * mwc-N1-N2-A * | *  : mw-N2-| | * carriers as
+| |CTP1   :  o---------------------o  : CTP2  | |   bundled links
+| +-------:--+ | *             * | +--:-------+ |
+|         :    |*               *|    :         |
+| +----------+ *                 * +----------+ |
+| |mw-N1-    * |   mwc-N1-N2-B   | *    mw-N2-| |
+| |CTP3      o---------------------o    CTP4  | |
+| +----------+ |                 | +----------+ |
++--------------+                 +--------------+
+ L2 transported over a (2+0) microwave radio link
+
+
¶ +
+
+
+

+A.1. Instance data for 2+0 mode for a bonded configuration +

+
+
+{
+  "ietf-network:networks": {
+    "network": [
+      {
+        "network-id": "L2-network",
+        "network-types": {
+          "ietf-te-topology:te-topology": {
+          }
+        },
+        "supporting-network": [
+          {
+            "network-ref": "mw-network"
+          }
+        ],
+        "node": [
+          {
+            "node-id": "L2-N1",
+            "supporting-node": [
+              {
+                "network-ref": "mw-network",
+                "node-ref": "mw-N1"
+              }
+            ],
+            "ietf-network-topology:termination-point": [
+              {
+                "tp-id": "L2-N1-TP1",
+                "supporting-termination-point": [
+                  {
+                    "network-ref": "mw-network",
+                    "node-ref": "mw-N1",
+                    "tp-ref": "mw-N1-RLTP1"
+                  }
+                ]
+              }
+            ]
+          },
+          {
+            "node-id": "L2-N2",
+            "supporting-node": [
+              {
+                "network-ref": "mw-network",
+                "node-ref": "mw-N2"
+              }
+            ],
+            "ietf-network-topology:termination-point": [
+              {
+                "tp-id": "L2-N2-TP2",
+                "supporting-termination-point": [
+                  {
+                    "network-ref": "mw-network",
+                    "node-ref": "mw-N2",
+                    "tp-ref": "mw-N2-RLTP2"
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "ietf-network-topology:link": [
+          {
+            "link-id": "L2-N1-N2",
+            "source": {
+              "source-node": "L2-N1",
+              "source-tp": "L2-N1-TP1"
+            },
+            "destination": {
+              "dest-node": "L2-N2",
+              "dest-tp": "L2-N2-TP2"
+            },
+            "supporting-link": [
+              {
+                "network-ref": "mw-network",
+                "link-ref": "mwrl-N1-N2"
+              }
+            ]
+          }
+        ]
+      },
+      {
+        "network-id": "mw-network",
+        "network-types": {
+          "ietf-te-topology:te-topology": {
+            "ietf-microwave-topology:mw-topology": {}
+          }
+        },
+        "supporting-network": [
+          {
+            "network-ref": "mw-network"
+          }
+        ],
+        "node": [
+          {
+            "node-id": "mw-N1",
+            "supporting-node": [
+              {
+                "network-ref": "mw-network",
+                "node-ref": "mw-N1"
+              }
+            ],
+            "ietf-network-topology:termination-point": [
+              {
+                "tp-id": "mw-N1-RLTP1",
+                "supporting-termination-point": [
+                  {
+                    "network-ref": "mw-network",
+                    "node-ref": "mw-N1",
+                    "tp-ref": "mw-N1-CTP1"
+                  },
+                  {
+                    "network-ref": "mw-network",
+                    "node-ref": "mw-N1",
+                    "tp-ref": "mw-N1-CTP3"
+                  }
+                ],
+                "ietf-te-topology:te-tp-id": "10.10.10.1",
+                "ietf-te-topology:te": {
+                  "ietf-microwave-topology:mw-tp-choice": {
+                    "microwave-rltp": {}
+                  }
+                }
+              },
+              {
+                "tp-id": "mw-N1-CTP1",
+                "ietf-te-topology:te-tp-id": 1,
+                "ietf-te-topology:te": {
+                  "ietf-microwave-topology:mw-tp-choice": {
+                    "microwave-ctp": {}
+                  }
+                }
+              },
+              {
+                "tp-id": "mw-N1-CTP3",
+                "ietf-te-topology:te-tp-id": 2,
+                "ietf-te-topology:te": {
+                  "ietf-microwave-topology:mw-tp-choice": {
+                    "microwave-ctp": {}
+                  }
+                }
+              }
+            ]
+          },
+          {
+            "node-id": "mw-N2",
+            "supporting-node": [
+              {
+                "network-ref": "mw-network",
+                "node-ref": "mw-N2"
+              }
+            ],
+            "ietf-network-topology:termination-point": [
+              {
+                "tp-id": "mw-N2-RLTP2",
+                "supporting-termination-point": [
+                  {
+                    "network-ref": "mw-network",
+                    "node-ref": "mw-N2",
+                    "tp-ref": "mw-N2-CTP2"
+                  },
+                  {
+                    "network-ref": "mw-network",
+                    "node-ref": "mw-N2",
+                    "tp-ref": "mw-N2-CTP4"
+                  }
+                ],
+                "ietf-te-topology:te-tp-id": "10.10.10.1",
+                "ietf-te-topology:te": {
+                  "ietf-microwave-topology:mw-tp-choice": {
+                    "microwave-rltp": {}
+                  }
+                }
+              },
+              {
+                "tp-id": "mw-N2-CTP2",
+                "ietf-te-topology:te-tp-id": 1,
+                "ietf-te-topology:te": {
+                  "ietf-microwave-topology:mw-tp-choice": {
+                    "microwave-ctp": {}
+                  }
+                }
+              },
+              {
+                "tp-id": "mw-N2-CTP4",
+                "ietf-te-topology:te-tp-id": 2,
+                "ietf-te-topology:te": {
+                  "ietf-microwave-topology:mw-tp-choice": {
+                    "microwave-ctp": {}
+                  }
+                }
+              }
+            ]
+          }
+        ],
+        "ietf-network-topology:link": [
+          {
+            "link-id": "mwrl-N1-N2",
+            "source": {
+              "source-node": "mw-N1",
+              "source-tp": "mw-N1-RLTP1"
+            },
+            "destination": {
+              "dest-node": "mw-N2",
+              "dest-tp": "mw-N2-RLTP2"
+            },
+            "ietf-te-topology:te": {
+              "bundled-links": {
+                "bundled-link": [
+                  {
+                    "sequence": 1,
+                    "src-tp-ref": "mw-N1-CTP1",
+                    "des-tp-ref": "mw-N2-CTP2"
+                  },
+                  {
+                    "sequence": 2,
+                    "src-tp-ref": "mw-N1-CTP3",
+                    "des-tp-ref": "mw-N2-CTP4"
+                  }
+                ]
+              },
+              "te-link-attributes": {
+                "ietf-microwave-topology:mw-link-choice": {
+                  "microwave-radio-link": {
+                    "rlt-mode": {
+                      "num-bonded-carriers": 2,
+                      "num-protecting-carriers": 0
+                    }
+                  }
+                }
+              }
+            }
+          },
+          {
+            "link-id": "mwc-N1-N2-A",
+            "source": {
+              "source-node": "mw-N1",
+              "source-tp": "mw-N1-CTP1"
+            },
+            "destination": {
+              "dest-node": "mw-N2",
+              "dest-tp": "mw-N2-CTP2"
+            },
+            "ietf-te-topology:te": {
+              "te-link-attributes": {
+                "ietf-microwave-topology:mw-link-choice": {
+                  "microwave-carrier": {
+                    "tx-frequency": 10728000,
+                    "rx-frequency": 10615000,
+                    "channel-separation": 28000
+                  }
+                }
+              }
+            }
+          },
+          {
+            "link-id": "mwc-N1-N2-B",
+            "source": {
+              "source-node": "mw-N1",
+              "source-tp": "mw-N1-CTP3"
+            },
+            "destination": {
+              "dest-node": "mw-N2",
+              "dest-tp": "mw-N2-CTP4"
+            },
+            "ietf-te-topology:te": {
+              "te-link-attributes": {
+                "ietf-microwave-topology:mw-link-choice": {
+                  "microwave-carrier": {
+                    "tx-frequency": 10528000,
+                    "rx-frequency": 10415000,
+                    "channel-separation": 28000
+                  }
+                }
+              }
+            }
+          }
+        ]
+      }
+    ]
+  }
+}
+
¶ +
+
+
+
+
+

+A.2. Instance data for 1+1 mode for a protected configuration +

+
+
+{
+  "ietf-network:networks": {
+    "network": [
+      {
+        "network-id": "L2-network",
+        "network-types": {
+          "ietf-te-topology:te-topology": {
+          }
+        },
+        "supporting-network": [
+          {
+            "network-ref": "mw-network"
+          }
+        ],
+        "node": [
+          {
+            "node-id": "L2-N1",
+            "supporting-node": [
+              {
+                "network-ref": "mw-network",
+                "node-ref": "mw-N1"
+              }
+            ],
+            "ietf-network-topology:termination-point": [
+              {
+                "tp-id": "L2-N1-TP1",
+                "supporting-termination-point": [
+                  {
+                    "network-ref": "mw-network",
+                    "node-ref": "mw-N1",
+                    "tp-ref": "mw-N1-RLTP1"
+                  }
+                ]
+              }
+            ]
+          },
+          {
+            "node-id": "L2-N2",
+            "supporting-node": [
+              {
+                "network-ref": "mw-network",
+                "node-ref": "mw-N2"
+              }
+            ],
+            "ietf-network-topology:termination-point": [
+              {
+                "tp-id": "L2-N2-TP2",
+                "supporting-termination-point": [
+                  {
+                    "network-ref": "mw-network",
+                    "node-ref": "mw-N2",
+                    "tp-ref": "mw-N2-RLTP2"
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "ietf-network-topology:link": [
+          {
+            "link-id": "L2-N1-N2",
+            "source": {
+              "source-node": "L2-N1",
+              "source-tp": "L2-N1-TP1"
+            },
+            "destination": {
+              "dest-node": "L2-N2",
+              "dest-tp": "L2-N2-TP2"
+            },
+            "supporting-link": [
+              {
+                "network-ref": "mw-network",
+                "link-ref": "mwrl-N1-N2"
+              }
+            ]
+          }
+        ]
+      },
+      {
+        "network-id": "mw-network",
+        "network-types": {
+          "ietf-te-topology:te-topology": {
+            "ietf-microwave-topology:mw-topology": {}
+          }
+        },
+        "supporting-network": [
+          {
+            "network-ref": "mw-network"
+          }
+        ],
+        "node": [
+          {
+            "node-id": "mw-N1",
+            "supporting-node": [
+              {
+                "network-ref": "mw-network",
+                "node-ref": "mw-N1"
+              }
+            ],
+            "ietf-network-topology:termination-point": [
+              {
+                "tp-id": "mw-N1-RLTP1",
+                "supporting-termination-point": [
+                  {
+                    "network-ref": "mw-network",
+                    "node-ref": "mw-N1",
+                    "tp-ref": "mw-N1-CTP1"
+                  },
+                  {
+                    "network-ref": "mw-network",
+                    "node-ref": "mw-N1",
+                    "tp-ref": "mw-N1-CTP3"
+                  }
+                ],
+                "ietf-te-topology:te-tp-id": "10.10.10.1",
+                "ietf-te-topology:te": {
+                  "ietf-microwave-topology:mw-tp-choice": {
+                    "microwave-rltp": {}
+                  }
+                }
+              },
+              {
+                "tp-id": "mw-N1-CTP1",
+                "ietf-te-topology:te-tp-id": 1,
+                "ietf-te-topology:te": {
+                  "ietf-microwave-topology:mw-tp-choice": {
+                    "microwave-ctp": {}
+                  }
+                }
+              },
+              {
+                "tp-id": "mw-N1-CTP3",
+                "ietf-te-topology:te-tp-id": 2,
+                "ietf-te-topology:te": {
+                  "ietf-microwave-topology:mw-tp-choice": {
+                    "microwave-ctp": {}
+                  }
+                }
+              }
+            ]
+          },
+          {
+            "node-id": "mw-N2",
+            "supporting-node": [
+              {
+                "network-ref": "mw-network",
+                "node-ref": "mw-N2"
+              }
+            ],
+            "ietf-network-topology:termination-point": [
+              {
+                "tp-id": "mw-N2-RLTP2",
+                "supporting-termination-point": [
+                  {
+                    "network-ref": "mw-network",
+                    "node-ref": "mw-N2",
+                    "tp-ref": "mw-N2-CTP2"
+                  },
+                  {
+                    "network-ref": "mw-network",
+                    "node-ref": "mw-N2",
+                    "tp-ref": "mw-N2-CTP4"
+                  }
+                ],
+                "ietf-te-topology:te-tp-id": "10.10.10.1",
+                "ietf-te-topology:te": {
+                  "ietf-microwave-topology:mw-tp-choice": {
+                    "microwave-rltp": {}
+                  }
+                }
+              },
+              {
+                "tp-id": "mw-N2-CTP2",
+                "ietf-te-topology:te-tp-id": 1,
+                "ietf-te-topology:te": {
+                  "ietf-microwave-topology:mw-tp-choice": {
+                    "microwave-ctp": {}
+                  }
+                }
+              },
+              {
+                "tp-id": "mw-N2-CTP4",
+                "ietf-te-topology:te-tp-id": 2,
+                "ietf-te-topology:te": {
+                  "ietf-microwave-topology:mw-tp-choice": {
+                    "microwave-ctp": {}
+                  }
+                }
+              }
+            ]
+          }
+        ],
+        "ietf-network-topology:link": [
+          {
+            "link-id": "mwrl-N1-N2",
+            "source": {
+              "source-node": "mw-N1",
+              "source-tp": "mw-N1-RLTP1"
+            },
+            "destination": {
+              "dest-node": "mw-N2",
+              "dest-tp": "mw-N2-RLTP2"
+            },
+            "ietf-te-topology:te": {
+              "bundled-links": {
+                "bundled-link": [
+                  {
+                    "sequence": 1,
+                    "src-tp-ref": "mw-N1-CTP1",
+                    "des-tp-ref": "mw-N2-CTP2"
+                  },
+                  {
+                    "sequence": 2,
+                    "src-tp-ref": "mw-N1-CTP3",
+                    "des-tp-ref": "mw-N2-CTP4"
+                  }
+                ]
+              },
+              "te-link-attributes": {
+                "ietf-microwave-topology:mw-link-choice": {
+                  "microwave-radio-link": {
+                    "rlt-mode": {
+                      "num-bonded-carriers": 1,
+                      "num-protecting-carriers": 1
+                    }
+                  }
+                }
+              }
+            }
+          },
+          {
+            "link-id": "mwc-N1-N2-A",
+            "source": {
+              "source-node": "mw-N1",
+              "source-tp": "mw-N1-CTP1"
+            },
+            "destination": {
+              "dest-node": "mw-N2",
+              "dest-tp": "mw-N2-CTP2"
+            },
+            "ietf-te-topology:te": {
+              "te-link-attributes": {
+                "ietf-microwave-topology:mw-link-choice": {
+                  "microwave-carrier": {
+                    "tx-frequency": 10728000,
+                    "rx-frequency": 10615000,
+                    "channel-separation": 28000
+                  }
+                }
+              }
+            }
+          },
+          {
+            "link-id": "mwc-N1-N2-B",
+            "source": {
+              "source-node": "mw-N1",
+              "source-tp": "mw-N1-CTP3"
+            },
+            "destination": {
+              "dest-node": "mw-N2",
+              "dest-tp": "mw-N2-CTP4"
+            },
+            "ietf-te-topology:te": {
+              "te-link-attributes": {
+                "ietf-microwave-topology:mw-link-choice": {
+                  "microwave-carrier": {
+                    "tx-frequency": 10728000,
+                    "rx-frequency": 10615000,
+                    "channel-separation": 28000
+                  }
+                }
+              }
+            }
+          }
+        ]
+      }
+    ]
+  }
+}
+
¶ +
+
+
+
+
+
+
+

+Appendix B. Microwave Topology Model with example extensions +

+

This appendix provides an examples of how the Microwave Topology Model can be used with the interface reference topology (ifref) and the bandwidth-availability-topology (bwa) models. There is also a snippet of json to show geolocation information instance data.¶

+

The tree below shows an example of the relevant leafs for a complete Microwave Topology Model including interface reference topology (ifref) and bandwidth-availability-topology (bwa) models.¶

+
+
+module: ietf-network
+  +--rw networks
+     +--rw network* [network-id]
+        +--rw network-id                network-id
+        +--rw network-types
+        |  +--rw tet:te-topology!
+        |     +--rw mwtopo:mw-topology!
+        +--rw supporting-network* [network-ref]
+        |  +--rw network-ref
+        |          -> /nw:networks/nw:network/nw:network-id
+        +--rw node* [node-id]
+        |  +--rw node-id               node-id
+        |  +--rw supporting-node* [network-ref node-ref]
+        |  |  +--rw network-ref
+        |  |  |      -> ../../../nw:supporting-network/nw:network-ref
+        |  |  +--rw node-ref
+        |  |          -> /nw:networks/nw:network/nw:node/nw:node-id
+        |  +--rw nt:termination-point* [tp-id]
+        |  |   +--rw nt:tp-id                              tp-id
+        |  |  +--rw nt:supporting-termination-point*
+        |  |  |       [network-ref node-ref tp-ref]
+        |  |  |  +--rw nt:network-ref
+        |  |  |  |      -> ../../../nw:supporting-node/nw:network-ref
+        |  |  |  +--rw nt:node-ref
+        |  |  |  |       -> ../../../nw:supporting-node/nw:node-ref
+        |  |  |  +--rw nt:tp-ref         leafref
+        |  |  +--rw tet:te!
+        |  |     +--rw tet:admin-status?
+        |  |     |       te-types:te-admin-status
+        |  |     +--rw tet:name?                             string
+        |  |     +--ro tet:oper-status?
+        |  |     |       te-types:te-oper-status
+        |  |     +--rw mwtopo:mw-tp-choice
+        |  |     |  +--rw (mwtopo:mw-tp-option)?
+        |  |     |     +--:(mwtopo:microwave-rltp)
+        |  |     |     |  +--rw mwtopo:microwave-rltp!
+        |  |     |     +--:(mwtopo:microwave-ctp)
+        |  |     |        +--rw mwtopo:microwave-ctp!
+        |  |     +--rw ifref:tp-to-interface-path?  ->
+                      /if:interfaces/interface/name
+        |  +--rw tet:te-node-id?           te-types:te-node-id
+        |  +--rw tet:te!
+        |     +--ro tet:geolocation
+        |        +--ro tet:altitude?    int64
+        |        +--ro tet:latitude?    geographic-coordinate-degree
+        |        +--ro tet:longitude?   geographic-coordinate-degree
+        +--rw nt:link* [link-id]
+           +--rw nt:link-id               link-id
+           +--rw nt:source
+           |  +--rw nt:source-node?   -> ../../../nw:node/nw:node-id
+           |  +--rw nt:source-tp?     leafref
+           +--rw nt:destination
+           |  +--rw nt:dest-node?   -> ../../../nw:node/nw:node-id
+           |  +--rw nt:dest-tp?     leafref
+           +--rw tet:te!
+              +--rw (tet:bundle-stack-level)?
+              |  +--:(tet:bundle)
+              |     +--rw tet:bundled-links
+              |        +--rw tet:bundled-link* [sequence]
+              |           +--rw tet:sequence      uint32
+              |           +--rw tet:src-tp-ref?   leafref
+              |           +--rw tet:des-tp-ref?   leafref
+              +--rw tet:te-link-attributes
+              |  +--rw tet:name?                             string
+              |  +--rw tet:admin-status?
+              |  |       te-types:te-admin-status
+              |  +--rw tet:max-link-bandwidth
+              |  |  +--rw tet:te-bandwidth
+              |  |     +--rw (tet:technology)?
+              |  |        +--:(mwtopo:microwave)
+              |  |           +--ro mwtopo:mw-bandwidth?   uint64
+              |  +--rw mwtopo:mw-link-choice
+              |  |  +--rw (mwtopo:mw-link-option)?
+              |  |     +--:(mwtopo:microwave-radio-link)
+              |  |     |  +--rw mwtopo:microwave-radio-link!
+              |  |     |     +--rw mwtopo:rlt-mode
+              |  |     |        +--rw mwtopo:num-bonded-carriers
+              |  |     |        |       uint32
+              |  |     |        +--rw mwtopo:num-protecting-carriers
+              |  |     |                uint32
+              |  |     +--:(mwtopo:microwave-carrier)
+              |  |        +--rw mwtopo:microwave-carrier!
+              |  |           +--rw mwtopo:tx-frequency?
+              |  |           |       uint32
+              |  |           +--rw mwtopo:rx-frequency?
+              |  |           |       uint32
+              |  |           +--rw mwtopo:channel-separation?
+              |  |           |       uint32
+              |  |           +--ro mwtopo:actual-tx-cm?
+              |  |           |       identityref
+              |  |           +--ro mwtopo:actual-snir?
+              |  |           |       decimal64
+              |  |           +--ro mwtopo:actual-transmitted-level?
+              |  |                   decimal64
+              |  +--rw bwatopo:link-availability* [availability]
+              |  |  +--rw bwatopo:availability      decimal64
+              |  |  +--rw bwatopo:link-bandwidth?   uint64
+              |  +--ro bwatopo:actual-bandwidth?    yang:gauge64
+              +--ro tet:oper-status?
+
¶ +
+

Microwave is a transport technology which can be used to transport client services, such as L2 Ethernet links. When an L2 link is transported over a single supporting microwave radio link, the topologies could be as shown below. Note that the figure just shows an example, there might be other possibilities to demonstrate such a topology. The example of the instantiation encoded in JSON is using only a selected subset of the leafs from the L2 topology model [RFC8944].¶

+
+
+     Node N1                          Node N2
++--------------+                 +--------------+
+| +----------+ |                 | +----------+ | L2-network
+| | L2-N1-   | |    L2-N1-N2     | |    L2-N2-| | -L2 topology
+| | TP1      o---------------------o    TP2   | |
+| +----------+ |        '        | +----------+ | Supporting
+|          :   |        '        |   :          | ' mw link
+|          :   |        '        |   :          | : TPs
+| +----------+ |        '        | +----------+ |
+| |mw-N1-    | |   mwrl-N1-N2    | |    mw-N2-| | MW-network
+| |RLTP1     o---------------------o    RLTP2 | | -MW topology
+| +----------+ |        *        | +----------+ |
+|         : :  | ******* ******* |  : :         |
+|         ::   |**             **|   ::         | Supporting
+| +-------:--+ * *             * * +--:-------+ | : TPs
+| |mw-N1- :  * | * mwc-N1-N2-A * | *  : mw-N2-| | * carriers as
+| |CTP1   :  o---------------------o  : CTP2  | |   bundled links
+| +-------:--+ | *             * | +--:-------+ |
+|         :    |*               *|    :         |
+| +----------+ *                 * +----------+ |
+| |mw-N1-    * |   mwc-N1-N2-B   | *    mw-N2-| |
+| |CTP3      o---------------------o    CTP4  | |
+| +----------+ |                 | +----------+ |
++--------------+                 +--------------+
+ L2 transported over a (2+0) microwave radio link
+
+     Node N1                            Interfaces
++---------------+                    +----------------+
+| +-----------+ |tp-to-interface-path| +------------+ |
+| | L2-N1-TP1 |************************|L2Interface1| |
+| +-----------+ |                    | +------------+ |
+|               |                    |                |
+| +-----------+ |tp-to-interface-path| +------------+ |
+| |mw-N1-RLTP1|************************|   RLT-1    | |
+| +-----------+ |                    | +------------+ |
+|               |                    |                |
+| +-----------+ |tp-to-interface-path| +------------+ |
+| |mw-N1-CTP1 |************************|    CT-1    | |
+| +-----------+ |                    | +------------+ |
+|               |                    |                |
+| +-----------+ |tp-to-interface-path| +------------+ |
+| |mw-N1-CTP3 |************************|    CT-3    | |
+| +-----------+ |                    | +------------+ |
++---------------+                    +----------------+
+ Topology model information to the associated interface
+ management model information for Node N1
+
+     Node N2                            Interfaces
++---------------+                    +----------------+
+| +-----------+ |tp-to-interface-path| +------------+ |
+| | L2-N2-TP2 |************************|L2Interface2| |
+| +-----------+ |                    | +------------+ |
+|               |                    |                |
+| +-----------+ |tp-to-interface-path| +------------+ |
+| |mw-N2-RLTP2|************************|   RLT-2    | |
+| +-----------+ |                    | +------------+ |
+|               |                    |                |
+| +-----------+ |tp-to-interface-path| +------------+ |
+| |mw-N2-CTP2 |************************|    CT-2    | |
+| +-----------+ |                    | +------------+ |
+|               |                    |                |
+| +-----------+ |tp-to-interface-path| +------------+ |
+| |mw-N2-CTP4 |************************|    CT-4    | |
+| +-----------+ |                    | +------------+ |
++---------------+                    +----------------+
+ Topology model information to the associated interface
+ management model information for Node N2
+
+
¶ +
+
+
+

+B.1. Instance data for 2+0 mode +

+

A L2 network with a supporting microwave network, including microwave-topology (MW) and bandwidth-availability-topology (BWA) models as well as the reference to the associated interface management information, is encoded in JSON as follows:¶

+
+
+=============== NOTE: '\' line wrapping per RFC 8792 ================
+
+{
+  "ietf-interfaces:interfaces": {
+    "interface": [
+      {
+        "name": "L2Interface1",
+        "description": "'Ethernet Interface 1'",
+        "type": "iana-if-type:ethernetCsmacd"
+      },
+      {
+        "name": "L2Interface2",
+        "description": "'Ethernet Interface 2'",
+        "type": "iana-if-type:ethernetCsmacd"
+      },
+      {
+        "name": "RLT-1",
+        "description": "'Radio Link Terminal 1'",
+        "type": "iana-if-type:microwaveRadioLinkTerminal",
+        "ietf-microwave-radio-link:mode":
+           "ietf-microwave-types:two-plus-zero",
+        "ietf-microwave-radio-link:carrier-terminations": [
+          "CT-1",
+          "CT-3"
+        ]
+      },
+      {
+        "name": "RLT-2",
+        "description": "'Radio Link Terminal 2'",
+        "type": "iana-if-type:microwaveRadioLinkTerminal",
+        "ietf-microwave-radio-link:mode":
+           "ietf-microwave-types:two-plus-zero",
+        "ietf-microwave-radio-link:carrier-terminations": [
+          "CT-2",
+          "CT-4"
+        ]
+      },
+      {
+        "name": "CT-1",
+        "description": "'Carrier Termination 1'",
+        "type": "iana-if-type:microwaveCarrierTermination",
+        "ietf-microwave-radio-link:tx-frequency": 10728000,
+        "ietf-microwave-radio-link:duplex-distance": 113000,
+        "ietf-microwave-radio-link:channel-separation": 28000,
+        "ietf-microwave-radio-link:rtpc": {
+          "maximum-nominal-power": "20.0"
+        },
+        "ietf-microwave-radio-link:single": {
+          "selected-cm": "ietf-microwave-types:qam-512"
+        }
+      },
+      {
+        "name": "CT-3",
+        "description": "'Carrier Termination 3'",
+        "type": "iana-if-type:microwaveCarrierTermination",
+        "ietf-microwave-radio-link:tx-frequency": 10528000,
+        "ietf-microwave-radio-link:duplex-distance": 113000,
+        "ietf-microwave-radio-link:channel-separation": 28000,
+        "ietf-microwave-radio-link:rtpc": {
+          "maximum-nominal-power": "20.0"
+        },
+        "ietf-microwave-radio-link:single": {
+          "selected-cm": "ietf-microwave-types:qam-512"
+        }
+      },
+      {
+        "name": "CT-2",
+        "description": "'Carrier Termination 2'",
+        "type": "iana-if-type:microwaveCarrierTermination",
+        "ietf-microwave-radio-link:tx-frequency": 10615000,
+        "ietf-microwave-radio-link:duplex-distance": 113000,
+        "ietf-microwave-radio-link:channel-separation": 28000,
+        "ietf-microwave-radio-link:rtpc": {
+          "maximum-nominal-power": "20.0"
+        },
+        "ietf-microwave-radio-link:single": {
+          "selected-cm": "ietf-microwave-types:qam-512"
+        }
+      },
+      {
+        "name": "CT-4",
+        "description": "'Carrier Termination 4'",
+        "type": "iana-if-type:microwaveCarrierTermination",
+        "ietf-microwave-radio-link:tx-frequency": 10415000,
+        "ietf-microwave-radio-link:duplex-distance": 113000,
+        "ietf-microwave-radio-link:channel-separation": 28000,
+        "ietf-microwave-radio-link:rtpc": {
+          "maximum-nominal-power": "20.0"
+        },
+        "ietf-microwave-radio-link:single": {
+          "selected-cm": "ietf-microwave-types:qam-512"
+        }
+      }
+    ]
+  },
+  "ietf-network:networks": {
+    "network": [
+      {
+        "network-id": "L2-network",
+        "network-types": {
+          "ietf-te-topology:te-topology": {
+            "ietf-eth-te-topology:eth-tran-topology": {}
+          }
+        },
+        "supporting-network": [
+          {
+            "network-ref": "mw-network"
+          }
+        ],
+        "node": [
+          {
+            "node-id": "L2-N1",
+            "supporting-node": [
+              {
+                "network-ref": "mw-network",
+                "node-ref": "mw-N1"
+              }
+            ],
+            "ietf-network-topology:termination-point": [
+              {
+                "tp-id": "L2-N1-TP1",
+                "supporting-termination-point": [
+                  {
+                    "network-ref": "mw-network",
+                    "node-ref": "mw-N1",
+                    "tp-ref": "mw-N1-RLTP1"
+                  }
+                ]
+              }
+            ]
+          },
+          {
+            "node-id": "L2-N2",
+            "supporting-node": [
+              {
+                "network-ref": "mw-network",
+                "node-ref": "mw-N2"
+              }
+            ],
+            "ietf-network-topology:termination-point": [
+              {
+                "tp-id": "L2-N2-TP2",
+                "supporting-termination-point": [
+                  {
+                    "network-ref": "mw-network",
+                    "node-ref": "mw-N2",
+                    "tp-ref": "mw-N2-RLTP2"
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "ietf-network-topology:link": [
+          {
+            "link-id": "L2-N1-N2",
+            "source": {
+              "source-node": "L2-N1",
+              "source-tp": "L2-N1-TP1"
+            },
+            "destination": {
+              "dest-node": "L2-N2",
+              "dest-tp": "L2-N2-TP2"
+            },
+            "supporting-link": [
+              {
+                "network-ref": "mw-network",
+                "link-ref": "mwrl-N1-N2"
+              }
+            ]
+          }
+        ]
+      },
+      {
+        "network-id": "mw-network",
+        "network-types": {
+          "ietf-te-topology:te-topology": {
+            "ietf-microwave-topology:mw-topology": {}
+          }
+        },
+        "supporting-network": [
+          {
+            "network-ref": "mw-network"
+          }
+        ],
+        "node": [
+          {
+            "node-id": "mw-N1",
+            "supporting-node": [
+              {
+                "network-ref": "mw-network",
+                "node-ref": "mw-N1"
+              }
+            ],
+            "ietf-network-topology:termination-point": [
+              {
+                "tp-id": "mw-N1-RLTP1",
+                "supporting-termination-point": [
+                  {
+                    "network-ref": "mw-network",
+                    "node-ref": "mw-N1",
+                    "tp-ref": "mw-N1-CTP1"
+                  },
+                  {
+                    "network-ref": "mw-network",
+                    "node-ref": "mw-N1",
+                    "tp-ref": "mw-N1-CTP3"
+                  }
+                ],
+                "ietf-te-topology:te-tp-id": "10.10.10.1",
+                "ietf-te-topology:te": {
+                  "ietf-microwave-topology:mw-tp-choice": {
+                    "microwave-rltp": {}
+                  },
+                  "ietf-tp-interface-reference-topology:tp-to-interf\
+ace-path":"RLT-1"
+                }
+              },
+              {
+                "tp-id": "mw-N1-CTP1",
+                "ietf-te-topology:te-tp-id": 1,
+                "ietf-te-topology:te": {
+                  "ietf-microwave-topology:mw-tp-choice": {
+                    "microwave-ctp": {}
+                  },
+                  "ietf-tp-interface-reference-topology:tp-to-interf\
+ace-path":"CT-1"
+                }
+              },
+              {
+                "tp-id": "mw-N1-CTP3",
+                "ietf-te-topology:te-tp-id": 2,
+                "ietf-te-topology:te": {
+                  "ietf-microwave-topology:mw-tp-choice": {
+                    "microwave-ctp": {}
+                  },
+                  "ietf-tp-interface-reference-topology:tp-to-interf\
+ace-path":"CT-3"
+                }
+              }
+            ]
+          },
+          {
+            "node-id": "mw-N2",
+            "supporting-node": [
+              {
+                "network-ref": "mw-network",
+                "node-ref": "mw-N2"
+              }
+            ],
+            "ietf-network-topology:termination-point": [
+              {
+                "tp-id": "mw-N2-RLTP2",
+                "supporting-termination-point": [
+                  {
+                    "network-ref": "mw-network",
+                    "node-ref": "mw-N2",
+                    "tp-ref": "mw-N2-CTP2"
+                  },
+                  {
+                    "network-ref": "mw-network",
+                    "node-ref": "mw-N2",
+                    "tp-ref": "mw-N2-CTP4"
+                  }
+                ],
+                "ietf-te-topology:te-tp-id": "10.10.10.1",
+                "ietf-te-topology:te": {
+                  "ietf-microwave-topology:mw-tp-choice": {
+                    "microwave-rltp": {}
+                  },
+                  "ietf-tp-interface-reference-topology:tp-to-interf\
+ace-path":"RLT-2"
+                }
+              },
+              {
+                "tp-id": "mw-N2-CTP2",
+                "ietf-te-topology:te-tp-id": 1,
+                "ietf-te-topology:te": {
+                  "ietf-microwave-topology:mw-tp-choice": {
+                    "microwave-ctp": {}
+                  },
+                  "ietf-tp-interface-reference-topology:tp-to-interf\
+ace-path":"CT-2"
+                }
+              },
+              {
+                "tp-id": "mw-N2-CTP4",
+                "ietf-te-topology:te-tp-id": 2,
+                "ietf-te-topology:te": {
+                  "ietf-microwave-topology:mw-tp-choice": {
+                    "microwave-ctp": {}
+                  },
+                  "ietf-tp-interface-reference-topology:tp-to-interf\
+ace-path":"CT-4"
+                }
+              }
+            ]
+          }
+        ],
+        "ietf-network-topology:link": [
+          {
+            "link-id": "mwrl-N1-N2",
+            "source": {
+              "source-node": "mw-N1",
+              "source-tp": "mw-N1-RLTP1"
+            },
+            "destination": {
+              "dest-node": "mw-N2",
+              "dest-tp": "mw-N2-RLTP2"
+            },
+            "ietf-te-topology:te": {
+              "bundled-links": {
+                "bundled-link": [
+                  {
+                    "sequence": 1,
+                    "src-tp-ref": "mw-N1-CTP1",
+                    "des-tp-ref": "mw-N2-CTP2"
+                  },
+                  {
+                    "sequence": 2,
+                    "src-tp-ref": "mw-N1-CTP3",
+                    "des-tp-ref": "mw-N2-CTP4"
+                  }
+                ]
+              },
+              "te-link-attributes": {
+                "ietf-microwave-topology:mw-link-choice": {
+                  "microwave-radio-link": {
+                    "rlt-mode": {
+                      "num-bonded-carriers": 2,
+                      "num-protecting-carriers": 0
+                    }
+                  }
+                }
+              }
+            }
+          },
+          {
+            "link-id": "mwc-N1-N2-A",
+            "source": {
+              "source-node": "mw-N1",
+              "source-tp": "mw-N1-CTP1"
+            },
+            "destination": {
+              "dest-node": "mw-N2",
+              "dest-tp": "mw-N2-CTP2"
+            },
+            "ietf-te-topology:te": {
+              "te-link-attributes": {
+         "ietf-bandwidth-availability-topology:link-availability": [
+                  {
+                  "availability": "0.99",
+                  "link-bandwidth": "998423"
+                  },
+                  {
+                  "availability": "0.95",
+                  "link-bandwidth": "1048576"
+                  }
+                ],
+                "ietf-microwave-topology:mw-link-choice": {
+                  "microwave-carrier": {
+                    "tx-frequency": 10728000,
+                    "rx-frequency": 10615000,
+                    "channel-separation": 28000
+                  }
+                }
+              }
+            }
+          },
+          {
+            "link-id": "mwc-N1-N2-B",
+            "source": {
+              "source-node": "mw-N1",
+              "source-tp": "mw-N1-CTP3"
+            },
+            "destination": {
+              "dest-node": "mw-N2",
+              "dest-tp": "mw-N2-CTP4"
+            },
+            "ietf-te-topology:te": {
+              "te-link-attributes": {
+         "ietf-bandwidth-availability-topology:link-availability": [
+                  {
+                  "availability": "0.99",
+                  "link-bandwidth": "998423"
+                  },
+                  {
+                  "availability": "0.95",
+                  "link-bandwidth": "1048576"
+                  }
+                ],
+                "ietf-microwave-topology:mw-link-choice": {
+                  "microwave-carrier": {
+                    "tx-frequency": 10528000,
+                    "rx-frequency": 10415000,
+                    "channel-separation": 28000
+                  }
+                }
+              }
+            }
+          }
+        ]
+      }
+    ]
+  }
+}
+
¶ +
+
+
+
+
+

+B.2. Instance data for geolocation information +

+

This example provides a json snippet that shows geolocation information.¶

+
+
+   "node": [
+      {
+         "node-id": "mw-N1",
+
+         ...
+
+         "ietf-te-topology:te" : {
+            "ietf-te-topology:geolocation": {
+               "altitude": "200000",
+               "latitude": "45",
+               "longitude": "90"
+               }
+         },
+         "ietf-network-topology:termination-point": [
+
+         ...
+
+
¶ +
+
+
+
+
+
+
+

+Acknowledgments +

+

This document was prepared using kramdown¶

+

The authors would like to thank ...¶

+
+
+
+
+

+Authors' Addresses +

+
+
Jonas Ahlberg
+
Ericsson
+ +
+
+
Scott Mansfield
+
Ericsson
+ +
+
+
Min Ye
+
Huawei Technologies
+ +
+
+
Italo Busi
+
Huawei Technologies
+ +
+
+
Xi Li
+
NEC Laboratories Europe
+ +
+
+
Daniela Spreafico
+
Nokia - IT
+ +
+
+
+ + + diff --git a/draft-ietf-ccamp-mw-topo-yang.txt b/draft-ietf-ccamp-mw-topo-yang.txt new file mode 100644 index 0000000..d5d2a12 --- /dev/null +++ b/draft-ietf-ccamp-mw-topo-yang.txt @@ -0,0 +1,2023 @@ + + + + +ccamp J. Ahlberg +Internet-Draft S. Mansfield +Intended status: Standards Track Ericsson +Expires: 7 September 2023 M. Ye + I. Busi + Huawei Technologies + X. Li + NEC Laboratories Europe + D. Spreafico + Nokia - IT + 6 March 2023 + + + A YANG Data Model for Microwave Topology + draft-ietf-ccamp-mw-topo-yang-05 + +Abstract + + This document defines a YANG data model to describe microwave/ + millimeter radio links in a network topology. + +Discussion Venues + + This note is to be removed before publishing as an RFC. + + Source for this draft and an issue tracker can be found at + https://github.com/ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang. + +Status of This Memo + + This Internet-Draft is submitted in full conformance with the + provisions of BCP 78 and BCP 79. + + Internet-Drafts are working documents of the Internet Engineering + Task Force (IETF). Note that other groups may also distribute + working documents as Internet-Drafts. The list of current Internet- + Drafts is at https://datatracker.ietf.org/drafts/current/. + + Internet-Drafts are draft documents valid for a maximum of six months + and may be updated, replaced, or obsoleted by other documents at any + time. It is inappropriate to use Internet-Drafts as reference + material or to cite them other than as "work in progress." + + This Internet-Draft will expire on 7 September 2023. + +Copyright Notice + + Copyright (c) 2023 IETF Trust and the persons identified as the + document authors. All rights reserved. + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents (https://trustee.ietf.org/ + license-info) in effect on the date of publication of this document. + Please review these documents carefully, as they describe your rights + and restrictions with respect to this document. Code Components + extracted from this document must include Revised BSD License text as + described in Section 4.e of the Trust Legal Provisions and are + provided without warranty as described in the Revised BSD License. + +Table of Contents + + 1. Introduction + 1.1. Terminology and Definitions + 1.2. Tree Structure + 2. Requirements Language + 3. Microwave Topology YANG Data Model + 3.1. YANG Tree + 3.2. Relationship between radio links and carriers + 3.3. Relationship with client topology model + 3.4. Applicability of the Data Model for Traffic Engineering + (TE) Topologies + 3.5. Microwave Topology YANG Module + 4. Security Considerations + 5. IANA Considerations + 6. References + 6.1. Normative References + 6.2. Informative References + Appendix A. Microwave Topology Model with base topology models + A.1. Instance data for 2+0 mode for a bonded configuration + A.2. Instance data for 1+1 mode for a protected configuration + Appendix B. Microwave Topology Model with example extensions + B.1. Instance data for 2+0 mode + B.2. Instance data for geolocation information + Acknowledgments + Authors' Addresses + +1. Introduction + + This document defines a YANG data model to describe topologies of + microwave/millimeter wave (hereafter microwave is used to simplify + the text). The YANG data model describes radio links, supporting + carrier(s) and the associated termination points. A carrier is a + description of a link providing transport capacity over the air by a + single carrier. It is typically defined by its transmitting and + receiving frequencies. A radio link is a link providing the + aggregated transport capacity of the supporting carriers in + aggregated and/or protected configurations, which can be used to + carry traffic on higher topology layers such as Ethernet and TDM. + The model augments "YANG Data Model for Traffic Engineering (TE) + Topologies" defined in [RFC8795], which is based on "A YANG Data + Model for Network Topologies" defined in [RFC8345]. + + The microwave point-to-point radio technology provides connectivity + on L0/L1 over a radio link between two termination points, using one + or several supporting carriers in aggregated or protected + configurations. That application of microwave technology cannot be + used to perform cross-connection or switching of the traffic to + create network connectivity across multiple microwave radio links. + Instead, a payload of traffic on higher topology layers, normally L2 + Ethernet, is carried over the microwave radio link and when the + microwave radio link is terminated at the endpoints, cross-connection + and switching can be performed on that higher layer creating + connectivity across multiple supporting microwave radio links. + + The microwave topology model is expected to be used between a + Provisioning Network Controller (PNC) and a Multi Domain Service + Coordinator(MDSC) [RFC8453]. Examples of use cases that can be + supported are: + + 1. Correlation between microwave radio links and the supported links + on higher topology layers. e.g. an L2 Ethernet topology. This + information can be used to understand how changes in the + performance/status of a microwave radio link affect traffic on + higher layers. + + 2. Propagation of relevant characteristics of a microwave radio + link, such as bandwidth, to higher topology layers, where it e.g. + could be used as a criterion when configuring and optimizing a + path for a connection/service through the network end to end. + + 3. Optimization of the microwave radio link configurations on a + network level, e.g. with the purpose to minimize overall + interference and/or maximize the overall capacity provided by the + links. + +1.1. Terminology and Definitions + + The following acronyms are used in this document: + + PNC Provisioning Network Controller + + MDSC Multi Domain Service Coordinator + +1.2. Tree Structure + + A simplified graphical representation of the data model is used in + chapter 3.1 of this document. The meaning of the symbols in these + diagrams is defined in [RFC8340]. + +2. Requirements Language + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and + "OPTIONAL" in this document are to be interpreted as described in BCP + 14 [RFC2119] [RFC8174] when, and only when, they appear in all + capitals, as shown here. + +3. Microwave Topology YANG Data Model + +3.1. YANG Tree + + module: ietf-microwave-topology + + augment /nw:networks/nw:network/nw:network-types/tet:te-topology: + +--rw mw-topology! + augment /nw:networks/nw:network/nw:node/nt:termination-point + /tet:te: + +--rw mw-tp-choice + +--rw (mw-tp-option)? + +--:(microwave-rltp) + | +--rw microwave-rltp! + | +---u microwave-rltp-attributes + +--:(microwave-ctp) + +--rw microwave-ctp! + +---u microwave-ctp-attributes + augment /nw:networks/nw:network/nt:link/tet:te + /tet:te-link-attributes: + +--rw mw-link-choice + +--rw (mw-link-option)? + +--:(microwave-radio-link) + | +--rw microwave-radio-link! + | +---u microwave-radio-link-attributes + +--:(microwave-carrier) + +--rw microwave-carrier! + +---u microwave-carrier-attributes + augment /nw:networks/nw:network/nt:link/tet:te + /tet:te-link-attributes/tet:max-link-bandwidth + /tet:te-bandwidth/tet:technology: + +--:(microwave) + +---u microwave-bandwidth + +3.2. Relationship between radio links and carriers + + A microwave radio link is always an aggregate of one or multiple + carries, in various configurations/modes. The supporting carriers + are identified by its termination points and are listed in the + container bundled-links as part of the te-link-config in the YANG + Data Model for Traffic Engineering (TE) Topologies [RFC8795] for a + radio-link. The exact configuration of the included carriers is + further specified in the rlt-mode container (1+0, 2+0, 1+1, etc.) for + the radio-link. Appendix A includes JSON examples of how such a + relationship can be modelled. + +3.3. Relationship with client topology model + + A microwave radio link carries a payload of traffic on higher + topology layers, normally L2 Ethernet. The leafs supporting-network, + supporting-node, supporting-link, and supporting-termination-point in + the generic YANG module for Network Topologies [RFC8345] are expected + to be used to model a relationship/dependency from higher topology + layers to a supporting microwave radio link topology layer. + Appendix A includes JSON examples of an L2 Ethernet link transported + over one supporting microwave link. + +3.4. Applicability of the Data Model for Traffic Engineering (TE) + Topologies + + Since microwave is a point-to-point radio technology providing + connectivity on L0/L1 over a radio link between two termination + points and cannot be used to perform cross-connection or switching of + the traffic to create network connectivity across multiple microwave + radio links, a majority of the leafs in the Data Model for Traffic + Engineering (TE) Topologies augmented by the microwave topology model + are not applicable. An example of which leafs are considered + applicable can be found in appendices Appendix A and Appendix B in + this document. + + More specifically, admin-status and oper-status are recommended to be + reported for links only. Status for termination points can be used + when links are inter-domain and when the status of only one side of + link is known, but since microwave is a point-to-point technology + where both ends normally belong to the same domain it is not expected + to be applicable in normal cases. Furthermore, admin-status is not + applicable for microwave radio links. Enable and disable of a radio + link is instead done in the constituent carriers. + +3.5. Microwave Topology YANG Module + + file "ietf-microwave-topology.yang" + module ietf-microwave-topology { + yang-version "1.1"; + namespace + "urn:ietf:params:xml:ns:yang:ietf-microwave-topology"; + + prefix "mwtopo"; + + import ietf-network { + prefix "nw"; + reference "RFC 8345: A YANG Data Model for Network Topologies"; + } + + import ietf-network-topology { + prefix "nt"; + reference "RFC 8345: A YANG Data Model for Network Topologies"; + } + + import ietf-te-topology { + prefix "tet"; + reference "RFC 8795: YANG Data Model for Traffic Engineering + (TE) Topologies"; + } + + import ietf-microwave-types { + prefix mw-types; + reference "RFC 8561"; + } + + organization + "Internet Engineering Task Force (IETF) CCAMP WG"; + contact + "WG Web: + WG List: + + Editor: Jonas Ahlberg + + Editor: Scott Mansfield + + Editor: Min Ye + + Editor: Italo Busi + + Editor: Xi Li + + Editor: Daniela Spreafico + + "; + + description + "This is a module for microwave topology. + + Copyright (c) 2023 IETF Trust and the persons + identified as authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Revised BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC XXXX; see + the RFC itself for full legal notices."; + + revision 2023-02-15 { + description + "Draft to be used as a basis for the continued microwave + team discussions"; + reference ""; + } + + grouping rlt-mode { + description + "This grouping provides a flexible definition of number + of bonded carriers and protecting carriers of a radio + link."; + leaf num-bonded-carriers { + type uint32; + mandatory true; + description + "Number of bonded carriers."; + } + leaf num-protecting-carriers { + type uint32; + mandatory true; + description + "Number of protecting carriers."; + } + } + + grouping microwave-radio-link-attributes { + description "Grouping used for attributes describing a microwave + radio link."; + container rlt-mode { + description + "This grouping provides a flexible definition of number + of bonded carriers and protecting carriers of a radio + link."; + uses rlt-mode; + } + } + + grouping microwave-carrier-attributes { + description "Grouping used for attributes describing a microwave + carrier."; + leaf tx-frequency { + type uint32; + units "kHz"; + description + "Selected transmitter frequency. + Related to the data node tx-frequency in RFC 8561."; + reference + "RFC 8561: A YANG Data Model for Microwave Radio Link"; + } + leaf rx-frequency { + type uint32; + units "kHz"; + description + "Selected receiver frequency. + Related to the data node actual-rx-frequency in RFC 8561."; + reference + "RFC 8561: A YANG Data Model for Microwave Radio Link"; + } + leaf channel-separation { + type uint32; + units "kHz"; + description + "The amount of bandwidth allocated to a carrier. The + distance between adjacent channels in a radio + frequency channels arrangement. + Related to the data node channel-separation in RFC 8561."; + reference + "ETSI EN 302 217-1 and + RFC 8561: A YANG Data Model for Microwave Radio Link"; + } + leaf actual-tx-cm { + type identityref { + base mw-types:coding-modulation; + } + config false; + description + "Actual coding/modulation in transmitting direction. + Related to the data node actual-tx-cm in RFC 8561."; + reference + "RFC 8561: A YANG Data Model for Microwave Radio Link"; + } + leaf actual-snir { + type decimal64 { + fraction-digits 1; + range "0..99"; + } + units "dB"; + config false; + description + "Actual signal to noise plus the interference ratio + (0.1 dB resolution). + Related to the data node actual-snir in RFC 8561."; + reference + "RFC 8561: A YANG Data Model for Microwave Radio Link"; + } + leaf actual-transmitted-level { + type decimal64 { + fraction-digits 1; + range "0..99"; + } + units "dBm"; + config false; + description + "Actual transmitted power level (0.1 dBm resolution). + Related to the data node actual-transmitted-level + in RFC 8561."; + reference + "ETSI EN 301 129 and + RFC 8561: A YANG Data Model for Microwave Radio Link"; + } + } + + grouping microwave-bandwidth { + description "Grouping used for microwave bandwidth."; + leaf mw-bandwidth { + type uint64; + units "Kbps"; + config false; + description + "Nominal microwave radio link and carrier bandwidth."; + } + } + + augment "/nw:networks/nw:network/nw:network-types/" + + "tet:te-topology" { + description + "Augment network types to define a microwave network + topology type."; + container mw-topology { + presence "Indicates a topology type of microwave."; + description "Microwave topology type"; + } + } + + augment "/nw:networks/nw:network/nw:node/nt:termination-point/" + + "tet:te" { + when '../../../nw:network-types/tet:te-topology/' + + 'mwtopo:mw-topology' { + description + "Augmentation parameters apply only for networks with an + microwave network topology type."; + } + description + "Augmentation to add microwave technology specific + characteristics to a termination point."; + container mw-tp-choice { + description "Specification of type of termination point."; + choice mw-tp-option { + description "Selection of type of termination point."; + case microwave-rltp { + container "microwave-rltp" { + presence + "Denotes a microwave radio link termination point. + It corresponds to a microwave RLT interface as + defined in RFC 8561."; + description + "Denotes and describes a microwave radio link + termination point."; + } + } + case microwave-ctp { + container "microwave-ctp" { + presence + "Denotes a microwave carrier termination point. + It corresponds to a microwave CT interface as + defined in RFC 8561."; + description + "Denotes and describes a microwave carrier + termination point."; + } + } + } + } + } + + augment "/nw:networks/nw:network/nt:link/tet:te/" + + "tet:te-link-attributes" { + when '../../../nw:network-types/tet:te-topology/' + + 'mwtopo:mw-topology' { + description + "Augmentation parameters apply only for networks with an + microwave network topology type."; + } + description + "Augmentation to add microwave technology specific + characteristics to a link."; + container mw-link-choice { + description "Specification of type of link."; + choice mw-link-option { + description "Selection of type of link."; + case microwave-radio-link { + container "microwave-radio-link" { + presence + "Denotes a microwave radio link"; + uses microwave-radio-link-attributes; + description + "Denotes and describes a microwave radio link"; + } + } + case microwave-carrier { + container "microwave-carrier" { + presence "Denotes a microwave carrier"; + uses microwave-carrier-attributes; + description "Denotes and describes a microwave carrier"; + } + } + } + } + } + + augment "/nw:networks/nw:network/nt:link/tet:te/" + + "tet:te-link-attributes/" + + "tet:max-link-bandwidth/" + + "tet:te-bandwidth/tet:technology" { + when '../../../../../nw:network-types/tet:te-topology/' + + 'mwtopo:mw-topology' { + description + "Augmentation parameters apply only for networks with an + microwave network topology type."; + } + description + "Augmentation for TE bandwidth."; + case microwave { + uses microwave-bandwidth; + } + } + } + + +4. Security Considerations + + The YANG module specified in this document defines schemas for data + that is designed to be accessed via network management protocols such + as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer + is the secure transport layer, and the mandatory-to-implement secure + transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer + is HTTPS, and the mandatory-to-implement secure transport is TLS + [RFC8446]. + + The NETCONF access control model [RFC8341] provides the means to + restrict access for particular NETCONF or RESTCONF users to a + preconfigured subset of all available NETCONF or RESTCONF protocol + operations and content. + + The YANG module specified in this document imports and augments the + ietf-network and ietf-network-topology models defined in [RFC8345]. + The security considerations from [RFC8345] are applicable to the + module in this document. + + There are a several data nodes defined in this YANG module that are + writable/creatable/deletable (i.e., config true, which is the + default). These data nodes may be considered sensitive or vulnerable + in some network environments. Write operations (e.g., edit-config) + to these data nodes without proper protection can have a negative + effect on network operations. These are the subtrees and data nodes + and their sensitivity/vulnerability: + + * rlt-mode: A malicious client could attempt to modify the mode in + which the radio link is configured and thereby change the intended + behaviour of the link. + + * tx-frequency, rx-frequency and channel-separation: A malicious + client could attempt to modify the frequency configuration of a + carrier which could modify the intended behaviour or make the + configurtion invalid and thereby stop the operation of it. + +5. IANA Considerations + + IANA is asked to assign a new URI from the "IETF XML Registry" + [RFC3688] as follows: + + URI: urn:ietf:params:xml:ns:yang:ietf-microwave-topology + Registrant Contact: The IESG + XML: N/A; the requested URI is an XML namespace. + + It is proposed that IANA should record YANG module names in the "YANG + Module Names" registry [RFC6020] as follows: + + Name: ietf-microwave-topology + Maintained by IANA?: N + Namespace: urn:ietf:params:xml:ns:yang:ietf-microwave-topology + Prefix: mwtopo + Reference: RFC XXXX + +6. References + +6.1. Normative References + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, + DOI 10.17487/RFC2119, March 1997, + . + + [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, + DOI 10.17487/RFC3688, January 2004, + . + + [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for + the Network Configuration Protocol (NETCONF)", RFC 6020, + DOI 10.17487/RFC6020, October 2010, + . + + [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., + and A. Bierman, Ed., "Network Configuration Protocol + (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, + . + + [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure + Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, + . + + [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF + Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, + . + + [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC + 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, + May 2017, . + + [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration + Access Control Model", STD 91, RFC 8341, + DOI 10.17487/RFC8341, March 2018, + . + + [RFC8345] Clemm, A., Medved, J., Varga, R., Bahadur, N., + Ananthakrishnan, H., and X. Liu, "A YANG Data Model for + Network Topologies", RFC 8345, DOI 10.17487/RFC8345, March + 2018, . + + [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol + Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, + . + + [RFC8795] Liu, X., Bryskin, I., Beeram, V., Saad, T., Shah, H., and + O. Gonzalez de Dios, "YANG Data Model for Traffic + Engineering (TE) Topologies", RFC 8795, + DOI 10.17487/RFC8795, August 2020, + . + +6.2. Informative References + + [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", + BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, + . + + [RFC8453] Ceccarelli, D., Ed. and Y. Lee, Ed., "Framework for + Abstraction and Control of TE Networks (ACTN)", RFC 8453, + DOI 10.17487/RFC8453, August 2018, + . + + [RFC8944] Dong, J., Wei, X., Wu, Q., Boucadair, M., and A. Liu, "A + YANG Data Model for Layer 2 Network Topologies", RFC 8944, + DOI 10.17487/RFC8944, November 2020, + . + +Appendix A. Microwave Topology Model with base topology models + + This appendix provides some examples and illustrations of how the + Microwave Topology Model can be used. The tree illustrates an + example of a complete Microwave Topology Model including the relevant + data nodes from network-topology and te-topology (base topology + models). There are also JSON based instantiations of the Microwave + Topology Model for a couple of small network examples. + + The tree below shows an example of the relevant leafs for a complete + Microwave Topology Model including the augmented Network Topology + Model defined in [RFC8345] and the Traffic Engineering (TE) + Topologies model defined in [RFC8795]. + + module: ietf-network + +--rw networks + +--rw network* [network-id] + +--rw network-id network-id + +--rw network-types + | +--rw tet:te-topology! + | +--rw mwtopo:mw-topology! + +--rw supporting-network* [network-ref] + | +--rw network-ref + | -> /nw:networks/nw:network/nw:network-id + +--rw node* [node-id] + | +--rw node-id node-id + | +--rw supporting-node* [network-ref node-ref] + | | +--rw network-ref + | | | -> ../../../nw:supporting-network/nw:network-ref + | | +--rw node-ref + | | -> /nw:networks/nw:network/nw:node/nw:node-id + | +--rw nt:termination-point* [tp-id] + | | +--rw nt:tp-id tp-id + | | +--rw nt:supporting-termination-point* + | | | [network-ref node-ref tp-ref] + | | | +--rw nt:network-ref + | | | | -> ../../../nw:supporting-node/nw:network-ref + | | | +--rw nt:node-ref + | | | | -> ../../../nw:supporting-node/nw:node-ref + | | | +--rw nt:tp-ref leafref + | | +--rw tet:te! + | | +--rw tet:admin-status? + | | | te-types:te-admin-status + | | +--rw tet:name? string + | | +--ro tet:oper-status? + | | | te-types:te-oper-status + | | +--rw mwtopo:mw-tp-choice + | | +--rw (mwtopo:mw-tp-option)? + | | +--:(mwtopo:microwave-rltp) + | | | +--rw mwtopo:microwave-rltp! + | | +--:(mwtopo:microwave-ctp) + | | +--rw mwtopo:microwave-ctp! + | +--rw tet:te-node-id? te-types:te-node-id + | +--rw tet:te! + | +--ro tet:geolocation + | +--ro tet:altitude? int64 + | +--ro tet:latitude? geographic-coordinate-degree + | +--ro tet:longitude? geographic-coordinate-degree + +--rw nt:link* [link-id] + +--rw nt:link-id link-id + +--rw nt:source + | +--rw nt:source-node? -> ../../../nw:node/nw:node-id + | +--rw nt:source-tp? leafref + +--rw nt:destination + | +--rw nt:dest-node? -> ../../../nw:node/nw:node-id + | +--rw nt:dest-tp? leafref + +--rw tet:te! + +--rw (tet:bundle-stack-level)? + | +--:(tet:bundle) + | +--rw tet:bundled-links + | +--rw tet:bundled-link* [sequence] + | +--rw tet:sequence uint32 + | +--rw tet:src-tp-ref? leafref + | +--rw tet:des-tp-ref? leafref + +--rw tet:te-link-attributes + | +--rw tet:name? string + | +--rw tet:admin-status? + | | te-types:te-admin-status + | +--rw tet:max-link-bandwidth + | | +--rw tet:te-bandwidth + | | +--rw (tet:technology)? + | | +--:(mwtopo:microwave) + | | +--ro mwtopo:mw-bandwidth? uint64 + | +--rw mwtopo:mw-link-choice + | +--rw (mwtopo:mw-link-option)? + | +--:(mwtopo:microwave-radio-link) + | | +--rw mwtopo:microwave-radio-link! + | | +--rw mwtopo:rlt-mode + | | +--rw mwtopo:num-bonded-carriers + | | | uint32 + | | +--rw mwtopo:num-protecting-carriers + | | uint32 + | +--:(mwtopo:microwave-carrier) + | +--rw mwtopo:microwave-carrier! + | +--rw mwtopo:tx-frequency? + | | uint32 + | +--rw mwtopo:rx-frequency? + | | uint32 + | +--rw mwtopo:channel-separation? + | | uint32 + | +--ro mwtopo:actual-tx-cm? + | | identityref + | +--ro mwtopo:actual-snir? + | | decimal64 + | +--ro mwtopo:actual-transmitted-level? + | power + +--ro tet:oper-status? + + The Microwave Topology Model augments the TE Topology Model. + + Node N1 Node N2 + +--------------+ +--------------+ + | +----------+ | | +----------+ | L2-network + | | L2-N1- | | L2-N1-N2 | | L2-N2-| | -L2 topology + | | TP1 o---------------------o TP2 | | + | +----------+ | ' | +----------+ | Supporting + | : | ' | : | ' mw link + | : | ' | : | : TPs + | +----------+ | ' | +----------+ | + | |mw-N1- | | mwrl-N1-N2 | | mw-N2-| | MW-network + | |RLTP1 o---------------------o RLTP2 | | -MW topology + | +----------+ | * | +----------+ | + | : : | ******* ******* | : : | + | :: |** **| :: | Supporting + | +-------:--+ * * * * +--:-------+ | : TPs + | |mw-N1- : * | * mwc-N1-N2-A * | * : mw-N2-| | * carriers as + | |CTP1 : o---------------------o : CTP2 | | bundled links + | +-------:--+ | * * | +--:-------+ | + | : |* *| : | + | +----------+ * * +----------+ | + | |mw-N1- * | mwc-N1-N2-B | * mw-N2-| | + | |CTP3 o---------------------o CTP4 | | + | +----------+ | | +----------+ | + +--------------+ +--------------+ + L2 transported over a (2+0) microwave radio link + +A.1. Instance data for 2+0 mode for a bonded configuration + + { + "ietf-network:networks": { + "network": [ + { + "network-id": "L2-network", + "network-types": { + "ietf-te-topology:te-topology": { + } + }, + "supporting-network": [ + { + "network-ref": "mw-network" + } + ], + "node": [ + { + "node-id": "L2-N1", + "supporting-node": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N1" + } + ], + "ietf-network-topology:termination-point": [ + { + "tp-id": "L2-N1-TP1", + "supporting-termination-point": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N1", + "tp-ref": "mw-N1-RLTP1" + } + ] + } + ] + }, + { + "node-id": "L2-N2", + "supporting-node": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N2" + } + ], + "ietf-network-topology:termination-point": [ + { + "tp-id": "L2-N2-TP2", + "supporting-termination-point": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N2", + "tp-ref": "mw-N2-RLTP2" + } + ] + } + ] + } + ], + "ietf-network-topology:link": [ + { + "link-id": "L2-N1-N2", + "source": { + "source-node": "L2-N1", + "source-tp": "L2-N1-TP1" + }, + "destination": { + "dest-node": "L2-N2", + "dest-tp": "L2-N2-TP2" + }, + "supporting-link": [ + { + "network-ref": "mw-network", + "link-ref": "mwrl-N1-N2" + } + ] + } + ] + }, + { + "network-id": "mw-network", + "network-types": { + "ietf-te-topology:te-topology": { + "ietf-microwave-topology:mw-topology": {} + } + }, + "supporting-network": [ + { + "network-ref": "mw-network" + } + ], + "node": [ + { + "node-id": "mw-N1", + "supporting-node": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N1" + } + ], + "ietf-network-topology:termination-point": [ + { + "tp-id": "mw-N1-RLTP1", + "supporting-termination-point": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N1", + "tp-ref": "mw-N1-CTP1" + }, + { + "network-ref": "mw-network", + "node-ref": "mw-N1", + "tp-ref": "mw-N1-CTP3" + } + ], + "ietf-te-topology:te-tp-id": "10.10.10.1", + "ietf-te-topology:te": { + "ietf-microwave-topology:mw-tp-choice": { + "microwave-rltp": {} + } + } + }, + { + "tp-id": "mw-N1-CTP1", + "ietf-te-topology:te-tp-id": 1, + "ietf-te-topology:te": { + "ietf-microwave-topology:mw-tp-choice": { + "microwave-ctp": {} + } + } + }, + { + "tp-id": "mw-N1-CTP3", + "ietf-te-topology:te-tp-id": 2, + "ietf-te-topology:te": { + "ietf-microwave-topology:mw-tp-choice": { + "microwave-ctp": {} + } + } + } + ] + }, + { + "node-id": "mw-N2", + "supporting-node": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N2" + } + ], + "ietf-network-topology:termination-point": [ + { + "tp-id": "mw-N2-RLTP2", + "supporting-termination-point": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N2", + "tp-ref": "mw-N2-CTP2" + }, + { + "network-ref": "mw-network", + "node-ref": "mw-N2", + "tp-ref": "mw-N2-CTP4" + } + ], + "ietf-te-topology:te-tp-id": "10.10.10.1", + "ietf-te-topology:te": { + "ietf-microwave-topology:mw-tp-choice": { + "microwave-rltp": {} + } + } + }, + { + "tp-id": "mw-N2-CTP2", + "ietf-te-topology:te-tp-id": 1, + "ietf-te-topology:te": { + "ietf-microwave-topology:mw-tp-choice": { + "microwave-ctp": {} + } + } + }, + { + "tp-id": "mw-N2-CTP4", + "ietf-te-topology:te-tp-id": 2, + "ietf-te-topology:te": { + "ietf-microwave-topology:mw-tp-choice": { + "microwave-ctp": {} + } + } + } + ] + } + ], + "ietf-network-topology:link": [ + { + "link-id": "mwrl-N1-N2", + "source": { + "source-node": "mw-N1", + "source-tp": "mw-N1-RLTP1" + }, + "destination": { + "dest-node": "mw-N2", + "dest-tp": "mw-N2-RLTP2" + }, + "ietf-te-topology:te": { + "bundled-links": { + "bundled-link": [ + { + "sequence": 1, + "src-tp-ref": "mw-N1-CTP1", + "des-tp-ref": "mw-N2-CTP2" + }, + { + "sequence": 2, + "src-tp-ref": "mw-N1-CTP3", + "des-tp-ref": "mw-N2-CTP4" + } + ] + }, + "te-link-attributes": { + "ietf-microwave-topology:mw-link-choice": { + "microwave-radio-link": { + "rlt-mode": { + "num-bonded-carriers": 2, + "num-protecting-carriers": 0 + } + } + } + } + } + }, + { + "link-id": "mwc-N1-N2-A", + "source": { + "source-node": "mw-N1", + "source-tp": "mw-N1-CTP1" + }, + "destination": { + "dest-node": "mw-N2", + "dest-tp": "mw-N2-CTP2" + }, + "ietf-te-topology:te": { + "te-link-attributes": { + "ietf-microwave-topology:mw-link-choice": { + "microwave-carrier": { + "tx-frequency": 10728000, + "rx-frequency": 10615000, + "channel-separation": 28000 + } + } + } + } + }, + { + "link-id": "mwc-N1-N2-B", + "source": { + "source-node": "mw-N1", + "source-tp": "mw-N1-CTP3" + }, + "destination": { + "dest-node": "mw-N2", + "dest-tp": "mw-N2-CTP4" + }, + "ietf-te-topology:te": { + "te-link-attributes": { + "ietf-microwave-topology:mw-link-choice": { + "microwave-carrier": { + "tx-frequency": 10528000, + "rx-frequency": 10415000, + "channel-separation": 28000 + } + } + } + } + } + ] + } + ] + } + } + +A.2. Instance data for 1+1 mode for a protected configuration + + { + "ietf-network:networks": { + "network": [ + { + "network-id": "L2-network", + "network-types": { + "ietf-te-topology:te-topology": { + } + }, + "supporting-network": [ + { + "network-ref": "mw-network" + } + ], + "node": [ + { + "node-id": "L2-N1", + "supporting-node": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N1" + } + ], + "ietf-network-topology:termination-point": [ + { + "tp-id": "L2-N1-TP1", + "supporting-termination-point": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N1", + "tp-ref": "mw-N1-RLTP1" + } + ] + } + ] + }, + { + "node-id": "L2-N2", + "supporting-node": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N2" + } + ], + "ietf-network-topology:termination-point": [ + { + "tp-id": "L2-N2-TP2", + "supporting-termination-point": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N2", + "tp-ref": "mw-N2-RLTP2" + } + ] + } + ] + } + ], + "ietf-network-topology:link": [ + { + "link-id": "L2-N1-N2", + "source": { + "source-node": "L2-N1", + "source-tp": "L2-N1-TP1" + }, + "destination": { + "dest-node": "L2-N2", + "dest-tp": "L2-N2-TP2" + }, + "supporting-link": [ + { + "network-ref": "mw-network", + "link-ref": "mwrl-N1-N2" + } + ] + } + ] + }, + { + "network-id": "mw-network", + "network-types": { + "ietf-te-topology:te-topology": { + "ietf-microwave-topology:mw-topology": {} + } + }, + "supporting-network": [ + { + "network-ref": "mw-network" + } + ], + "node": [ + { + "node-id": "mw-N1", + "supporting-node": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N1" + } + ], + "ietf-network-topology:termination-point": [ + { + "tp-id": "mw-N1-RLTP1", + "supporting-termination-point": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N1", + "tp-ref": "mw-N1-CTP1" + }, + { + "network-ref": "mw-network", + "node-ref": "mw-N1", + "tp-ref": "mw-N1-CTP3" + } + ], + "ietf-te-topology:te-tp-id": "10.10.10.1", + "ietf-te-topology:te": { + "ietf-microwave-topology:mw-tp-choice": { + "microwave-rltp": {} + } + } + }, + { + "tp-id": "mw-N1-CTP1", + "ietf-te-topology:te-tp-id": 1, + "ietf-te-topology:te": { + "ietf-microwave-topology:mw-tp-choice": { + "microwave-ctp": {} + } + } + }, + { + "tp-id": "mw-N1-CTP3", + "ietf-te-topology:te-tp-id": 2, + "ietf-te-topology:te": { + "ietf-microwave-topology:mw-tp-choice": { + "microwave-ctp": {} + } + } + } + ] + }, + { + "node-id": "mw-N2", + "supporting-node": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N2" + } + ], + "ietf-network-topology:termination-point": [ + { + "tp-id": "mw-N2-RLTP2", + "supporting-termination-point": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N2", + "tp-ref": "mw-N2-CTP2" + }, + { + "network-ref": "mw-network", + "node-ref": "mw-N2", + "tp-ref": "mw-N2-CTP4" + } + ], + "ietf-te-topology:te-tp-id": "10.10.10.1", + "ietf-te-topology:te": { + "ietf-microwave-topology:mw-tp-choice": { + "microwave-rltp": {} + } + } + }, + { + "tp-id": "mw-N2-CTP2", + "ietf-te-topology:te-tp-id": 1, + "ietf-te-topology:te": { + "ietf-microwave-topology:mw-tp-choice": { + "microwave-ctp": {} + } + } + }, + { + "tp-id": "mw-N2-CTP4", + "ietf-te-topology:te-tp-id": 2, + "ietf-te-topology:te": { + "ietf-microwave-topology:mw-tp-choice": { + "microwave-ctp": {} + } + } + } + ] + } + ], + "ietf-network-topology:link": [ + { + "link-id": "mwrl-N1-N2", + "source": { + "source-node": "mw-N1", + "source-tp": "mw-N1-RLTP1" + }, + "destination": { + "dest-node": "mw-N2", + "dest-tp": "mw-N2-RLTP2" + }, + "ietf-te-topology:te": { + "bundled-links": { + "bundled-link": [ + { + "sequence": 1, + "src-tp-ref": "mw-N1-CTP1", + "des-tp-ref": "mw-N2-CTP2" + }, + { + "sequence": 2, + "src-tp-ref": "mw-N1-CTP3", + "des-tp-ref": "mw-N2-CTP4" + } + ] + }, + "te-link-attributes": { + "ietf-microwave-topology:mw-link-choice": { + "microwave-radio-link": { + "rlt-mode": { + "num-bonded-carriers": 1, + "num-protecting-carriers": 1 + } + } + } + } + } + }, + { + "link-id": "mwc-N1-N2-A", + "source": { + "source-node": "mw-N1", + "source-tp": "mw-N1-CTP1" + }, + "destination": { + "dest-node": "mw-N2", + "dest-tp": "mw-N2-CTP2" + }, + "ietf-te-topology:te": { + "te-link-attributes": { + "ietf-microwave-topology:mw-link-choice": { + "microwave-carrier": { + "tx-frequency": 10728000, + "rx-frequency": 10615000, + "channel-separation": 28000 + } + } + } + } + }, + { + "link-id": "mwc-N1-N2-B", + "source": { + "source-node": "mw-N1", + "source-tp": "mw-N1-CTP3" + }, + "destination": { + "dest-node": "mw-N2", + "dest-tp": "mw-N2-CTP4" + }, + "ietf-te-topology:te": { + "te-link-attributes": { + "ietf-microwave-topology:mw-link-choice": { + "microwave-carrier": { + "tx-frequency": 10728000, + "rx-frequency": 10615000, + "channel-separation": 28000 + } + } + } + } + } + ] + } + ] + } + } + +Appendix B. Microwave Topology Model with example extensions + + This appendix provides an examples of how the Microwave Topology + Model can be used with the interface reference topology (ifref) and + the bandwidth-availability-topology (bwa) models. There is also a + snippet of json to show geolocation information instance data. + + The tree below shows an example of the relevant leafs for a complete + Microwave Topology Model including interface reference topology + (ifref) and bandwidth-availability-topology (bwa) models. + + module: ietf-network + +--rw networks + +--rw network* [network-id] + +--rw network-id network-id + +--rw network-types + | +--rw tet:te-topology! + | +--rw mwtopo:mw-topology! + +--rw supporting-network* [network-ref] + | +--rw network-ref + | -> /nw:networks/nw:network/nw:network-id + +--rw node* [node-id] + | +--rw node-id node-id + | +--rw supporting-node* [network-ref node-ref] + | | +--rw network-ref + | | | -> ../../../nw:supporting-network/nw:network-ref + | | +--rw node-ref + | | -> /nw:networks/nw:network/nw:node/nw:node-id + | +--rw nt:termination-point* [tp-id] + | | +--rw nt:tp-id tp-id + | | +--rw nt:supporting-termination-point* + | | | [network-ref node-ref tp-ref] + | | | +--rw nt:network-ref + | | | | -> ../../../nw:supporting-node/nw:network-ref + | | | +--rw nt:node-ref + | | | | -> ../../../nw:supporting-node/nw:node-ref + | | | +--rw nt:tp-ref leafref + | | +--rw tet:te! + | | +--rw tet:admin-status? + | | | te-types:te-admin-status + | | +--rw tet:name? string + | | +--ro tet:oper-status? + | | | te-types:te-oper-status + | | +--rw mwtopo:mw-tp-choice + | | | +--rw (mwtopo:mw-tp-option)? + | | | +--:(mwtopo:microwave-rltp) + | | | | +--rw mwtopo:microwave-rltp! + | | | +--:(mwtopo:microwave-ctp) + | | | +--rw mwtopo:microwave-ctp! + | | +--rw ifref:tp-to-interface-path? -> + /if:interfaces/interface/name + | +--rw tet:te-node-id? te-types:te-node-id + | +--rw tet:te! + | +--ro tet:geolocation + | +--ro tet:altitude? int64 + | +--ro tet:latitude? geographic-coordinate-degree + | +--ro tet:longitude? geographic-coordinate-degree + +--rw nt:link* [link-id] + +--rw nt:link-id link-id + +--rw nt:source + | +--rw nt:source-node? -> ../../../nw:node/nw:node-id + | +--rw nt:source-tp? leafref + +--rw nt:destination + | +--rw nt:dest-node? -> ../../../nw:node/nw:node-id + | +--rw nt:dest-tp? leafref + +--rw tet:te! + +--rw (tet:bundle-stack-level)? + | +--:(tet:bundle) + | +--rw tet:bundled-links + | +--rw tet:bundled-link* [sequence] + | +--rw tet:sequence uint32 + | +--rw tet:src-tp-ref? leafref + | +--rw tet:des-tp-ref? leafref + +--rw tet:te-link-attributes + | +--rw tet:name? string + | +--rw tet:admin-status? + | | te-types:te-admin-status + | +--rw tet:max-link-bandwidth + | | +--rw tet:te-bandwidth + | | +--rw (tet:technology)? + | | +--:(mwtopo:microwave) + | | +--ro mwtopo:mw-bandwidth? uint64 + | +--rw mwtopo:mw-link-choice + | | +--rw (mwtopo:mw-link-option)? + | | +--:(mwtopo:microwave-radio-link) + | | | +--rw mwtopo:microwave-radio-link! + | | | +--rw mwtopo:rlt-mode + | | | +--rw mwtopo:num-bonded-carriers + | | | | uint32 + | | | +--rw mwtopo:num-protecting-carriers + | | | uint32 + | | +--:(mwtopo:microwave-carrier) + | | +--rw mwtopo:microwave-carrier! + | | +--rw mwtopo:tx-frequency? + | | | uint32 + | | +--rw mwtopo:rx-frequency? + | | | uint32 + | | +--rw mwtopo:channel-separation? + | | | uint32 + | | +--ro mwtopo:actual-tx-cm? + | | | identityref + | | +--ro mwtopo:actual-snir? + | | | decimal64 + | | +--ro mwtopo:actual-transmitted-level? + | | decimal64 + | +--rw bwatopo:link-availability* [availability] + | | +--rw bwatopo:availability decimal64 + | | +--rw bwatopo:link-bandwidth? uint64 + | +--ro bwatopo:actual-bandwidth? yang:gauge64 + +--ro tet:oper-status? + + Microwave is a transport technology which can be used to transport + client services, such as L2 Ethernet links. When an L2 link is + transported over a single supporting microwave radio link, the + topologies could be as shown below. Note that the figure just shows + an example, there might be other possibilities to demonstrate such a + topology. The example of the instantiation encoded in JSON is using + only a selected subset of the leafs from the L2 topology model + [RFC8944]. + + Node N1 Node N2 + +--------------+ +--------------+ + | +----------+ | | +----------+ | L2-network + | | L2-N1- | | L2-N1-N2 | | L2-N2-| | -L2 topology + | | TP1 o---------------------o TP2 | | + | +----------+ | ' | +----------+ | Supporting + | : | ' | : | ' mw link + | : | ' | : | : TPs + | +----------+ | ' | +----------+ | + | |mw-N1- | | mwrl-N1-N2 | | mw-N2-| | MW-network + | |RLTP1 o---------------------o RLTP2 | | -MW topology + | +----------+ | * | +----------+ | + | : : | ******* ******* | : : | + | :: |** **| :: | Supporting + | +-------:--+ * * * * +--:-------+ | : TPs + | |mw-N1- : * | * mwc-N1-N2-A * | * : mw-N2-| | * carriers as + | |CTP1 : o---------------------o : CTP2 | | bundled links + | +-------:--+ | * * | +--:-------+ | + | : |* *| : | + | +----------+ * * +----------+ | + | |mw-N1- * | mwc-N1-N2-B | * mw-N2-| | + | |CTP3 o---------------------o CTP4 | | + | +----------+ | | +----------+ | + +--------------+ +--------------+ + L2 transported over a (2+0) microwave radio link + + Node N1 Interfaces + +---------------+ +----------------+ + | +-----------+ |tp-to-interface-path| +------------+ | + | | L2-N1-TP1 |************************|L2Interface1| | + | +-----------+ | | +------------+ | + | | | | + | +-----------+ |tp-to-interface-path| +------------+ | + | |mw-N1-RLTP1|************************| RLT-1 | | + | +-----------+ | | +------------+ | + | | | | + | +-----------+ |tp-to-interface-path| +------------+ | + | |mw-N1-CTP1 |************************| CT-1 | | + | +-----------+ | | +------------+ | + | | | | + | +-----------+ |tp-to-interface-path| +------------+ | + | |mw-N1-CTP3 |************************| CT-3 | | + | +-----------+ | | +------------+ | + +---------------+ +----------------+ + Topology model information to the associated interface + management model information for Node N1 + + Node N2 Interfaces + +---------------+ +----------------+ + | +-----------+ |tp-to-interface-path| +------------+ | + | | L2-N2-TP2 |************************|L2Interface2| | + | +-----------+ | | +------------+ | + | | | | + | +-----------+ |tp-to-interface-path| +------------+ | + | |mw-N2-RLTP2|************************| RLT-2 | | + | +-----------+ | | +------------+ | + | | | | + | +-----------+ |tp-to-interface-path| +------------+ | + | |mw-N2-CTP2 |************************| CT-2 | | + | +-----------+ | | +------------+ | + | | | | + | +-----------+ |tp-to-interface-path| +------------+ | + | |mw-N2-CTP4 |************************| CT-4 | | + | +-----------+ | | +------------+ | + +---------------+ +----------------+ + Topology model information to the associated interface + management model information for Node N2 + +B.1. Instance data for 2+0 mode + + A L2 network with a supporting microwave network, including + microwave-topology (MW) and bandwidth-availability-topology (BWA) + models as well as the reference to the associated interface + management information, is encoded in JSON as follows: + + =============== NOTE: '\' line wrapping per RFC 8792 ================ + + { + "ietf-interfaces:interfaces": { + "interface": [ + { + "name": "L2Interface1", + "description": "'Ethernet Interface 1'", + "type": "iana-if-type:ethernetCsmacd" + }, + { + "name": "L2Interface2", + "description": "'Ethernet Interface 2'", + "type": "iana-if-type:ethernetCsmacd" + }, + { + "name": "RLT-1", + "description": "'Radio Link Terminal 1'", + "type": "iana-if-type:microwaveRadioLinkTerminal", + "ietf-microwave-radio-link:mode": + "ietf-microwave-types:two-plus-zero", + "ietf-microwave-radio-link:carrier-terminations": [ + "CT-1", + "CT-3" + ] + }, + { + "name": "RLT-2", + "description": "'Radio Link Terminal 2'", + "type": "iana-if-type:microwaveRadioLinkTerminal", + "ietf-microwave-radio-link:mode": + "ietf-microwave-types:two-plus-zero", + "ietf-microwave-radio-link:carrier-terminations": [ + "CT-2", + "CT-4" + ] + }, + { + "name": "CT-1", + "description": "'Carrier Termination 1'", + "type": "iana-if-type:microwaveCarrierTermination", + "ietf-microwave-radio-link:tx-frequency": 10728000, + "ietf-microwave-radio-link:duplex-distance": 113000, + "ietf-microwave-radio-link:channel-separation": 28000, + "ietf-microwave-radio-link:rtpc": { + "maximum-nominal-power": "20.0" + }, + "ietf-microwave-radio-link:single": { + "selected-cm": "ietf-microwave-types:qam-512" + } + }, + { + "name": "CT-3", + "description": "'Carrier Termination 3'", + "type": "iana-if-type:microwaveCarrierTermination", + "ietf-microwave-radio-link:tx-frequency": 10528000, + "ietf-microwave-radio-link:duplex-distance": 113000, + "ietf-microwave-radio-link:channel-separation": 28000, + "ietf-microwave-radio-link:rtpc": { + "maximum-nominal-power": "20.0" + }, + "ietf-microwave-radio-link:single": { + "selected-cm": "ietf-microwave-types:qam-512" + } + }, + { + "name": "CT-2", + "description": "'Carrier Termination 2'", + "type": "iana-if-type:microwaveCarrierTermination", + "ietf-microwave-radio-link:tx-frequency": 10615000, + "ietf-microwave-radio-link:duplex-distance": 113000, + "ietf-microwave-radio-link:channel-separation": 28000, + "ietf-microwave-radio-link:rtpc": { + "maximum-nominal-power": "20.0" + }, + "ietf-microwave-radio-link:single": { + "selected-cm": "ietf-microwave-types:qam-512" + } + }, + { + "name": "CT-4", + "description": "'Carrier Termination 4'", + "type": "iana-if-type:microwaveCarrierTermination", + "ietf-microwave-radio-link:tx-frequency": 10415000, + "ietf-microwave-radio-link:duplex-distance": 113000, + "ietf-microwave-radio-link:channel-separation": 28000, + "ietf-microwave-radio-link:rtpc": { + "maximum-nominal-power": "20.0" + }, + "ietf-microwave-radio-link:single": { + "selected-cm": "ietf-microwave-types:qam-512" + } + } + ] + }, + "ietf-network:networks": { + "network": [ + { + "network-id": "L2-network", + "network-types": { + "ietf-te-topology:te-topology": { + "ietf-eth-te-topology:eth-tran-topology": {} + } + }, + "supporting-network": [ + { + "network-ref": "mw-network" + } + ], + "node": [ + { + "node-id": "L2-N1", + "supporting-node": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N1" + } + ], + "ietf-network-topology:termination-point": [ + { + "tp-id": "L2-N1-TP1", + "supporting-termination-point": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N1", + "tp-ref": "mw-N1-RLTP1" + } + ] + } + ] + }, + { + "node-id": "L2-N2", + "supporting-node": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N2" + } + ], + "ietf-network-topology:termination-point": [ + { + "tp-id": "L2-N2-TP2", + "supporting-termination-point": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N2", + "tp-ref": "mw-N2-RLTP2" + } + ] + } + ] + } + ], + "ietf-network-topology:link": [ + { + "link-id": "L2-N1-N2", + "source": { + "source-node": "L2-N1", + "source-tp": "L2-N1-TP1" + }, + "destination": { + "dest-node": "L2-N2", + "dest-tp": "L2-N2-TP2" + }, + "supporting-link": [ + { + "network-ref": "mw-network", + "link-ref": "mwrl-N1-N2" + } + ] + } + ] + }, + { + "network-id": "mw-network", + "network-types": { + "ietf-te-topology:te-topology": { + "ietf-microwave-topology:mw-topology": {} + } + }, + "supporting-network": [ + { + "network-ref": "mw-network" + } + ], + "node": [ + { + "node-id": "mw-N1", + "supporting-node": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N1" + } + ], + "ietf-network-topology:termination-point": [ + { + "tp-id": "mw-N1-RLTP1", + "supporting-termination-point": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N1", + "tp-ref": "mw-N1-CTP1" + }, + { + "network-ref": "mw-network", + "node-ref": "mw-N1", + "tp-ref": "mw-N1-CTP3" + } + ], + "ietf-te-topology:te-tp-id": "10.10.10.1", + "ietf-te-topology:te": { + "ietf-microwave-topology:mw-tp-choice": { + "microwave-rltp": {} + }, + "ietf-tp-interface-reference-topology:tp-to-interf\ + ace-path":"RLT-1" + } + }, + { + "tp-id": "mw-N1-CTP1", + "ietf-te-topology:te-tp-id": 1, + "ietf-te-topology:te": { + "ietf-microwave-topology:mw-tp-choice": { + "microwave-ctp": {} + }, + "ietf-tp-interface-reference-topology:tp-to-interf\ + ace-path":"CT-1" + } + }, + { + "tp-id": "mw-N1-CTP3", + "ietf-te-topology:te-tp-id": 2, + "ietf-te-topology:te": { + "ietf-microwave-topology:mw-tp-choice": { + "microwave-ctp": {} + }, + "ietf-tp-interface-reference-topology:tp-to-interf\ + ace-path":"CT-3" + } + } + ] + }, + { + "node-id": "mw-N2", + "supporting-node": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N2" + } + ], + "ietf-network-topology:termination-point": [ + { + "tp-id": "mw-N2-RLTP2", + "supporting-termination-point": [ + { + "network-ref": "mw-network", + "node-ref": "mw-N2", + "tp-ref": "mw-N2-CTP2" + }, + { + "network-ref": "mw-network", + "node-ref": "mw-N2", + "tp-ref": "mw-N2-CTP4" + } + ], + "ietf-te-topology:te-tp-id": "10.10.10.1", + "ietf-te-topology:te": { + "ietf-microwave-topology:mw-tp-choice": { + "microwave-rltp": {} + }, + "ietf-tp-interface-reference-topology:tp-to-interf\ + ace-path":"RLT-2" + } + }, + { + "tp-id": "mw-N2-CTP2", + "ietf-te-topology:te-tp-id": 1, + "ietf-te-topology:te": { + "ietf-microwave-topology:mw-tp-choice": { + "microwave-ctp": {} + }, + "ietf-tp-interface-reference-topology:tp-to-interf\ + ace-path":"CT-2" + } + }, + { + "tp-id": "mw-N2-CTP4", + "ietf-te-topology:te-tp-id": 2, + "ietf-te-topology:te": { + "ietf-microwave-topology:mw-tp-choice": { + "microwave-ctp": {} + }, + "ietf-tp-interface-reference-topology:tp-to-interf\ + ace-path":"CT-4" + } + } + ] + } + ], + "ietf-network-topology:link": [ + { + "link-id": "mwrl-N1-N2", + "source": { + "source-node": "mw-N1", + "source-tp": "mw-N1-RLTP1" + }, + "destination": { + "dest-node": "mw-N2", + "dest-tp": "mw-N2-RLTP2" + }, + "ietf-te-topology:te": { + "bundled-links": { + "bundled-link": [ + { + "sequence": 1, + "src-tp-ref": "mw-N1-CTP1", + "des-tp-ref": "mw-N2-CTP2" + }, + { + "sequence": 2, + "src-tp-ref": "mw-N1-CTP3", + "des-tp-ref": "mw-N2-CTP4" + } + ] + }, + "te-link-attributes": { + "ietf-microwave-topology:mw-link-choice": { + "microwave-radio-link": { + "rlt-mode": { + "num-bonded-carriers": 2, + "num-protecting-carriers": 0 + } + } + } + } + } + }, + { + "link-id": "mwc-N1-N2-A", + "source": { + "source-node": "mw-N1", + "source-tp": "mw-N1-CTP1" + }, + "destination": { + "dest-node": "mw-N2", + "dest-tp": "mw-N2-CTP2" + }, + "ietf-te-topology:te": { + "te-link-attributes": { + "ietf-bandwidth-availability-topology:link-availability": [ + { + "availability": "0.99", + "link-bandwidth": "998423" + }, + { + "availability": "0.95", + "link-bandwidth": "1048576" + } + ], + "ietf-microwave-topology:mw-link-choice": { + "microwave-carrier": { + "tx-frequency": 10728000, + "rx-frequency": 10615000, + "channel-separation": 28000 + } + } + } + } + }, + { + "link-id": "mwc-N1-N2-B", + "source": { + "source-node": "mw-N1", + "source-tp": "mw-N1-CTP3" + }, + "destination": { + "dest-node": "mw-N2", + "dest-tp": "mw-N2-CTP4" + }, + "ietf-te-topology:te": { + "te-link-attributes": { + "ietf-bandwidth-availability-topology:link-availability": [ + { + "availability": "0.99", + "link-bandwidth": "998423" + }, + { + "availability": "0.95", + "link-bandwidth": "1048576" + } + ], + "ietf-microwave-topology:mw-link-choice": { + "microwave-carrier": { + "tx-frequency": 10528000, + "rx-frequency": 10415000, + "channel-separation": 28000 + } + } + } + } + } + ] + } + ] + } + } + +B.2. Instance data for geolocation information + + This example provides a json snippet that shows geolocation + information. + + "node": [ + { + "node-id": "mw-N1", + + ... + + "ietf-te-topology:te" : { + "ietf-te-topology:geolocation": { + "altitude": "200000", + "latitude": "45", + "longitude": "90" + } + }, + "ietf-network-topology:termination-point": [ + + ... + +Acknowledgments + + This document was prepared using kramdown + + The authors would like to thank ... + +Authors' Addresses + + Jonas Ahlberg + Ericsson + Email: jonas.ahlberg@ericsson.com + + + Scott Mansfield + Ericsson + Email: scott.mansfield@ericsson.com + + + Min Ye + Huawei Technologies + Email: amy.yemin@huawei.com + + + Italo Busi + Huawei Technologies + Email: italo.busi@huawei.com + + + Xi Li + NEC Laboratories Europe + Email: xi.li@neclab.eu + + + Daniela Spreafico + Nokia - IT + Email: daniela.spreafico@nokia.com diff --git a/index.html b/index.html new file mode 100644 index 0000000..dd2e680 --- /dev/null +++ b/index.html @@ -0,0 +1,48 @@ + + + + ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang main preview + + + + +

Editor's drafts for main branch of ietf-ccamp-wg/draft-ietf-ccamp-mw-topo-yang

+

View saved issues, or the latest GitHub issues and pull requests in the repo.

+ + + + + + + + +
Microwave Topology YANG Modelplain textdatatrackerdiff with last submission
+ + + diff --git a/issues.html b/issues.html new file mode 100644 index 0000000..7afaf98 --- /dev/null +++ b/issues.html @@ -0,0 +1,103 @@ + + + + + Issue Viewer + + + + +
+ + + records +
+
+ + + + + + + + + + + + + +
IDTitleStateAuthorAssigneeLabels
+
+
+
+

This page shows GitHub issues in a simple form.

+

The filter box above accepts a set of filters, each separated by space.

+
    +
+

You can /sort on id, recent, or closed.

+

Pressing enter saves the current search. + Pressing esc leaves the text input area.

+

Outside the search box

+

Clicking an issue title displays details for the issue including comments. + Pressing n or j moves to the next issue, + and p or k move to the previous one.

+

Pressing esc closes the issue view, ' focuses search, and + c clears the search.

+
+
+ + diff --git a/issues.js b/issues.js new file mode 100644 index 0000000..632b674 --- /dev/null +++ b/issues.js @@ -0,0 +1,1050 @@ +function setStatus(msg) { + let status = document.getElementById('status'); + status.innerText = msg; +} + +function date(s) { + const d = Date.parse(s); + if (isNaN(d)) { + return 0; + } + return d; +} + +function stateString(issue) { + let str; + if (issue.pr) { + switch (issue.state) { + case 'MERGED': + str = 'merged'; + break; + case 'CLOSED': + str = 'discarded'; + break; + default: + str = 'pr'; + break; + } + } else { + str = issue.state.toLowerCase(); + } + return str; +} + +function stateOrder(issue) { + return ['open', 'pr', 'closed', 'merged', 'discarded'].indexOf(stateString(issue)); +} + +var sortKey = 'id'; +var sortInvert = false; +function invert(x) { + return x * (sortInvert ? -1 : 1); +} +function sort(k) { + sortInvert = (k === sortKey) ? !sortInvert : false; + k = k || sortKey; + let message = k; + switch (k) { + case 'id': + subset.sort((x, y) => invert(x.number - y.number)); + message = 'ID'; + break; + case 'recent': + subset.sort((x, y) => invert(date(y.updatedAt) - date(x.updatedAt))); + message = 'last modified'; + break; + case 'closed': + subset.sort((x, y) => invert(date(y.closedAt) - date(x.closedAt))); + message = 'time of closure'; + break; + case 'title': + subset.sort((x, y) => invert(x.title.localeCompare(y.title))); + break; + case 'state': + subset.sort((x, y) => invert(stateOrder(x) - stateOrder(y))); + break; + case 'author': + subset.sort((x, y) => invert(x.author.localeCompare(y.author))); + break; + default: + setStatus('no idea how to sort like that'); + return; + } + setStatus(`sorted by ${message}${(sortInvert) ? ' (reversed)' : ''}`); + sortKey = k; + list(subset); +} + +function sortSetup() { + ['id', 'title', 'state', 'author'].forEach(k => { + let el = document.getElementById(`sort-${k}`); + el.addEventListener('click', _ => sort(k)); + el.style.cursor = 'pointer'; + el.title = `Sort by ${el.innerText}`; + }); +} + +var db; +async function get() { + db = null; + const response = await fetch('archive.json'); + if (Math.floor(response.status / 100) !== 2) { + throw new Error(`Error loading <${url}>: ${response.status}`); + } + db = await response.json(); + db.pulls.forEach(pr => pr.pr = true); + subset = db.all = db.issues.concat(db.pulls); + db.labels = db.labels.reduce((all, l) => { + all[l.name] = l; + return all; + }, {}); + sort(); + document.title = `${db.repo} Issues`; + console.log(`Loaded ${db.all.length} issues for ${db.repo}.`); + console.log('Raw data for issues can be found in:'); + console.log(' db.all = all issues and pull requests'); + console.log(' subset = just the subset of issues that are shown'); + console.log('format(subset[, formatter]) to dump the current subset to the console'); +} + +var issueFilters = { + assigned: { + args: ['string'], + h: 'assigned to this user', + f: login => issue => { + if (login === '') { + return issue.assignees.length > 0; + } else { + return issue.assignees.some(assignee => assignee === login); + } + }, + }, + + author: { + args: ['string'], + h: 'created by this user', + f: login => issue => issue.author === login, + }, + + commenter: { + args: ['string'], + h: 'commented on by this user', + f: login => issue => { + return issue.author === login || + issue.comments.some(comment => comment.author === login) || + (issue.reviews || []).some(review => review.author === login); + }, + }, + + reviewer: { + args: ['string'], + h: 'reviewed by this user', + f: login => issue => { + return issue.reviews && + issue.reviews.some(review => review.author === login); + }, + }, + + user: { + args: ['string'], + h: 'mentions this user', + f: login => issue => { + return issue.author === login || + issue.assignees.some(assignee => assignee === login) || + issue.comments.some(comment => comment.author === login) || + (issue.reviews || []).some(review => review.author === login); + }, + }, + + closed: { + args: [], + h: 'is closed', + f: issue => issue.state === 'CLOSED', + }, + + open: { + args: [], + h: 'is open', + f: issue => issue.state === 'OPEN', + }, + + merged: { + args: [], + h: 'a merged pull request', + f: issue => issue.state == 'MERGED', + }, + + discarded: { + args: [], + h: 'a discarded pull request', + f: issue => issue.pr && issue.state === 'CLOSED' + }, + + n: { + args: ['integer'], + h: 'issue by number', + f: i => issue => issue.number === i, + }, + + label: { + args: ['string'], + h: 'has a specific label', + f: name => issue => issue.labels.some(label => label === name), + }, + + labelled: { + args: [], + h: 'has any label', + f: issue => issue.labels.length > 0, + }, + + title: { + args: ['string'], + h: 'search title with a regular expression', + f: function(re) { + re = new RegExp(re); + return issue => issue.title.match(re); + } + }, + + body: { + args: ['string'], + h: 'search body with a regular expression', + f: function(re) { + re = new RegExp(re); + return issue => issue.body.match(re); + } + }, + + text: { + args: ['string'], + h: 'search title and body with a regular expression', + f: function(re) { + re = new RegExp(re); + return issue => issue.title.match(re) || issue.body.match(re); + } + }, + + pr: { + args: [], + h: 'is a pull request', + f: issue => issue.pr, + }, + + issue: { + args: [], + h: 'is a plain issue, i.e., not(pr)', + f: function(issue) { + return !issue.pr; + } + }, + + or: { + args: ['filter', '...filter'], + h: 'union', + f: (...filters) => x => filters.some(filter => filter(x)), + }, + + and: { + args: ['filter', '...filter'], + h: 'intersection', + f: (...filters) => x => filters.every(filter => filter(x)), + }, + + + xor: { + args: ['filter', '...filter'], + h: 'for the insane', + f: (...filters) => + x => filters.slice(1).reduce((a, filter) => a ^ filter(x), filters[0](x)), + }, + + not: { + args: ['filter'], + h: 'exclusion', + f: a => issue => !a(issue), + }, + + closed_since: { + args: ['date'], + h: 'issues closed since the date and time', + f: since => issue => date(issue.closedAt) >= since, + }, + + updated_since: { + args: ['date'], + h: 'issues updated since the date and time', + f: since => issue => date(issue.updatedAt) >= since, + } +}; + +class Parser { + constructor(s) { + this.str = s; + this.skipws(); + } + + skipws() { + this.str = this.str.trimLeft(); + } + + jump(idx) { + this.str = this.str.slice(idx); + this.skipws(); + } + + get next() { + return this.str.charAt(0); + } + + parseName() { + let m = this.str.match(/^[a-zA-Z](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?/); + if (!m) { + return; + } + + this.jump(m[0].length); + return m[0]; + } + + parseSeparator(separator) { + if (this.next !== separator) { + throw new Error(`Expecting separator ${separator}`); + } + this.jump(1); + } + + parseString() { + let end = -1; + for (let i = 0; i < this.str.length; ++i) { + let v = this.str.charAt(i); + if (v === ')' || v === ',') { + end = i; + break; + } + } + if (end < 0) { + throw new Error(`Unterminated string`); + } + let s = this.str.slice(0, end).trim(); + this.jump(end); + return s; + } + + parseDate() { + let str = this.parseString(); + let time = Date.parse(str); + if (isNaN(time)) { + throw new Error(`not a valid date: ${str}`); + } + return time; + } + + parseNumber() { + let m = this.str.match(/^\d+/); + if (!m) { + return; + } + this.jump(m[0].length); + return parseInt(m[0], 10); + } + + parseFilter() { + if (this.next === '-') { + this.parseSeparator('-'); + return issueFilters.not.f.call(null, this.parseFilter()); + } + let name = this.parseName(); + if (!name) { + let n = this.parseNumber(); + if (!isNaN(n)) { + return issueFilters.n.f.call(null, n); + } + return; + } + let f = issueFilters[name]; + if (!f) { + throw new Error(`Unknown filter: ${name}`); + } + if (f.args.length === 0) { + return f.f; + } + let args = []; + for (let i = 0; i < f.args.length; ++i) { + let arg = f.args[i]; + let ellipsis = arg.slice(0, 3) === '...'; + if (ellipsis) { + arg = arg.slice(3); + } + + this.parseSeparator((i === 0) ? '(' : ','); + if (arg === 'string') { + args.push(this.parseString()); + } else if (arg === 'date') { + args.push(this.parseDate()); + } else if (arg === 'integer') { + args.push(this.parseNumber()); + } else if (arg === 'filter') { + args.push(this.parseFilter()); + } else { + throw new Error(`Error in filter ${name} definition`); + } + if (ellipsis && this.next === ',') { + --i; + } + } + this.parseSeparator(')'); + return f.f.apply(null, args); + } +} + +var subset = []; +function filterIssues(str) { + subset = db.all; + let parser = new Parser(str); + let f = parser.parseFilter(); + while (f) { + subset = subset.filter(f); + f = parser.parseFilter(); + } +} + +var formatter = { + brief: x => `* ${x.title} (#${x.number})`, + md: x => `* [#${x.number}](${x.url}): ${x.title}`, +}; + +function format(set, f) { + return (set || subset).map(f || formatter.brief).join('\n'); +} + +var debounces = {}; +var debounceSlowdown = 100; +function measureSlowdown() { + let start = Date.now(); + window.setTimeout(_ => { + let diff = Date.now() - start; + if (diff > debounceSlowdown) { + console.log(`slowed to ${diff} ms`); + debounceSlowdown = Math.min(1000, diff + debounceSlowdown / 2); + } + }, 0); +} +function debounce(f) { + let r = now => { + measureSlowdown(); + f(now); + }; + return e => { + if (debounces[f.name]) { + window.clearTimeout(debounces[f.name]); + delete debounces[f.name]; + } + if (e.key === 'Enter') { + r(true); + } else { + debounces[f.name] = window.setTimeout(_ => { + delete debounces[f.name]; + r(false) + }, 10 + debounceSlowdown); + } + } +} + +function cell(row, children, cellClass) { + let td = document.createElement('td'); + if (cellClass) { + td.className = cellClass; + } + if (Array.isArray(children)) { + children.forEach(c => { + td.appendChild(c); + td.appendChild(document.createTextNode(' ')); + }); + } else { + td.appendChild(children); + } + row.appendChild(td); +} + + +function loadAvatars(elements) { + elements.forEach(e => { + let avatar = new Image(16, 16); + avatar.addEventListener('load', _ => e.target.replaceWith(avatar)); + let user = e.target.dataset.user; + avatar.src = `https://github.com/${user}.png?size=16`; + }); +} +var intersection = new IntersectionObserver(loadAvatars, { rootMargin: '50px 0px 100px 0px' }); + +function author(x, click, userSearch) { + let user = x.author || x; + let sp = document.createElement('span'); + sp.classList.add('item', 'user'); + let ai = document.createElement('a'); + ai.href = `https://github.com/${user}`; + ai.className = 'avatar'; + let placeholder = document.createElement('span'); + placeholder.className = 'swatch'; + placeholder.innerText = '\uD83E\uDDD0'; + placeholder.dataset.user = user; + intersection.observe(placeholder); + ai.appendChild(placeholder); + sp.appendChild(ai); + + let au = document.createElement('a'); + au.href = `#${userSearch || 'user'}(${user})`; + au.innerText = user; + au.addEventListener('click', click); + sp.appendChild(au); + return sp; +} + +function issueState(issue, click) { + let st = document.createElement('span'); + st.classList.add('item', 'state'); + let a = document.createElement('a'); + a.innerText = stateString(issue); + a.href = `#${stateString(issue)}`; + if (click) { + a.addEventListener('click', click); + } + st.appendChild(a); + return st; +} + +function showBody(item) { + let div = document.createElement('div'); + div.className = 'body'; + let body = item.body.trim().replace(/\r\n?/g, '\n'); + + let list = null; + let el = null; + let pre = null; + function closeElement() { + if (el) { + if (list) { + list.appendChild(el); + } else { + div.appendChild(el); + } + } + el = null; + pre = null; + } + function closeBoth() { + closeElement(); + if (list) { + div.appendChild(list); + list = null; + } + } + function addText(t) { + if (pre) { + el.appendChild(document.createTextNode(t + '\n')); + return; + } + if (el.innerText !== '') { + el.appendChild(document.createElement('br')); + } + if (t !== '') { + el.appendChild(document.createTextNode(t)); + } + } + + body.split('\n').forEach(t => { + if (t.charAt(0) === ' ') { + t = t.substring(1); // This fixes lots of problems. + } + if (t.indexOf('```') === 0) { + let needNew = !el || !pre; + closeBoth(); + if (needNew) { + el = document.createElement('pre'); + pre = 'q'; + let language = t.substring(3).trim(); + if (language) { + el.dataset.language = language; + } + } + } else if (pre === 'q') { + addText(t); + } else if (!el && t.indexOf(' ') === 0) { + if (!pre) { + closeBoth(); + el = document.createElement('pre'); + pre = 's'; + } + addText(t.substring(3)); + } else if (t.trim() === '') { + closeElement(); + } else if (t.indexOf('# ') === 0) { + closeBoth(); + el = document.createElement('h2'); + addText(t.substring(2).trimLeft()); + closeElement(); + } else if (t.indexOf('## ') === 0) { + closeBoth(); + el = document.createElement('h3'); + addText(t.substring(3).trimLeft()); + closeElement(); + } else if (t.indexOf('### ') === 0) { + closeBoth(); + el = document.createElement('h4'); + addText(t.substring(4).trimLeft()); + closeElement(); + } else if (t.charAt(0) === '>') { + if (!el || el.tagName !== 'BLOCKQUOTE') { + closeElement(); + el = document.createElement('blockquote'); + } + addText(t.substring(1).trimLeft()); + } else if (t.indexOf('* ') === 0 || t.indexOf('- ') === 0) { + if (list && list.tagName !== 'UL') { + closeBoth(); + } else { + closeElement(); + } + if (!list) { + list = document.createElement('ul'); + } + el = document.createElement('li'); + addText(t.substring(2).trimLeft()); + } else if (t.match(/^(?:\(?\d+\)|\d+\.)/)) { + if (list && list.tagName !== 'OL') { + closeBoth(); + } else { + closeElement(); + } + if (!list) { + list = document.createElement('ol'); + } + el = document.createElement('li'); + let sep = t.match(/^(?:\(?\d+\)|\d+\.)/)[0].length; + addText(t.substring(sep).trimLeft()); + } else { + if (list && !el) { + div.appendChild(list); + list = null; + } + if (!el) { + el = document.createElement('p'); + } + addText(t); + } + }); + closeBoth(); + return div; +} + +function showDate(d, reference) { + let de = document.createElement('span'); + de.classList.add('item', 'date'); + const full = d.toISOString(); + const parts = full.split(/[TZ\.]/); + if (reference && parts[0] === reference.toISOString().split('T')[0]) { + de.innerText = parts[1]; + } else { + de.innerText = parts[0] + ' ' + parts[1]; + } + de.title = full; + return de; +} + +function narrow(e, extra) { + e.preventDefault(); + hideIssue(); + let cmd = document.getElementById('cmd'); + let v = `${cmd.value} ${extra}`; + cmd.value = v.trim(); + redraw(true); +} + +function narrowLabel(e) { + narrow(e, `label(${e.target.innerText})`); +} + +function narrowState(e) { + narrow(e, e.target.innerText); +} + +function narrowUser(userType) { + return function narrowUserInner(e) { + narrow(e, `${userType}(${e.target.innerText})`); + }; +} + +function showLabels(labels, click) { + return labels.map(label => { + let item = document.createElement('span'); + item.className = 'item'; + let sp = document.createElement('span'); + sp.className = 'swatch'; + item.appendChild(sp); + let a = document.createElement('a'); + a.innerText = label; + a.href = `#label(${label})`; + if (click) { + a.addEventListener('click', click); + } + if (db.labels.hasOwnProperty(label)) { + sp.style.backgroundColor = '#' + db.labels[label].color; + if (db.labels[label].description) { + item.title = db.labels[label].description; + } + } + item.appendChild(a); + return item; + }); +} + +// Make a fresh replacement element for the identified element. +function freshReplacement(id) { + let e = document.getElementById(id); + let r = document.createElement(e.tagName); + r.id = id; + e.replaceWith(r); + return r; +} + +var displayed = null; + +function show(index) { + if (index < 0 || index >= subset.length) { + hideIssue(); + return; + } + displayed = index; + const issue = subset[index]; + + document.getElementById('overlay').classList.add('active'); + let frame = freshReplacement('issue'); + frame.classList.add('active'); + + function showTitle() { + let title = document.createElement('h2'); + title.className = 'title'; + let number = document.createElement('a'); + number.className = 'number'; + number.href = issue.url; + number.innerText = `#${issue.number}`; + title.appendChild(number); + title.appendChild(document.createTextNode(': ')); + let name = document.createElement('a'); + name.href = issue.url; + name.innerText = issue.title; + title.appendChild(name); + return title; + } + + function showIssueLabels() { + let meta = document.createElement('div'); + meta.className = 'meta'; + showLabels(issue.labels, hideIssue).forEach(el => { + meta.appendChild(el); + meta.appendChild(document.createTextNode(' ')); + }); + return meta; + } + + function showIssueUsers() { + let meta = document.createElement('div'); + meta.className = 'meta'; + meta.appendChild(author(issue, hideIssue, 'author')); + if (issue.assignees && issue.assignees.length > 0) { + let arrow = document.createElement('span'); + arrow.innerText = ' \u279c'; + arrow.title = 'Assigned to'; + meta.appendChild(arrow); + issue.assignees.map(u => author(u, hideIssue, 'assigned')).forEach(el => { + meta.appendChild(document.createTextNode(' ')); + meta.appendChild(el); + }); + } + return meta; + } + + function showIssueDates() { + let meta = document.createElement('div'); + meta.className = 'meta'; + let created = new Date(issue.createdAt); + meta.appendChild(showDate(created)); + meta.appendChild(issueState(issue, hideIssue)); + if (issue.closedAt) { + meta.appendChild(showDate(new Date(issue.closedAt), created)); + } + return meta; + } + + let refdate = null; + function showComment(c) { + let row = document.createElement('tr'); + let cdate = new Date(c.createdAt); + cell(row, showDate(cdate, refdate), 'date'); + refdate = cdate; + cell(row, author(c, hideIssue, (c.commit) ? 'reviewer' : 'commenter'), 'user'); + + if (issue.pr) { + let icon = document.createElement('span'); + switch (c.state) { + case 'APPROVED': + icon.innerText = '\u2714'; + icon.title = 'Approved'; + break; + case 'CHANGES_REQUESTED': + icon.innerText = '\u2718'; + icon.title = 'Changes Requested'; + break; + default: + icon.innerText = '\uD83D\uDCAC'; + icon.title = 'Comment'; + break; + } + cell(row, icon); + } + + let body = showBody(c); + if (c.comments && c.comments.length > 0) { + let codeComments = document.createElement('div'); + codeComments.className = 'item'; + const s = (c.comments.length === 1) ? '' : 's'; + codeComments.innerText = `... ${c.comments.length} comment${s} on changes`; + body.appendChild(codeComments); + } + cell(row, body); + return row; + } + + frame.appendChild(showTitle()); + frame.appendChild(showIssueLabels()); + frame.appendChild(showIssueUsers()); + frame.appendChild(showIssueDates()); + frame.appendChild(showBody(issue)); + + let allcomments = (issue.comments || []).concat(issue.reviews || []); + allcomments.sort((a, b) => date(a.createdAt) - date(b.createdAt)); + let comments = document.createElement('table'); + comments.className = 'comments'; + allcomments.map(showComment).forEach(row => comments.appendChild(row)); + frame.appendChild(comments); + + frame.scroll(0, 0); + frame.focus(); +} + +function hideIssue() { + document.getElementById('help').classList.remove('active'); + document.getElementById('issue').classList.remove('active'); + document.getElementById('overlay').classList.remove('active'); + displayed = null; +} + +function step(n) { + if (displayed === null) { + if (n > 0) { + show(n - 1); + } else { + show(subset.length + n); + } + } else { + show(displayed + n); + } +} + +function makeRow(issue, index) { + function cellID() { + let a = document.createElement('a'); + a.innerText = issue.number; + a.href = issue.url; + a.onclick = e => { + e.preventDefault(); + show(index); + }; + return a; + } + + function cellTitle() { + let a = document.createElement('a'); + a.innerText = issue.title; + a.href = issue.url; + a.onclick = e => { + e.preventDefault(); + show(index); + }; + return a; + } + + let tr = document.createElement('tr'); + cell(tr, cellID(), 'id'); + cell(tr, cellTitle(), 'title'); + cell(tr, issueState(issue, narrowState), 'state'); + cell(tr, author(issue, narrowUser('author'), 'author'), 'user'); + cell(tr, (issue.assignees || []) + .map(u => author(u, narrowUser('assigned'), 'assigned')), 'assignees'); + cell(tr, showLabels(issue.labels, narrowLabel), 'labels'); + return tr; +} + +function list(issues) { + if (!issues) { + return; + } + + let body = freshReplacement('issuelist'); + body.innerHTML = ''; + issues.forEach((issue, index) => { + body.appendChild(makeRow(issue, index)); + }); +} + +var currentFilter = ''; +function filter(str, now) { + try { + filterIssues(str); + setStatus(`${subset.length} records selected`); + if (now) { + window.location.hash = str; + currentFilter = str; + } + } catch (e) { + if (now) { // Only show errors when someone hits enter. + setStatus(`Error: ${e.message}`); + console.log(e); + } + } +} + +function showHelp() { + setStatus('help shown'); + let h = document.getElementById('help'); + h.classList.add('active'); + h.scroll(0, 0); + h.focus(); + document.getElementById('overlay').classList.add('active'); +} + +function slashCmd(cmd) { + if (cmd[0] === 'help') { + document.getElementById('cmd').blur(); + showHelp(); + } else { + setStatus('unknown command: /' + cmd.join(' ')); + } +} + +function redraw(now) { + let cmd = document.getElementById('cmd'); + if (cmd.value.charAt(0) == '/') { + if (now) { + slashCmd(cmd.value.slice(1).split(' ').map(x => x.trim())); + cmd.value = currentFilter; + } + return; + } + + if (!db) { + if (now) { + showStatus('Still loading...'); + } + return; + } + + document.getElementById('help').classList.remove('active'); + filter(cmd.value, now); + list(subset); +} + +function generateHelp() { + let functionhelp = document.getElementById('functions'); + Object.keys(issueFilters).forEach(k => { + let li = document.createElement('li'); + let arglist = ''; + if (issueFilters[k].args.length > 0) { + arglist = '(' + issueFilters[k].args.map(x => '<' + x + '>').join(', ') + ')'; + } + let fn = document.createElement('tt'); + fn.innerText = k + arglist; + li.appendChild(fn); + let help = ''; + if (issueFilters[k].h) { + help = ' - ' + issueFilters[k].h; + } + li.appendChild(document.createTextNode(help)); + functionhelp.appendChild(li); + }); +} + +function addFileHelp() { + setStatus('error loading file'); + if (window.location.protocol !== 'file:') { + return; + } + let p = document.createElement('p'); + p.className = 'warning'; + p.innerHTML = 'Important: Browsers display files inconsistently.' + + ' You can work around this by running an HTTP server,' + + ' such as python3 -m http.server,' + + ' then view this file using that server.'; + document.getElementById('help').insertBefore(p, h.firstChild); +} + +function issueOverlaySetup() { + let overlay = document.getElementById('overlay'); + overlay.addEventListener('click', hideIssue); + window.addEventListener('keyup', e => { + if (e.target.id === 'cmd') { + if (e.key === 'Escape') { + e.preventDefault(); + e.target.blur(); + } + return; + } + if (e.key === 'Escape') { + e.preventDefault(); + hideIssue(); + } + }); + window.addEventListener('keypress', e => { + if (e.target.closest('input')) { + return; + } + if (e.key === 'p' || e.key === 'k') { + e.preventDefault(); + step(-1); + } else if (e.key === 'n' || e.key === 'j') { + e.preventDefault(); + step(1); + } else if (e.key === '?') { + e.preventDefault(); + showHelp(); + } else if (e.key === '\'') { + e.preventDefault(); + hideIssue(); + document.getElementById('cmd').focus(); + } else if (e.key === 'c') { + e.preventDefault(); + hideIssue(); + document.getElementById('cmd').value = ''; + redraw(true); + } + }) +} + +window.onload = () => { + let cmd = document.getElementById('cmd'); + let redrawHandler = debounce(redraw); + cmd.addEventListener('input', redrawHandler); + cmd.addEventListener('keypress', redrawHandler); + window.addEventListener('hashchange', e => { + cmd.value = decodeURIComponent(window.location.hash.substring(1)); + redrawHandler(e); + }); + if (window.location.hash) { + cmd.value = decodeURIComponent(window.location.hash.substring(1)); + } + sortSetup(); + generateHelp(); + issueOverlaySetup(); + get().then(redraw).catch(addFileHelp); +}