...
Interface B relies on service path Yang model and rpc "path-calculation-request".
Service path Yang model and rpc "path-calculation-request"
Interface C
based on service path Yang model and rpc "service implementation-request" & "service-delete".
rpc "service implementation-request" & "service-delete"
Service handler logic
proposal ongoing...
...
A tree view (Yang Model sent separately by email) is proposed here to modelize the input/output parameters to be passed over B interface. These parameters come from the service model with still some variations. These variations come mainly from PCE requirements section (but not only).
For discussion
module: org-openroadm-servicepath
+--rw service-path-list
+--rw service-paths* [service-path]
+--rw service-path-name string
+--rw service-handler-header
| +--rw request-id string
+--rw service-a-end
| +--rw service-format org-openroadm-common-service-types:service-format
| +--rw service-rate uint32
| +--rw clli string
| +--rw node-id? string
| +--rw tx-direction
| | +--rw port
| | +--rw port-device-name? string
| | +--rw port-type? string
| | +--rw port-name? string
| | +--rw port-rack? string
| | +--rw port-shelf? string
| | +--rw port-slot? string
| | +--rw port-sub-slot? string
| +--rw rx-direction
| +--rw port
| +--rw port-device-name? string
| +--rw port-type? string
| +--rw port-name? string
| +--rw port-rack? string
| +--rw port-shelf? string
| +--rw port-slot? string
| +--rw port-sub-slot? string
+--rw service-z-end
| +--rw service-format org-openroadm-common-service-types:service-format
| +--rw service-rate uint32
| +--rw clli string
| +--rw node-id? string
| +--rw tx-direction
| | +--rw port
| | +--rw port-device-name? string
| | +--rw port-type? string
| | +--rw port-name? string
| | +--rw port-rack? string
| | +--rw port-shelf? string
| | +--rw port-slot? string
| | +--rw port-sub-slot? string
| +--rw rx-direction
| +--rw port
| +--rw port-device-name? string
| +--rw port-type? string
| +--rw port-name? string
| +--rw port-rack? string
| +--rw port-shelf? string
| +--rw port-slot? string
| +--rw port-sub-slot? string
+--rw hard-constraints
| +--rw customer-code* string
| +--rw (co-routing-or-general)?
| +--:(general)
| | +--rw diversity
| | | +--rw existing-service* string
| | | +--rw existing-service-applicability
| | | +--rw clli? boolean
| | | +--rw node? boolean
| | | +--rw srlg? boolean
| | +--rw exclude_
| | | +--rw SRLG* string
| | | +--rw clli* string
| | | +--rw node-id* string
| | | +--rw supporting-service-name* string
| | | +--rw affinity? uint32
| | +--rw include_
| | | +--rw ordered-hops* [hop-number]
| | | +--rw hop-number uint16
| | | +--rw hop-type
| | | +--rw (hop-type)?
| | | +--:(SRLG)
| | | | +--rw SRLG? string
| | | +--:(clli)
| | | | +--rw clli? string
| | | +--:(node)
| | | +--rw node-id? string
| | +--rw latency
| | +--rw max-latency? uint32
| +--:(co-routing)
| +--rw co-routing
| +--rw existing-service* string
+--rw soft-constraints
| +--rw customer-code* string
| +--rw (co-routing-or-general)?
| +--:(general)
| | +--rw diversity
| | | +--rw existing-service* string
| | | +--rw existing-service-applicability
| | | +--rw clli? boolean
| | | +--rw node? boolean
| | | +--rw srlg? boolean
| | +--rw exclude_
| | | +--rw SRLG* string
| | | +--rw clli* string
| | | +--rw node-id* string
| | | +--rw supporting-service-name* string
| | | +--rw affinity? uint32
| | +--rw include_
| | | +--rw ordered-hops* [hop-number]
| | | +--rw hop-number uint16
| | | +--rw hop-type
| | | +--rw (hop-type)?
| | | +--:(SRLG)
| | | | +--rw SRLG? string
| | | +--:(clli)
| | | | +--rw clli? string
| | | +--:(node)
| | | +--rw node-id? string
| | +--rw latency
| | +--rw max-latency? uint32
| +--:(co-routing)
| +--rw co-routing
| +--rw existing-service* string
+--rw pce-metric? enumeration
+--rw locally-protected-links? boolean
+--rw latency? uint32
+--rw fiber-span-srlgs* string
+--rw equipment-srgs* [srg-number]
| +--rw srg-number uint16
+--rw supporting-service-name* string
+--rw path-description
+--rw aToZ-direction
| +--rw aToZ-wavelength-number uint32
| +--rw rate uint32
| +--rw modulation-format? string
| +--rw aToZ* [id]
| +--rw id string
| +--rw resource
| +--rw (resource)?
| +--:(termination-point)
| | +--rw tp-id? string
| | +--rw node-id? string
| +--:(link)
| | +--rw link-id? string
| +--:(node)
| +--rw node-id? string
+--rw zToA-direction
+--rw zToA-wavelength-number uint32
+--rw rate uint32
+--rw modulation-format? string
+--rw zToA* [id]
+--rw id string
+--rw resource
+--rw (resource)?
+--:(termination-point)
| +--rw tp-id? string
| +--rw node-id? string
+--:(link)
| +--rw link-id? string
+--:(node)
+--rw node-id? string
rpcs:
+---x path-computation-request
| +---w input
| | +---w service-name string
| | +---w resource-reserve boolean
| | +---w service-handler-header
| | | +---w request-id string
| | +---w service-a-end
| | | +---w service-format org-openroadm-common-service-types:service-format
| | | +---w service-rate uint32
| | | +---w clli string
| | | +---w node-id? string
| | | +---w tx-direction
| | | | +---w port
| | | | +---w port-device-name? string
| | | | +---w port-type? string
| | | | +---w port-name? string
| | | | +---w port-rack? string
| | | | +---w port-shelf? string
| | | | +---w port-slot? string
| | | | +---w port-sub-slot? string
| | | +---w rx-direction
| | | +---w port
| | | +---w port-device-name? string
| | | +---w port-type? string
| | | +---w port-name? string
| | | +---w port-rack? string
| | | +---w port-shelf? string
| | | +---w port-slot? string
| | | +---w port-sub-slot? string
| | +---w service-z-end
| | | +---w service-format org-openroadm-common-service-types:service-format
| | | +---w service-rate uint32
| | | +---w clli string
| | | +---w node-id? string
| | | +---w tx-direction
| | | | +---w port
| | | | +---w port-device-name? string
| | | | +---w port-type? string
| | | | +---w port-name? string
| | | | +---w port-rack? string
| | | | +---w port-shelf? string
| | | | +---w port-slot? string
| | | | +---w port-sub-slot? string
| | | +---w rx-direction
| | | +---w port
| | | +---w port-device-name? string
| | | +---w port-type? string
| | | +---w port-name? string
| | | +---w port-rack? string
| | | +---w port-shelf? string
| | | +---w port-slot? string
| | | +---w port-sub-slot? string
| | +---w hard-constraints
| | | +---w customer-code* string
| | | +---w (co-routing-or-general)?
| | | +--:(general)
| | | | +---w diversity
| | | | | +---w existing-service* string
| | | | | +---w existing-service-applicability
| | | | | +---w clli? boolean
| | | | | +---w node? boolean
| | | | | +---w srlg? boolean
| | | | +---w exclude_
| | | | | +---w SRLG* string
| | | | | +---w clli* string
| | | | | +---w node-id* string
| | | | | +---w supporting-service-name* string
| | | | | +---w affinity? uint32
| | | | +---w include_
| | | | | +---w ordered-hops* [hop-number]
| | | | | +---w hop-number uint16
| | | | | +---w hop-type
| | | | | +---w (hop-type)?
| | | | | +--:(SRLG)
| | | | | | +---w SRLG? string
| | | | | +--:(clli)
| | | | | | +---w clli? string
| | | | | +--:(node)
| | | | | +---w node-id? string
| | | | +---w latency
| | | | +---w max-latency? uint32
| | | +--:(co-routing)
| | | +---w co-routing
| | | +---w existing-service* string
| | +---w soft-constraints
| | | +---w customer-code* string
| | | +---w (co-routing-or-general)?
| | | +--:(general)
| | | | +---w diversity
| | | | | +---w existing-service* string
| | | | | +---w existing-service-applicability
| | | | | +---w clli? boolean
| | | | | +---w node? boolean
| | | | | +---w srlg? boolean
| | | | +---w exclude_
| | | | | +---w SRLG* string
| | | | | +---w clli* string
| | | | | +---w node-id* string
| | | | | +---w supporting-service-name* string
| | | | | +---w affinity? uint32
| | | | +---w include_
| | | | | +---w ordered-hops* [hop-number]
| | | | | +---w hop-number uint16
| | | | | +---w hop-type
| | | | | +---w (hop-type)?
| | | | | +--:(SRLG)
| | | | | | +---w SRLG? string
| | | | | +--:(clli)
| | | | | | +---w clli? string
| | | | | +--:(node)
| | | | | +---w node-id? string
| | | | +---w latency
| | | | +---w max-latency? uint32
| | | +--:(co-routing)
| | | +---w co-routing
| | | +---w existing-service* string
| | +---w pce-metric? enumeration
| | +---w locally-protected-links? boolean
| +--ro output
| +--ro configuration-response-common
| | +--ro request-id string
| | +--ro response-code string
| | +--ro response-message? string
| | +--ro ack-final-indicator string
| +--ro response-parameters
| +--ro hard-constraints
| | +--ro customer-code* string
| | +--ro (co-routing-or-general)?
| | +--:(general)
| | | +--ro diversity
| | | | +--ro existing-service* string
| | | | +--ro existing-service-applicability
| | | | +--ro clli? boolean
| | | | +--ro node? boolean
| | | | +--ro srlg? boolean
| | | +--ro exclude_
| | | | +--ro SRLG* string
| | | | +--ro clli* string
| | | | +--ro node-id* string
| | | | +--ro supporting-service-name* string
| | | | +--ro affinity? uint32
| | | +--ro include_
| | | | +--ro ordered-hops* [hop-number]
| | | | +--ro hop-number uint16
| | | | +--ro hop-type
| | | | +--ro (hop-type)?
| | | | +--:(SRLG)
| | | | | +--ro SRLG? string
| | | | +--:(clli)
| | | | | +--ro clli? string
| | | | +--:(node)
| | | | +--ro node-id? string
| | | +--ro latency
| | | +--ro max-latency? uint32
| | +--:(co-routing)
| | +--ro co-routing
| | +--ro existing-service* string
| +--ro soft-constraints
| | +--ro customer-code* string
| | +--ro (co-routing-or-general)?
| | +--:(general)
| | | +--ro diversity
| | | | +--ro existing-service* string
| | | | +--ro existing-service-applicability
| | | | +--ro clli? boolean
| | | | +--ro node? boolean
| | | | +--ro srlg? boolean
| | | +--ro exclude_
| | | | +--ro SRLG* string
| | | | +--ro clli* string
| | | | +--ro node-id* string
| | | | +--ro supporting-service-name* string
| | | | +--ro affinity? uint32
| | | +--ro include_
| | | | +--ro ordered-hops* [hop-number]
| | | | +--ro hop-number uint16
| | | | +--ro hop-type
| | | | +--ro (hop-type)?
| | | | +--:(SRLG)
| | | | | +--ro SRLG? string
| | | | +--:(clli)
| | | | | +--ro clli? string
| | | | +--:(node)
| | | | +--ro node-id? string
| | | +--ro latency
| | | +--ro max-latency? uint32
| | +--:(co-routing)
| | +--ro co-routing
| | +--ro existing-service* string
| +--ro pce-metric? enumeration
| +--ro locally-protected-links? boolean
| +--ro path-description
| +--ro aToZ-direction
| | +--ro aToZ-wavelength-number uint32
| | +--ro rate uint32
| | +--ro modulation-format? string
| | +--ro aToZ* [id]
| | +--ro id string
| | +--ro resource
| | +--ro (resource)?
| | +--:(termination-point)
| | | +--ro tp-id? string
| | | +--ro node-id? string
| | +--:(link)
| | | +--ro link-id? string
| | +--:(node)
| | +--ro node-id? string
| +--ro zToA-direction
| +--ro zToA-wavelength-number uint32
| +--ro rate uint32
| +--ro modulation-format? string
| +--ro zToA* [id]
| +--ro id string
| +--ro resource
| +--ro (resource)?
| +--:(termination-point)
| | +--ro tp-id? string
| | +--ro node-id? string
| +--:(link)
| | +--ro link-id? string
| +--:(node)
| +--ro node-id? string
notifications:
+---n service-path-rpc-result
| +--ro notification-type? org-openroadm-common-service-path-types:service-path-notification-types
| +--ro path-description
| | +--ro aToZ-direction
| | | +--ro aToZ-wavelength-number uint32
| | | +--ro rate uint32
| | | +--ro modulation-format? string
| | | +--ro aToZ* [id]
| | | +--ro id string
| | | +--ro resource
| | | +--ro (resource)?
| | | +--:(termination-point)
| | | | +--ro tp-id? string
| | | | +--ro node-id? string
| | | +--:(link)
| | | | +--ro link-id? string
| | | +--:(node)
| | | +--ro node-id? string
| | +--ro zToA-direction
| | +--ro zToA-wavelength-number uint32
| | +--ro rate uint32
| | +--ro modulation-format? string
| | +--ro zToA* [id]
| | +--ro id string
| | +--ro resource
| | +--ro (resource)?
| | +--:(termination-point)
| | | +--ro tp-id? string
| | | +--ro node-id? string
| | +--:(link)
| | | +--ro link-id? string
| | +--:(node)
| | +--ro node-id? string
| +--ro status rpc-status-ex
| +--ro service-name string
| +--ro actual-date? yang:date-and-time
Interface C
based on service path Yang model and rpc "service implementation-request" & "service-delete".
Here below the tree view of the two RPCs, and of the notification service-rpc-result-sp
module: org-openroadm-servicepath
rpcs :
+---x service-implementation-request
| +---w input
| | +---w service-name string
| | +---w service-handler-header
| | | +---w request-id string
| | +---w service-a-end
| | | +---w service-format org-openroadm-common-service-types:service-format
| | | +---w service-rate uint32
| | | +---w clli string
| | | +---w node-id? string
| | | +---w tx-direction
| | | | +---w port
| | | | +---w port-device-name? string
| | | | +---w port-type? string
| | | | +---w port-name? string
| | | | +---w port-rack? string
| | | | +---w port-shelf? string
| | | | +---w port-slot? string
| | | | +---w port-sub-slot? string
| | | +---w rx-direction
| | | +---w port
| | | +---w port-device-name? string
| | | +---w port-type? string
| | | +---w port-name? string
| | | +---w port-rack? string
| | | +---w port-shelf? string
| | | +---w port-slot? string
| | | +---w port-sub-slot? string
| | +---w service-z-end
| | | +---w service-format org-openroadm-common-service-types:service-format
| | | +---w service-rate uint32
| | | +---w clli string
| | | +---w node-id? string
| | | +---w tx-direction
| | | | +---w port
| | | | +---w port-device-name? string
| | | | +---w port-type? string
| | | | +---w port-name? string
| | | | +---w port-rack? string
| | | | +---w port-shelf? string
| | | | +---w port-slot? string
| | | | +---w port-sub-slot? string
| | | +---w rx-direction
| | | +---w port
| | | +---w port-device-name? string
| | | +---w port-type? string
| | | +---w port-name? string
| | | +---w port-rack? string
| | | +---w port-shelf? string
| | | +---w port-slot? string
| | | +---w port-sub-slot? string
| | +---w path-description
| | +---w aToZ-direction
| | | +---w aToZ-wavelength-number uint32
| | | +---w rate uint32
| | | +---w modulation-format? string
| | | +---w aToZ* [id]
| | | +---w id string
| | | +---w resource
| | | +---w (resource)?
| | | +--:(termination-point)
| | | | +---w tp-id? string
| | | | +---w node-id? string
| | | +--:(link)
| | | | +---w link-id? string
| | | +--:(node)
| | | +---w node-id? string
| | +---w zToA-direction
| | +---w zToA-wavelength-number uint32
| | +---w rate uint32
| | +---w modulation-format? string
| | +---w zToA* [id]
| | +---w id string
| | +---w resource
| | +---w (resource)?
| | +--:(termination-point)
| | | +---w tp-id? string
| | | +---w node-id? string
| | +--:(link)
| | | +---w link-id? string
| | +--:(node)
| | +---w node-id? string
| +--ro output
| +--ro configuration-response-common
| +--ro request-id string
| +--ro response-code string
| +--ro response-message? string
| +--ro ack-final-indicator string
+---x service-delete
+---w input
| +---w service-name string
| +---w service-handler-header
| +---w request-id string
+--ro output
+--ro configuration-response-common
+--ro request-id string
+--ro response-code string
+--ro response-message? string
+--ro ack-final-indicator string
+---x cancel-resource-reserve
| +---w input
| | +---w service-name string
| | +---w service-handler-header
| | +---w request-id string
| +--ro output
| +--ro configuration-response-common
| +--ro request-id string
| +--ro response-code string
| +--ro response-message? string
| +--ro ack-final-indicator string
notifications:
+---n service-rpc-result-sp
+--ro notification-type? org-openroadm-common-service-path-types:service-path-notification-types
+--ro path-topology
| +--ro aToZ* [id]
| | +--ro id string
| | +--ro hop-type? enumeration
| | +--ro device
| | | +--ro node-id? string
| | +--ro resource
| | | +--ro (resource)?
| | | +--:(circuit-pack)
| | | | +--ro circuit-pack-name string
| | | +--:(port)
| | | | +--ro port
| | | | +--ro circuit-pack-name string
| | | | +--ro port-name? string
| | | +--:(connection)
| | | | +--ro connection-number string
| | | +--:(physical-link)
| | | | +--ro physical-link-name string
| | | +--:(internal-link)
| | | | +--ro internal-link-name string
| | | +--:(shelf)
| | | | +--ro shelf-name string
| | | +--:(srg)
| | | | +--ro srg-number uint16
| | | +--:(degree)
| | | | +--ro degree-number uint16
| | | +--:(service)
| | | | +--ro service-name string
| | | +--:(interface)
| | | +--ro interface-name string
| | +--ro resourceType
| | +--ro type resource-type-enum
| | +--ro extension? string
| +--ro zToA* [id]
| +--ro id string
| +--ro hop-type? enumeration
| +--ro device
| | +--ro node-id? string
| +--ro resource
| | +--ro (resource)?
| | +--:(circuit-pack)
| | | +--ro circuit-pack-name string
| | +--:(port)
| | | +--ro port
| | | +--ro circuit-pack-name string
| | | +--ro port-name? string
| | +--:(connection)
| | | +--ro connection-number string
| | +--:(physical-link)
| | | +--ro physical-link-name string
| | +--:(internal-link)
| | | +--ro internal-link-name string
| | +--:(shelf)
| | | +--ro shelf-name string
| | +--:(srg)
| | | +--ro srg-number uint16
| | +--:(degree)
| | | +--ro degree-number uint16
| | +--:(service)
| | | +--ro service-name string
| | +--:(interface)
| | +--ro interface-name string
| +--ro resourceType
| +--ro type resource-type-enum
| +--ro extension? string
+--ro status rpc-status-ex
+--ro service-name string
+--ro actual-date? yang:date-and-time
Service handler logic
proposal ongoing...
service creation
Brief explanation:
- Upon receipt of service-create RPC, service header and sdnc-request header compliancy are verified.
- If compliant, service-request parameters are verified in order to check if there is no missing parameter that prevents calculating a path and implement a service.
- If OK, common-id is verified in order to see if there is no routing policy provided. If yes, the routing constraints of the policy are recovered and coherency with hard/soft constraints provided in the input of the RPC.
- If OK, service due-time is verified. For any service to be activated later on, it is proposed to store them and wait for due-time to become equal to immediate (see xx). This behavior shall be improved in further release.
- Before sending the PCE request, input data need to be formatted according to the Service Handler - PCE interface data model.
- Once PCE request is being sent to the PCE on interface B, PCE reply is expected until a timer expires.
- If PCE reply is received before timer expiration with a positive result, a service is created with admin and operational status 'down'.
- A service implementation request is sent to the render on interface C.
- If a positive message is received from the renderer, service admin / operational status is changed to 'up'.
- For any case of failure, response-code, response message and ack-final-indicator shall be provided.
service feasibility check
service delete
service modify:
one or several technical parameters are modified in service description
service restore:
service has been reported to be down (for network issue) and a restoration is being requested
NB: service delete is sent to the renderer for deletion in the network. However, the service is not deleted in service database. Only its path is cleared since removed from the network.
service reversion:
return to nominal path is requested for a service previously rerouted/restored. This still requires to store nominal path. For a service being restored, only the new path path is stored (in the service model).
non-permanent services management
in-life service management
:
services can be disturbed because of some network events. An OAM function in ODL controller is in charge of collecting network events, SLA measurements and updates services accordingly. Service notfications are then sent to any external function having subscribed to these notifications. However, OAM function is out of the scope of transportpce project.
- ...
Optical validation
This section gives an overview of how optical validation function is invoked in different implementations of the PCE.
...