draft-ietf-netconf-partial-lock-01.txt | draft-ietf-netconf-partial-lock-02.txt | |||
---|---|---|---|---|
NETCONF B. Lengyel | NETCONF B. Lengyel | |||
Internet-Draft Ericsson Hungary | Internet-Draft Ericsson Hungary | |||
Intended status: Standards Track M. Bjorklund | Intended status: Standards Track M. Bjorklund | |||
Expires: August 28, 2008 Tail-f Systems | Expires: December 15, 2008 Tail-f Systems | |||
February 25, 2008 | June 13, 2008 | |||
Partial Lock RPC for NETCONF | Partial Lock RPC for NETCONF | |||
draft-ietf-netconf-partial-lock-01 | draft-ietf-netconf-partial-lock-02 | |||
Status of this Memo | Status of this Memo | |||
By submitting this Internet-Draft, each author represents that any | By submitting this Internet-Draft, each author represents that any | |||
applicable patent or other IPR claims of which he or she is aware | applicable patent or other IPR claims of which he or she is aware | |||
have been or will be disclosed, and any of which he or she becomes | have been or will be disclosed, and any of which he or she becomes | |||
aware will be disclosed, in accordance with Section 6 of BCP 79. | aware will be disclosed, in accordance with Section 6 of BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that | |||
skipping to change at page 1, line 35 | skipping to change at page 1, line 35 | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
This Internet-Draft will expire on August 28, 2008. | This Internet-Draft will expire on December 15, 2008. | |||
Copyright Notice | Copyright Notice | |||
Copyright (C) The IETF Trust (2008). | Copyright (C) The IETF Trust (2008). | |||
Abstract | Abstract | |||
The NETCONF protocol defines the lock and unlock RPCs that lock | The NETCONF protocol defines the lock and unlock RPCs that lock | |||
entire configuration datastores. In some situations, a way to lock | entire configuration datastores. In some situations, a way to lock | |||
only parts of a configuration datastore is required. This document | only parts of a configuration datastore is required. This document | |||
skipping to change at page 2, line 15 | skipping to change at page 2, line 15 | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.1. Definition of Terms . . . . . . . . . . . . . . . . . . . 3 | 1.1. Definition of Terms . . . . . . . . . . . . . . . . . . . 3 | |||
2. Partial Locking Capability . . . . . . . . . . . . . . . . . . 3 | 2. Partial Locking Capability . . . . . . . . . . . . . . . . . . 3 | |||
2.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2.2. Dependencies . . . . . . . . . . . . . . . . . . . . . . . 4 | 2.2. Dependencies . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
2.3. Capability Identifier . . . . . . . . . . . . . . . . . . 4 | 2.3. Capability Identifier . . . . . . . . . . . . . . . . . . 4 | |||
2.4. New Operations . . . . . . . . . . . . . . . . . . . . . . 4 | 2.4. New Operations . . . . . . . . . . . . . . . . . . . . . . 4 | |||
2.4.1. <partial-lock> . . . . . . . . . . . . . . . . . . . . 4 | 2.4.1. <partial-lock> . . . . . . . . . . . . . . . . . . . . 4 | |||
2.4.2. <partial-unlock> . . . . . . . . . . . . . . . . . . . 7 | 2.4.2. <partial-unlock> . . . . . . . . . . . . . . . . . . . 8 | |||
2.5. Modifications to Existing Operations . . . . . . . . . . . 8 | 2.5. Modifications to Existing Operations . . . . . . . . . . . 9 | |||
2.6. Interactions with Other Capabilities . . . . . . . . . . . 8 | 2.6. Interactions with Other Capabilities . . . . . . . . . . . 9 | |||
2.6.1. Writable-Running Capability . . . . . . . . . . . . . 8 | 2.6.1. Writable-Running Capability . . . . . . . . . . . . . 9 | |||
2.6.2. Candidate Configuration Capability . . . . . . . . . . 8 | 2.6.2. Candidate Configuration Capability . . . . . . . . . . 9 | |||
2.6.3. Distinct Startup Capability . . . . . . . . . . . . . 8 | 2.6.3. Distinct Startup Capability . . . . . . . . . . . . . 9 | |||
3. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | 3. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | |||
4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | |||
5. Appendix A - Change Log . . . . . . . . . . . . . . . . . . 10 | 5. Appendix A - XML Schema for Partial Locking (normative) . . 11 | |||
5.1. Open Issues . . . . . . . . . . . . . . . . . . . . . . . 10 | ||||
5.2. -00 . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | ||||
5.3. 00-01 . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | ||||
6. Appendix B - YANG Module for Partial Locking | 6. Appendix B - YANG Module for Partial Locking | |||
(non-normative) . . . . . . . . . . . . . . . . . . . . . . . 11 | ||||
7. Appendix C - XML Schema for Partial Locking | ||||
(non-normative) . . . . . . . . . . . . . . . . . . . . . . . 13 | (non-normative) . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 15 | 7. Appendix C - Change Log . . . . . . . . . . . . . . . . . . 15 | |||
9. Normative References . . . . . . . . . . . . . . . . . . . . . 16 | 7.1. 01-02 . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 17 | 7.2. 00-01 . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
Intellectual Property and Copyright Statements . . . . . . . . . . 18 | 7.3. -00 . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 16 | ||||
9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 17 | ||||
9.1. Normative References . . . . . . . . . . . . . . . . . . . 17 | ||||
9.2. Informative References . . . . . . . . . . . . . . . . . . 17 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 18 | ||||
Intellectual Property and Copyright Statements . . . . . . . . . . 19 | ||||
1. Introduction | 1. Introduction | |||
The NETCONF protocol [RFC4741] describes the lock and unlock RPCs | The NETCONF protocol [NETCONF] describes the lock and unlock RPCs | |||
that operate on entire configuration datastores. Often, multiple | that operate on entire configuration datastores. Often, multiple | |||
management sessions need to be able to modify the configuration of a | management sessions need to be able to modify the configuration of a | |||
managed device in parallel. In these cases, locking only parts of a | managed device in parallel. In these cases, locking only parts of a | |||
configuration datastore is needed. This document defines an | configuration datastore is needed. This document defines an | |||
extension to the NETCONF protocol to allow this. | extension to the NETCONF protocol to allow this. | |||
The mechanism for partial locking is based on the existing XPath | The mechanism for partial locking is based on the existing XPath | |||
filtering mechanisms. | filtering mechanisms. | |||
Partial locking is defined as a capability to NETCONF. | Partial locking is defined as a capability to NETCONF. | |||
skipping to change at page 3, line 36 | skipping to change at page 3, line 36 | |||
2. Partial Locking Capability | 2. Partial Locking Capability | |||
2.1. Overview | 2.1. Overview | |||
The :partial-lock capability indicates that the device supports the | The :partial-lock capability indicates that the device supports the | |||
locking of its configuration with a scope smaller then a complete | locking of its configuration with a scope smaller then a complete | |||
configuration datastore. The scope to be locked is specified by | configuration datastore. The scope to be locked is specified by | |||
using restricted or full XPath expressions. Partial locking covers | using restricted or full XPath expressions. Partial locking covers | |||
configuration data, but not state data. | configuration data, but not state data. | |||
The system ensures that configuration resources covered by the lock | The system MUST ensure that configuration resources covered by the | |||
are not be modified by other NETCONF or non-NETCONF management | lock are not modified by other NETCONF or non-NETCONF management | |||
operations such as SNMP and the CLI. | operations such as SNMP and the CLI. | |||
The duration of the partial lock is defined as beginning when the | The duration of the partial lock is defined as beginning when the | |||
partial lock is granted and lasting until either the corresponding | partial lock is granted and lasting until either the corresponding | |||
<partial-unlock> operation succeeds or the NETCONF session | <partial-unlock> operation succeeds or the NETCONF session | |||
terminates. | terminates. | |||
A NETCONF session MAY have multiple parts of one or more datastores | A NETCONF session MAY have multiple parts of one or more datastores | |||
locked using partial lock operations. The <partial-lock> operation | (running, candidate,startup) locked using partial lock operations. | |||
returns a lock-id to identify each successfully acquired lock. | The <partial-lock> operation returns a lock-id to identify each | |||
successfully acquired lock. | ||||
2.2. Dependencies | 2.2. Dependencies | |||
Partial locking uses only restricted XPath expressions to describe | The device MUST support the restricted XPath expressions in the | |||
the lock's scope, as described in Section 2.4.1 for the select | select element, as described in Section 2.4.1 If optionally the | |||
element. However if optionally the :xpath capability is also | :xpath capability is also supported, the device MUST also support the | |||
supported, partial locking can utilize any Xpath 1.0 expression. | usage of any XPath 1.0 expression in the select element. | |||
2.3. Capability Identifier | 2.3. Capability Identifier | |||
urn:ietf:params:netconf:capability:partial-lock:1.0 | urn:ietf:params:netconf:capability:partial-lock:1.0 | |||
2.4. New Operations | 2.4. New Operations | |||
2.4.1. <partial-lock> | 2.4.1. <partial-lock> | |||
The <partial-lock> operation allows the client to lock a portion of a | The <partial-lock> operation allows the client to lock a portion of a | |||
skipping to change at page 4, line 32 | skipping to change at page 4, line 32 | |||
expressions in the select elements of the <partial-lock> operation. | expressions in the select elements of the <partial-lock> operation. | |||
Each XPath expression MUST return a node set. | Each XPath expression MUST return a node set. | |||
The select XPath expressions are evaluated only once at lock time, | The select XPath expressions are evaluated only once at lock time, | |||
thereafter the scope of the lock is maintained as a set of nodes. If | thereafter the scope of the lock is maintained as a set of nodes. If | |||
the configuration data is later altered in a way that would make the | the configuration data is later altered in a way that would make the | |||
original select XPath expressions evaluate to a different set of | original select XPath expressions evaluate to a different set of | |||
nodes, this does not affect the scope of the partial lock. | nodes, this does not affect the scope of the partial lock. | |||
XPath is only used for the creation of the partial lock. | XPath is only used for the creation of the partial lock. | |||
Conceptually the scope of the lock is defined by the returned nodeset | Conceptually the scope of the lock is defined by the returned node | |||
and not by the XPath expression. | set and not by the XPath expression. | |||
A <partial-lock> operation MUST be handled atomically by the NETCONF | A <partial-lock> operation MUST be handled atomically by the NETCONF | |||
server. The server either locks all requested parts of the data | server. The server either locks all requested parts of the data | |||
store or none. | store or none; I.e. if during the operation one of the requested | |||
parts cannot be locked the server MUST unlock all parts that have | ||||
been already locked during that operation. | ||||
If a node is locked by a session, only that same session is able to | If a node is locked by a session, only that same session is able to | |||
modify that node or any node in the subtree underneath it. | modify that node or any node in the subtree underneath it. | |||
If a top level node of a locked subtree is deleted, any other session | If a top level node of a locked subtree is deleted, any other session | |||
can recreate it, as it is not covered by the lock anymore. | can recreate it, as it is not covered by the lock anymore. If all | |||
top level nodes are deleted, the lock will still be present, however | ||||
it's scope will become nil i.e. it will not cover any nodes. | ||||
A partial lock MUST fail if: | A partial lock MUST fail if: | |||
o Any NETCONF session (including the current session) owns the | o Any NETCONF session (including the current session) owns the | |||
global lock on the datastore. | global lock on the datastore. | |||
o Any part of the scope to be locked is already locked by another | o Any part of the scope to be locked is already locked by another | |||
management session/protocol, including other NETCONF sessions | management session/protocol, including other NETCONF sessions | |||
using the <partial-lock> or any other non-NETCONF management | using the <partial-lock> or any other non-NETCONF management | |||
method. | method. | |||
o The NETCONF server implements access control and the locking user | o The NETCONF server implements access control and the locking user | |||
does not have at least some basic access rights, e.g., read | does not have sufficient privileges, to all parts of the datastore | |||
rights, to all of the datastore section to be locked. The exact | section to be locked. The exact handling of access rights is | |||
handling of access rights is outside the scope of this document, | outside the scope of this document, but it is assumed that there | |||
but it is assumed that there is an access control system that MAY | is an access control system that MAY deny or allow the partial | |||
deny or allow the partial lock operation. | lock operation. | |||
As with most locking systems, there is a possibility that two users | Note: If partial lock is requested for the running datastore, and the | |||
trying to lock different parts of the configuration become dead- | NETCONF server implements the :confirmed-commit capability, and there | |||
locked. To avoid this situation, clients SHOULD lock everything they | was a recent confirmed <commit> operation, where the confirming | |||
need in one operation. If that operation still fails, the client | <commit> operation has not been received. In this case the lock MUST | |||
SHOULD back down, release any already acquired locks, and retry the | be denied, because if the confirmation does not arrive, the running | |||
procedure after some time interval. The length of the interval | datastore MUST be rolled back to its state before the commit, thus | |||
should preferably be random to avoid repeated dead-locks when both | the NETCONF server might need to modify the configuration. | |||
(or all) clients back down and then repeat locking. | ||||
As with most locking systems, there is a possibility that two | ||||
management sessions trying to lock different parts of the | ||||
configuration become dead-locked. To avoid this situation, clients | ||||
SHOULD lock everything they need in one operation. If that operation | ||||
still fails, the client SHOULD back down, release any already | ||||
acquired locks, and retry the procedure after some time interval. | ||||
The length of the interval should preferably be random to avoid | ||||
repeated dead-locks when both (or all) clients back down and then | ||||
repeat locking. | ||||
It is the intention to keep partial-locking simple, so when a partial | It is the intention to keep partial-locking simple, so when a partial | |||
lock is executed you get what you asked for: a set of nodes that are | lock is executed you get what you asked for: a set of nodes that are | |||
locked for writing. There are some other issues that are | locked for writing. There are some other issues that are | |||
intentionally not addressed for the sake of simplicity. | intentionally not addressed for the sake of simplicity: | |||
o Locking does not effect read operations. | o Locking does not affect read operations. | |||
o If a part of a datastore is locked, this has no effect on any | o If a part of a datastore is locked, this has no effect on any | |||
unlocked parts of the datastore. If this is a problem e.g. the | unlocked parts of the datastore. If this is a problem e.g. the | |||
operator's changes depend on data values in the unlocked part of | operator's changes depend on data values in the unlocked part of | |||
the datastore, the operator should include these values in the | the datastore, the operator should include these values in the | |||
scope of the lock. | scope of the lock. | |||
o An operator is allowed to edit the configuration both inside and | o An operator is allowed to edit the configuration both inside and | |||
outside the scope of a lock. It is the operator's responsibility | outside the scope of a lock. It is the operator's responsibility | |||
to lock all parts of the datastore that are crucial for a specific | to lock all parts of the datastore that are crucial for a specific | |||
management action. | management action. | |||
Note: The <partial-lock> operation does not modify the global <lock> | Note: The <partial-lock> operation does not modify the global <lock> | |||
operation defined in the base NETCONF Protocol [RFC4741]. If part of | operation defined in the base NETCONF Protocol [NETCONF]. If part of | |||
a datastore is already locked by <partial-lock>, then a global lock | a datastore is already locked by <partial-lock>, then a global lock | |||
for that datastore fails even if the global lock is attempted by the | for that datastore fails even if the global lock is attempted by the | |||
same NETCONF session which owns the partial-lock. | same NETCONF session which owns the partial-lock. | |||
Parameters: | Parameters: | |||
target: Name of the configuration datastore of which a part shall be | target: Name of the configuration datastore of which a part shall be | |||
locked. URLs are not accepted. | locked. One <partial-lock> operation can affect only one of the | |||
datastores. URLs are not accepted. | ||||
select: One or more 'select' elements each containing an XPath | select: One or more 'select' elements each containing an XPath | |||
expression. The XPath expression is evaluated in a context where | expression. The XPath expression is evaluated in a context where | |||
the context node is the root of the server's conceptual data | the context node is the root of the server's conceptual data | |||
model, and the set of namespace declarations are those in scope | model, and the set of namespace declarations are those in scope | |||
on the select element. | on the select element. | |||
The select expressions MUST return a node set. | The select expressions MUST each return a node set, and at least | |||
one of the node sets must be non-empty. | ||||
If the device supports the :xpath capability as well any valid | If the device supports the :xpath capability as well any valid | |||
XPath 1.0 expression can be used, if not, the XPath expression | XPath 1.0 expression can be used, if not, the XPath expression | |||
MUST be limited to an Instance Identifier expression [Editor's | MUST be limited to an Instance Identifier expression. An | |||
Note: add text or reference]. An Instance Identifier is an | Instance Identifier is an absolute path expression in abbreviated | |||
absolute path expression in abbreviated syntax, where predicates | syntax, where predicates are used only to specify values for | |||
are used only to specify values for nodes defined as keys to | nodes defined as keys to distinguish multiple instances. | |||
distinguish multiple instances.] | ||||
Example: Lock virtual router 1 and interface eth1 | Example: Lock virtual router 1 and interface eth1 | |||
<nc:rpc | <nc:rpc | |||
xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" | xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" | |||
xmlns="urn:ietf:params:xml:ns:netconf:partial-lock:1.0" | xmlns="urn:ietf:params:xml:ns:netconf:partial-lock:1.0" | |||
xmlns:rte="http://example.com/ns/route"> | xmlns:rte="http://example.com/ns/route"> | |||
xmlns:if="http://example.com/ns/interface"> | xmlns:if="http://example.com/ns/interface"> | |||
nc:message-id="135"> | nc:message-id="135"> | |||
<partial-lock> | <partial-lock> | |||
<nc:running/> | <nc:running/> | |||
<select>/routing/virtualRouter['routerName=router1']</select> | <select>/routing/virtualRouter['routerName=router1']</select> | |||
<select>/interfaces/['interfaceId=eth1']</select> | <select>/interfaces/interface[Id='eth1']</select> | |||
</partial-lock> | </partial-lock> | |||
</nc:rpc> | </nc:rpc> | |||
<nc:rpc-reply | <nc:rpc-reply | |||
xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" | xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" | |||
xmlns="urn:ietf:params:xml:ns:netconf:partial-lock:1.0" | xmlns="urn:ietf:params:xml:ns:netconf:partial-lock:1.0" | |||
xmlns:rte="http://example.com/ns/route"> | xmlns:rte="http://example.com/ns/route"> | |||
xmlns:if="http://example.com/ns/interface"> | xmlns:if="http://example.com/ns/interface"> | |||
nc:message-id="135"> | nc:message-id="135"> | |||
<nc:data> | <nc:data> | |||
skipping to change at page 7, line 11 | skipping to change at page 7, line 39 | |||
</nc:rpc-reply> | </nc:rpc-reply> | |||
Positive Response: | Positive Response: | |||
If the device was able to satisfy the request, an <rpc-reply> is sent | If the device was able to satisfy the request, an <rpc-reply> is sent | |||
with a <lock-id> element (lock identifier) in the <data> element. | with a <lock-id> element (lock identifier) in the <data> element. | |||
Negative Response: | Negative Response: | |||
If a lock is already held on any node within the subtrees to be | If a lock is already held on any node within the subtrees to be | |||
locked, the <error-tag> element shall be 'lock-denied' and the | locked, the <error-tag> element is 'lock-denied' and the <error-info> | |||
<error-info> element shall include the <session-id> of the lock | element includes the <session-id> of the lock owner. If the lock is | |||
owner. If the lock is held by a non-NETCONF entity, a <session-id> | held by a non-NETCONF entity, a <session-id> of 0 (zero) is included. | |||
of 0 (zero) is included. | ||||
If the select expressions return an empty node set, the <error-tag> | If the select expressions return an empty node set, the <error-tag> | |||
shall be 'operation-failed', and the <error-app-tag> shall be 'no- | is 'operation-failed', and the <error-app-tag> is 'no-matches'. | |||
matches'. | ||||
If any select expression returns anything but a node set, the <error- | If any select expression returns anything but a node set, the <error- | |||
tag> shall be 'invalid-value'. | tag> is 'invalid-value', the <error-app-tag> is 'XPath does not | |||
return a node set'. | ||||
If the :xpath capability is not supported and the XPath expression is | If the :xpath capability is not supported and the XPath expression is | |||
not an Instance Identifier, the <error-tag> shall be 'invalid-value'. | not an Instance Identifier, the <error-tag> is 'invalid-value', the | |||
<error-app-tag> is ':xpath capability not supported'. | ||||
If access control denies the partial lock, the <error-tag> shall be | If access control denies the partial lock, the <error-tag> is | |||
'access-denied'. | 'access-denied'. | |||
2.4.1.1. Reserving model sections for future work | ||||
Partial lock can not be used to lock non-existing nodes, effectively | ||||
reserving them for future use. To make sure that a node cannot be | ||||
created by some other session, the parent node should be locked, the | ||||
top level node of the new section created, and then locked with | ||||
another <partial-lock> operation. After this the lock on the parent | ||||
node should be removed. | ||||
2.4.2. <partial-unlock> | 2.4.2. <partial-unlock> | |||
The operation unlocks a part of a datastore that was previously | The operation unlocks a part of a datastore that was previously | |||
locked using <partial-lock> during the same session. | locked using <partial-lock> during the same session. | |||
Parameters: | Parameters: | |||
lock-id: Lock identifier to unlock; taken from a reply to a previous | lock-id: Lock identifier to unlock; taken from a reply to a previous | |||
<partial-lock> operation. | <partial-lock> operation. | |||
skipping to change at page 8, line 16 | skipping to change at page 9, line 7 | |||
that contains an <ok> element. A positive response MUST be sent even | that contains an <ok> element. A positive response MUST be sent even | |||
if all of the locked part of the datastore has already been deleted. | if all of the locked part of the datastore has already been deleted. | |||
Negative Response: | Negative Response: | |||
If the <lock-id> parameter does not identify a lock which is owned by | If the <lock-id> parameter does not identify a lock which is owned by | |||
the session, an 'invalid-value' error is returned. | the session, an 'invalid-value' error is returned. | |||
2.5. Modifications to Existing Operations | 2.5. Modifications to Existing Operations | |||
None. | A granted partial-lock will cause operations that want to modify the | |||
locked area to fail, if executed in a NETCONF session other then the | ||||
one that owns the lock. Affected operations include: <edit-config>, | ||||
<copy-config>, <delete-config>, <commit> and <discard-changes>. A | ||||
granted partial-lock will also cause the (global) <lock> operation to | ||||
fail. All of these operations are affected only if they are for the | ||||
same datastore. | ||||
2.6. Interactions with Other Capabilities | 2.6. Interactions with Other Capabilities | |||
2.6.1. Writable-Running Capability | 2.6.1. Writable-Running Capability | |||
Partial locking of the running datastore can only be done if the | Partial locking of the running datastore can only be done if the | |||
:writable-running capability is supported by the device. | :writable-running capability is supported by the device. | |||
2.6.2. Candidate Configuration Capability | 2.6.2. Candidate Configuration Capability | |||
skipping to change at page 8, line 39 | skipping to change at page 9, line 36 | |||
locking of the candidate datastore does not depend on whether the | locking of the candidate datastore does not depend on whether the | |||
datastore was modified or not. | datastore was modified or not. | |||
2.6.3. Distinct Startup Capability | 2.6.3. Distinct Startup Capability | |||
Partial locking of the startup datastore can only be done if the | Partial locking of the startup datastore can only be done if the | |||
:startup capability is supported by the device. | :startup capability is supported by the device. | |||
3. Security Considerations | 3. Security Considerations | |||
The same considerations as for the base NETCONF Protocol [RFC4741] | The same considerations as for the base NETCONF Protocol [NETCONF] | |||
are valid. It is assumed that the <partial-lock> and <partial- | are valid. It is assumed that the <partial-lock> and <partial- | |||
unlock> RPCs are only allowed for an authenticated user after passing | unlock> RPCs are only allowed for an authenticated user after passing | |||
some access control mechanism. | some access control mechanism. | |||
A lock either a partial-lock or a global lock might prevent other | ||||
users from configuring the system. The following mechanisms are in | ||||
place to prevent the misuse of this possibility: | ||||
Only an authenticated user after passing access control can | ||||
request a partial-lock. | ||||
The partial-lock is automatically released when a session is | ||||
terminated irrespective of the manner the session ends. | ||||
The <kill-session> operation allows terminating other users | ||||
sessions. | ||||
The NETCONF server may log partial-lock requests in an audit | ||||
trail. | ||||
Partial locking is NOT an authorization mechanism, it should not be | ||||
used to provide security or access control. Partial locking should | ||||
only be used as a mechanism to provide consistency in case of | ||||
multiple managers trying to configure the node. It is vital that the | ||||
operator can easily understand the exact scope of a lock, for this | ||||
reason the scope is determined when granting a lock and is not | ||||
modified dynamically later. | ||||
4. IANA Considerations | 4. IANA Considerations | |||
This document registers a URN for the the following NETCONF | This document registers two URIs for the NETCONF XML namespace in the | |||
capability in the netconf registry (RFC4741], sect 10.3): | IETF XML registry [RFC3688]. Note that the capability URN is | |||
compliant to [NETCONF] section 10.3. | ||||
+---------------+---------------------------------------------------+ | +---------------+---------------------------------------------------+ | |||
| Index | Capability Identifier | | | Index | Capability Identifier | | |||
+---------------+---------------------------------------------------+ | +---------------+---------------------------------------------------+ | |||
| :partial-lock | urn:ietf:params:netconf:capability:partial-lock:1 | | | :partial-lock | urn:ietf:params:netconf:capability:partial-lock:1 | | |||
| | .0 | | | | .0 | | |||
+---------------+---------------------------------------------------+ | +---------------+---------------------------------------------------+ | |||
5. Appendix A - Change Log | URI: urn:ietf:params:xml:ns:netconf:partial-lock:1.0 | |||
5.1. Open Issues | Registrant Contact: The IESG. | |||
Shall we allow the locking of non-existent nodes? The operator | XML: N/A, the requested URI is an XML namespace. | |||
might want to reserve an object or rather its key/name even if he | ||||
will create the object later. | ||||
Should we include more detailed information in error results to | 5. Appendix A - XML Schema for Partial Locking (normative) | |||
help debug lock conflicts, e.g. the userId of the conflicting | ||||
session, the XPath expression of the conflicting session, the | ||||
instanceId of the first object where the lock conflict was found? | ||||
Should we allow users to lock parts of multiple datastores (e.g. | The following XML Schema defines the <partial-lock> and <partial- | |||
/top/routing both in the candidate and the running datastore) in | unlock> operations: | |||
one operation? This would decrease the probability of a dead- | ||||
lock, but currently the (global) <lock> operation doesn't support | ||||
this. | ||||
5.2. -00 | <?xml version="1.0" encoding="UTF-8"?> | |||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" | ||||
xmlns="urn:ietf:params:xml:ns:netconf:partial-lock:1.0" | ||||
xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" | ||||
targetNamespace="urn:ietf:params:xml:ns:netconf:partial-lock:1.0" | ||||
elementFormDefault="qualified" attributeFormDefault="unqualified"> | ||||
Created from draft-lengyel-ngo-partial-lock-01.txt | <xs:annotation> | |||
<xs:documentation> | ||||
Schema defining the partial-lock and unlock operations. | ||||
organization "IETF NETCONF Working Group" | ||||
contact | ||||
"Balazs Lengyel | ||||
Ericsson Hungary, Inc. | ||||
balazs.lengyel@ericsson.com" | ||||
</xs:documentation> | ||||
</xs:annotation> | ||||
5.3. 00-01 | <xs:import namespace="urn:ietf:params:xml:ns:netconf:base:1.0" | |||
schemaLocation="netconf.xsd"/> | ||||
Added YANG module. | <xs:complexType name="partialLockType"> | |||
<xs:complexContent> | ||||
<xs:extension base="nc:rpcOperationType"> | ||||
<xs:sequence> | ||||
<xs:element ref="nc:config-name"/> | ||||
<xs:element name="select" type="xs:string" | ||||
maxOccurs="unbounded"/> | ||||
</xs:sequence> | ||||
</xs:extension> | ||||
</xs:complexContent> | ||||
</xs:complexType> | ||||
<xs:complexType name="partialUnLockType"> | ||||
<xs:complexContent> | ||||
<xs:extension base="nc:rpcOperationType"> | ||||
<xs:sequence> | ||||
<xs:element name="lock-id" type="xs:unsignedInt"/> | ||||
</xs:sequence> | ||||
</xs:extension> | ||||
</xs:complexContent> | ||||
</xs:complexType> | ||||
<!-- <partial-lock> operation --> | ||||
<xs:element name="partial-lock" type="partialLockType" | ||||
substitutionGroup="nc:rpcOperation"/> | ||||
<!-- <partial-unlock> operation --> | ||||
<xs:element name="partial-unlock" type="partialUnLockType" | ||||
substitutionGroup="nc:rpcOperation"/> | ||||
<!-- reply to <partial-lock> --> | ||||
<xs:element name="lock-id" type="xs:unsignedInt"/> | ||||
</xs:schema> | ||||
6. Appendix B - YANG Module for Partial Locking (non-normative) | 6. Appendix B - YANG Module for Partial Locking (non-normative) | |||
The following Yang modul defines the <partial-lock> and <partial- | The following YANG module defines the <partial-lock> and <partial- | |||
unlock> operations. | unlock> operations. The YANG language is defined in | |||
This and the following Appendix are non-normative as the method to | [I-D.ietf-netmod-yang]. | |||
define NETCONF operations is not yet agreed. Either the YANG or the | ||||
XSD or some other model will later probably become normative. | ||||
module netconf-partial-lock { | module netconf-partial-lock { | |||
namespace urn:ietf:params:xml:ns:netconf:partial-lock:1.0; | namespace urn:ietf:params:xml:ns:netconf:partial-lock:1.0; | |||
prefix pl; | prefix pl; | |||
organization "IETF NETCONF Working Group"; | organization "IETF NETCONF Working Group"; | |||
contact | contact | |||
"Balazs Lengyel | "Balazs Lengyel | |||
Ericsson Hungary, Inc. | Ericsson Hungary, Inc. | |||
balazs.lengyel@ericsson.com"; | balazs.lengyel@ericsson.com"; | |||
description | description | |||
"This YANG module defines the <partial-lock> and | "This YANG module defines the <partial-lock> and | |||
<partial-unlock> operations."; | <partial-unlock> operations."; | |||
revision 2008-01-07 { | revision 2008-06-06 { | |||
description "Inital version."; | description "Initial version."; | |||
} | } | |||
grouping configName { | grouping configName { | |||
description | description | |||
"A choice to list the datastore names for NETCONF. | "A choice to list the datastore names for NETCONF. | |||
This could be moved to a netconf.yang module."; | This could be moved to a netconf.yang module."; | |||
choice configNameType { | choice configNameType { | |||
leaf running { type empty; } | leaf running { type empty; } | |||
leaf candidate { type empty; } | leaf candidate { type empty; } | |||
leaf startup { type empty; } | leaf startup { type empty; } | |||
} | } | |||
} | } | |||
rpc partial-lock { | rpc partial-lock { | |||
description "A NETCONF operation that locks part of a datastore."; | ||||
input { | input { | |||
uses configName; | uses configName; | |||
leaf-list select { | leaf-list select { | |||
description | ||||
"XPath expression that specifies the scope of the lock. | ||||
An Instance Identifier expression must be used unless the | ||||
:xpath capability is supported in which case any XPath 1.0 | ||||
expression is allowed."; | ||||
type string; | type string; | |||
min-elements 1; | min-elements 1; | |||
} | } | |||
} | } | |||
output { | output { | |||
leaf lockId { type uint32; } | leaf lockId { | |||
description | ||||
"Identifies the lock, if granted. The lockId must be | ||||
used in the partial-unlock rpc."; | ||||
type uint32; | ||||
} | ||||
} | } | |||
} | } | |||
rpc partial-unlock { | rpc partial-unlock { | |||
input { | input { | |||
leaf lockId { type uint32; } | leaf lockId { | |||
description | ||||
"Identifies the lock to be released. Must be the value | ||||
received in the response to the partial-lock operation."; | ||||
type uint32; | ||||
} | ||||
} | } | |||
} | } | |||
} | } | |||
7. Appendix C - XML Schema for Partial Locking (non-normative) | 7. Appendix C - Change Log | |||
The following XML Schema defines the <partial-lock> and <partial- | 7.1. 01-02 | |||
unlock> operations: | ||||
<?xml version="1.0" encoding="UTF-8"?> | Made XSD normative | |||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" | ||||
xmlns="urn:ietf:params:xml:ns:netconf:partial-lock:1.0" | ||||
xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" | ||||
targetNamespace="urn:ietf:params:xml:ns:netconf:partial-lock:1.0" | ||||
elementFormDefault="qualified" attributeFormDefault="unqualified"> | ||||
<xs:annotation> | Clarified that no specific access control is assumed. | |||
<xs:documentation> | ||||
Schema defining the partial-lock and unlock operations. | ||||
</xs:documentation> | ||||
</xs:annotation> | ||||
<xs:import namespace="urn:ietf:params:xml:ns:netconf:base:1.0" | Clarified that non-existing nodes are NOT covered by the lock, even | |||
schemaLocation="urn:ietf:params:xml:ns:netconf:base:1.0"/> | if they where existing and covered by the lock when it was originally | |||
granted. | ||||
<xs:complexType name="partialLockType"> | Some rewording | |||
<xs:complexContent> | ||||
<xs:extension base="nc:rpcOperationType"> | ||||
<xs:sequence> | ||||
<xs:element ref="nc:config-name"/> | ||||
<xs:element name="select" type="xs:string" | ||||
maxOccurs="unbounded"/> | ||||
</xs:sequence> | ||||
</xs:extension> | ||||
</xs:complexContent> | ||||
</xs:complexType> | ||||
<xs:complexType name="partialUnLockType"> | Added app-tags for two of the error cases. | |||
<xs:complexContent> | ||||
<xs:extension base="nc:rpcOperationType"> | ||||
<xs:sequence> | ||||
<xs:element name="lock-id" type="xs:unsignedInt"/> | ||||
</xs:sequence> | ||||
</xs:extension> | ||||
</xs:complexContent> | ||||
</xs:complexType> | ||||
<!-- <partial-lock> operation --> | Made YANG an informative reference | |||
<xs:element name="partial-lock" type="partialLockType" | ||||
substitutionGroup="nc:rpcOperation"/> | ||||
<!-- <partial-unlock> operation --> | Enhanced security considerations. | |||
<xs:element name="partial-unlock" type="partialUnLockType" | ||||
substitutionGroup="nc:rpcOperation"/> | ||||
<!-- reply to <partial-lock> --> | 7.2. 00-01 | |||
<xs:element name="lock-id" type="xs:unsignedInt"/> | ||||
</xs:schema> | Added YANG module. | |||
7.3. -00 | ||||
Created from draft-lengyel-ngo-partial-lock-01.txt | ||||
8. Acknowledgements | 8. Acknowledgements | |||
Thanks to Andy Bierman, Sharon Chisholm, Phil Shafer and many other | Thanks to Andy Bierman, Sharon Chisholm, Phil Shafer , David | |||
members of the NETCONF WG for providing important input to this | Harrington, Mehmet Ersue and many other members of the NETCONF WG for | |||
document. | providing important input to this document. | |||
9. Normative References | 9. References | |||
9.1. Normative References | ||||
[NETCONF] Enns, R., "NETCONF Configuration Protocol", RFC 4741, | ||||
December 2006. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
[RFC4741] "NETCONF Configuration Protocol", RFC 4741, December 2006. | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
January 2004. | ||||
9.2. Informative References | ||||
[I-D.ietf-netmod-yang] | ||||
Bjorklund, M., "YANG - A data modeling language for | ||||
NETCONF", draft-ietf-netmod-yang-00 (work in progress), | ||||
May 2008. | ||||
Authors' Addresses | Authors' Addresses | |||
Balazs Lengyel | Balazs Lengyel | |||
Ericsson Hungary | Ericsson Hungary | |||
Email: balazs.lengyel@ericsson.com | Email: balazs.lengyel@ericsson.com | |||
Martin Bjorklund | Martin Bjorklund | |||
Tail-f Systems | Tail-f Systems | |||
End of changes. 61 change blocks. | ||||
149 lines changed or deleted | 243 lines changed or added | |||
This html diff was produced by rfcdiff 1.35. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |