module gnpy-path-computation-simplified { yang-version 1; namespace "gnpy:path"; prefix gnpypc; import ietf-inet-types { prefix inet; } organization "Telecom Infra Project OOPT PSE Working Group"; contact "WG Web: contact: contact: "; description "YANG model for gnpy path computation simplified for transportPCE"; revision 2020-09-09 { description "remove key from route-object-include-exclude"; } revision 2020-02-02 { description "second draft with detailed blocking reasons"; reference "YANG model for path computation with gnpy inputs"; } identity SNR-bandwidth { base path-metric-type; description "A metric that records SNR in signal bandwidth"; } identity OSNR-bandwidth { base path-metric-type; description "A metric that records OSNR in signal bandwidth"; } identity SNR-0.1nm { base path-metric-type; description "A metric that records SNR in 0.1nm"; } identity OSNR-0.1nm { base path-metric-type; description "A metric that records OSNR in 0.1nm"; } identity reference_power { base path-metric-type; description "to be revised"; } identity path_bandwidth { base path-metric-type; description "to be revised"; } identity path-metric-type { description "Base identity for path metric type"; } identity route-usage-type { description "Base identity for route usage"; } identity route-include-ero { base route-usage-type; description "Include ERO from route"; } identity route-exclude-ero { base route-usage-type; description "Exclude ERO from route"; } identity route-exclude-srlg { base route-usage-type; description "Exclude SRLG from route"; } typedef te-hop-type { type enumeration { enum LOOSE { description "loose hop in an explicit path"; } enum STRICT { description "strict hop in an explicit path"; } } description "enumerated type for specifying loose or strict paths"; reference "RFC3209: section-4.3.2"; } typedef te-path-disjointness { type bits { bit node { position 0; description "Node disjoint."; } bit link { position 1; description "Link disjoint."; } bit srlg { position 2; description "SRLG (Shared Risk Link Group) disjoint."; } } description "Type of the resource disjointness for a TE tunnel path."; reference "RFC4872: RSVP-TE Extensions in Support of End-to-End Generalized Multi-Protocol Label Switching (GMPLS) Recovery"; } // te-path-disjointness typedef te-node-id { type inet:ip-address; description "An identifier for a node in a topology. The identifier is represented as 32-bit unsigned integer in the dotted-quad notation. This attribute is mapped to Router ID in RFC3630, RFC5329, RFC5305, and RFC6119."; } typedef te-tp-id { type union { type uint32; // Unnumbered type inet:ip-address; // IPv4 or IPv6 address } description "An identifier for a TE link endpoint on a node. This attribute is mapped to local or remote link identifier in RFC3630 and RFC5305."; } typedef accumulated-metric-type { type union { type uint64; type decimal64 { fraction-digits 2; } } description "type useable for accumulative-value"; } grouping effective-freq-slot { /* content copied from ietf-flexi-grid-media-channel, because only M and N are needed from the initial grouping. */ description "The effective frequency slot is an attribute of a media channel and, being a frequency slot, it is described by its nominal central frequency and slot width"; reference "rfc7698"; leaf N { type int32; description "Is used to determine the Nominal Central Frequency. The set of nominal central frequencies can be built using the following expression: f = 193.1 THz + n x 0.00625 THz, where 193.1 THz is ITU-T ''anchor frequency'' for transmission over the C band, n is a positive or negative integer including 0."; reference "rfc7698"; } leaf M { type int32; description "Is used to determine the slot width. A slot width is constrained to be M x SWG (that is, M x 12.5 GHz), where M is an integer greater than or equal to 1."; reference "rfc7698"; } } grouping gnpy-specific-parameters { description "This grouping defines the gnpy specific parameters for requests."; leaf technology { type string; default "flexi-grid"; description "Data plane technology type."; } leaf trx_type { type string; mandatory true; description "name of the transponder type (to be read from equipment library"; } leaf trx_mode { type string; description "name of the transponder mode (to be read from equipment library"; } list effective-freq-slot { key "N"; uses effective-freq-slot; } leaf spacing { type decimal64 { fraction-digits 1; } units "Hz"; mandatory true; description "It is the spacing between channels assuming full load with same channels as the requested one. multiple of 12.5 GHz"; } leaf max-nb-of-channel { type uint32; description "Nb of channel to take into account for the full load case.\n"; } leaf output-power { type decimal64 { fraction-digits 5; } units "W"; description "optical power setting to be used for the propagation"; } leaf path_bandwidth { type decimal64 { fraction-digits 5; } units "bit/s"; mandatory true; description "Capacity required"; } } grouping transponder { leaf transponder-type { type string; description "transponder type."; } leaf transponder-mode { type string; description "transponder mode."; } } grouping hop-attribute { description "This grouping defines the hop attribute parameters for request or response"; choice hop-type { case tsp { container transponder { uses transponder; } } case regen { container regenerator { leaf regenerator-id { type string; } uses transponder; } } case pow { container optical-power { leaf optical-power { type decimal64 { fraction-digits 5; } units "W"; description "hop output (input??) power"; } } } } } grouping path-route-objects { description "List of EROs to be included or excluded when performing the path computation."; container explicit-route-objects { description "Container for the route object list"; list route-object-include-exclude { description "List of explicit route objects to include or exclude in path computation"; leaf explicit-route-usage { type identityref { base route-usage-type; } description "Explicit-route usage."; } uses explicit-route-hop; } } } grouping generic-path-disjointness { description "Path disjointness grouping"; leaf disjointness { type te-path-disjointness; description "The type of resource disjointness. Under primary path, disjointness level applies to all secondary LSPs. Under secondary, disjointness level overrides the one under primary"; } } grouping common-path-constraints-attributes { description "Common path constraints configuration grouping"; uses common-constraints_config; } grouping generic-path-constraints { description "Global named path constraints configuration grouping"; container path-constraints { description "TE named path constraints container"; uses common-path-constraints-attributes; } } grouping explicit-route-hop { description "The explicit route subobject grouping"; leaf index { type uint32; description "ERO subobject index"; } choice type { description "The explicit route subobject type"; case num-unnum-hop { container num-unnum-hop { description "Numbered and Unnumbered link/node explicit route subobject"; leaf node-id { //type te-node-id; type string; description "The identifier of a node in the TE topology."; } leaf link-tp-id { //type te-tp-id; type string; description "TE link termination point identifier. The combination of TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf hop-type { type te-hop-type; description "strict or loose hop"; } } } case label { description "The Label ERO subobject"; container label-hop { description "Label hop type"; uses effective-freq-slot; } } case hop-attribute { uses gnpypc:hop-attribute; } } } grouping common-constraints_config { description "Common constraints grouping that can be set on a constraint set or directly on the tunnel"; container te-bandwidth { description "A requested bandwidth to use for path computation"; uses gnpy-specific-parameters; } } grouping end-points { description "Common grouping to define the TE tunnel end-points"; leaf source { type inet:ip-address; description "TE tunnel source address."; } leaf destination { type inet:ip-address; description "P2P tunnel destination address"; } leaf src-tp-id { type binary; description "TE tunnel source termination point identifier."; } leaf dst-tp-id { type binary; description "TE tunnel destination termination point identifier."; } } grouping synchronization-info { description "Information for sync"; list synchronization { key "synchronization-id"; description "sync list"; leaf synchronization-id { type uint32; description "index"; } container svec { description "Synchronization VECtor"; leaf relaxable { type boolean; default "true"; description "If this leaf is true, path computation process is free to ignore svec content. otherwise it must take into account this svec."; } uses generic-path-disjointness; leaf-list request-id-number { type uint32; description "This list reports the set of M path computation requests that must be synchronized."; } } } } grouping generic-path-properties { description "TE generic path properties grouping"; container path-properties { config false; description "The TE path properties"; list path-metric { key "metric-type"; description "TE path metric type"; leaf metric-type { type identityref { base path-metric-type; } description "TE path metric type"; } leaf accumulative-value { type decimal64 { fraction-digits 2; } description "TE path metric accumulative value"; } } // container path-route-objects { // description // "Container for the list of route objects either returned by // the computation engine or actually used by an LSP"; // list path-route-object { // key index; // description // "List of route objects either returned by the computation // engine or actually used by an LSP"; // uses explicit-route-hop; // } // } list path-route-objects { description "Container for the list of route objects either returned by the computation engine or actually used by an LSP"; container path-route-object { description "List of route objects either returned by the computation engine or actually used by an LSP"; uses explicit-route-hop; } } } } grouping path-info { description "Path computation output information"; uses generic-path-properties; } // adding some blocking reasons and info on path in case of blocking grouping no-path-info { description "no-path-info"; container no-path { presence "Response without path information, due to failure performing the path computation"; description "if path computation cannot identify a path, rpc returns no path."; leaf no-path { type string; mandatory true; description "returned blocking reasons: NO_PATH NO_COMPUTED_SNR NO_FEASIBLE_BAUDRATE_WITH_SPACING NO_PATH_WITH_CONSTRAINT NO_FEASIBLE_MODE MODE_NOT_FEASIBLE NO_SPECTRUM "; } uses generic-path-properties; } } /* TODO : correct the following with good trees: * te:tunnels-rpc/te:input/te:tunnel-info * te:tunnels-rpc/te:output/te:result */ grouping service { list path-request { key "request-id"; description "request-list"; leaf request-id { type uint32; mandatory true; description "Each path computation request is uniquely identified by the request-id-number."; } leaf bidirectional { type boolean; mandatory true; description "Specify the bidirectionality of the path"; } uses end-points; uses path-route-objects; uses generic-path-constraints; } uses synchronization-info; } grouping result { list response { key "response-id"; config false; description "response"; leaf response-id { type uint32; description "The list key that has to reuse request-id-number."; } choice response-type { config false; description "response-type"; case no-path-case { uses no-path-info; } case path-case { description "Path computation service."; uses path-info; } } } } container result { description "Describe the service file to connect to gnpy"; uses result; } }