[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Proposed Resolution to PROT I-D Issues List
Hi,
The attached list contains the previous issues list with my suggested resolutions.
Since the WG has not commented on this list, there seems little consensus
to make many requested changed.
The status values are:
** CLOSED ** - change not accepted or no concrete change requested
** CLOSED ** CHANGE REQUIRED ** - all or part of change accepted;
change considered a clarification
** OPEN ** - no resolution yet
Please review this list and send comments to the WG mailing list ASAP.
The editor needs to finalize the changes for the -05 version before
the ID cutoff.
thanks,
Andy
I001)
Locking) 4 emails supporting requirement to allow get and get-config
even if the confitg is locked.
** CLOSED **
No Change; lock does not prevent reads. An app should
lock the dB even for reading if concerned it may change during the
read transactions.
--------------------------
I002)
Session ID) How is this conveyed to the client?
** OPEN **
Doesn't seem to be a mechanism for an app to know its
own session ID.
--------------------------
I003)
1.1: "MUST support at least one, and MAY support more than one." For
security I'd really rather see the MAY be a SHOULD in that sentence.
** CLOSED ** CHANGE REQUIRED **
Change MAY to SHOULD in PROT:sec1.1:p2:s2
--------------------------
I004)
4.5: pipelining: "<rpc> request are processed serially" This should
be a MUST. Doing otherwise leads to indeterminate results.
** CLOSED ** CHANGE REQUIRED **
Clarification/consistency
Change PROT:sec4.5:p1:s1
OLD:
NETCONF <rpc> requests are processed serially by the managed device.
NEW:
NETCONF <rpc> requests MUST be processed serially by the managed device.
---------------------------
I005)
section 6: I don't think this section is ready to go to the IESG yet.
It needs more review and editing.
** CLOSED **
Consider adding some examples in sec 6.2 - 6.7.
Hard to go back and forth between 6.8 and rest of section.
---------------------------
I006)
section 6: I have a few concerns about the filtering as defined.
1) I find it confusing that there is a subtle difference between
selection of a particular set of values vs selecting a particular
value. The difference between:
<user>
<name/>
<user>
and
<user>
<name>John</name>
<user>
Is very very subtle. Definable, certainly, but subtle as well.
This means people will get it wrong and get confused (especially
for more complex examples).
** CLOSED **
No change;
This is explained in the text and examples
(6.6 selection nodes and 6.5 content match nodes)
2) I don't think it's possible using the current filter system to
select empty values. IE, this:
<user>
<name><name/>
<user>
Will select all user's names, not a user with a blank name.
(please don't tell me you're going to distinguish between <name/>
and <name></name>)
** CLOSED ** CHANGE REQUIRED **
Need to add clarification to sec6.1 that explicit selection of
empty content (in a content match node) is not supported.
(Should not count on XML parser distinguishing between long
and short form of an empty node).
3) logical and vs logical or in selections
In the document this example:
<user>
<name>root</name>
<company-info/>
</user>
<user>
<name>fred</name>
<company-info>
<id/>
</company-info>
</user>
<user>
<name>barney</name>
<type>superuser</type>
<company-info>
<dept/>
</company-info>
</user>
Indicates that there is an implicit logical OR between the
<user> tags and an implicit logical AND between the sub-tags
(name/type in the third user selection).
This is, again, subtle and subject to poor understanding by
users which will lead to errors.
One solution to some of these problems would be to separate the
selected nodes from the value matched nodes using different
groups. Or add an attribute or something. Anything that makes it
more obvious what is going on and is desired.
** CLOSED **
No change; Sections 6.1 - 6.7 document the rules for sub-tree
filter processing. The example above isn't confusing. It is
clear from the processing rules and the example that each
top-level sub-tree processed will yield its own results (e.g.,
OR expression).
-----------------------
I007)
7.2: default-operation: none... "as well allowing a simple existence
test for configuration data". This statement should be stricken,
IMHO. If you want an existence test, you should write one into
the protocol (get-config will do this now). I don't think you
should cobble in a feature this way. It may be that it exists
and can be used this way, but I don't think documenting it this
way so it becomes officially supported practice is wise.
** CLOSED ** CHANGE REQUIRED **
PROT:sec7.2:Parameters:default-operation:none
OLD:
Using "none" allows operations like "delete" to avoid
unintentionally creating the parent hierarchy of the element
to be deleted, as well allowing a simple existence test for
configuration data.
NEW:
Using "none" allows operations like "delete" to avoid
unintentionally creating the parent hierarchy of the element
to be deleted.
-------------------------
I008)
7.2 and others: Is it legal to specify config for non-existent
devices. IE, can I upload a config for a interface which I
haven't physically inserted yet? Or is this going to be
implementation specific? It should be at least mentioned one way
or another.
** CLOSED **
Data modeling issue
Not NETCONF protocol issue to distinguish between config and
pre-provisioning high-level operations
--------------------------
I009)
7.2: I fail to see how these operations are going to work in some
cases which I'm sure will come up in the future. I'm going to use the
examples enclosed in the section, but I don't think they're
necessarily the right ones to use. But you'll get the idea.
The problem comes from the assumption of the data model that I'm not
convinced will be true. Take the case of messing with an interface.
The examples all show various operations working on an interface named
"Ethernet0/0", and only in the sentences above is it sort-of-mentioned
in English text that the index when searching for things to modify are
going to be based on the name. There is no mention of this actually
in the protocol. Sure, in this particular case it is likely this may
be the only selectable method in the resulting data model and that is
yet to be determined and out of scope. However, I think it is highly
likely that we will end up with a data model(s) that will allow for
separate indexes. So, for the purposes of example, lets say that you
could select an interface by address as well (very conceivable). Is
this legal for a replace:
<top xmlns="http://example.com/schema/1.2/config">
<interface xc:operation="replace">
<mtu>1500</mtu>
<address>
<name>1.2.3.4</name>
</address>
</interface>
</top>
Would that allow you to replace the MTU just as you would if you
specified the name? Or are you going to restrict data models in the
future to only one set of unique indexes? Can I set the MTU of all
interfaces which are up using something like:
<top xmlns="http://example.com/schema/1.2/config">
<interface xc:operation="replace">
<status>up</status>
<mtu>1500</mtu>
</interface>
</top>
This is a solvable problem, obviously. My only concern is that no
where is this type of usage of the protocol discussed. It does have
implications on the resulting data models that are allowed to be
defined.
Fundamentally, this results from data to change and selectors being
intermixed, which technically I think is a mistake (they should be
marked by attributes or in a special section of the tree. I'm sure
that concept will die a horrible death and I'll get flamed for
mentioning it. So, let me just end by repeating: it needs
discussion regardless if you don't want to explicitly talk about how
to select particular values.
** CLOSED **
No change;
Data modeling issue
No specific changes requested
--------------------
I010)
7.2 replace: what happens if you replace a container with a set of
elements (say A, B, and C) but the original object also contained
a D element. Does the new one get D as well, or is that nuked (I
think is the case) if operation=replace is put on the high level
object (as opposed to each element for A B and C).
** CLOSED **
D would get nuked because that's the operation that was requested,
or the operation will fail because D was required but not specified.
--------------------
I011)
7.3 copy from remote to remote is a "may choose not to support". I
think this is fundamentally a bad thing to ever allow. netconf
should not be a file transfer protocol. The security issues
surrounding such a notion haven't been discussed. You can't
easily specify access control rights for when you're allowed to do
so. It essentially lets any firewall implementing netconf (that
implements URL to URL copying and has access to both an internal
and external network) to be used as a transfer hole in a security
domain. I really think you should say that implementations MUST
NOT support this. It is well beyond the scope of what netconf
should do. It is highly suspect from a security point of view and
will only add more work in the future as you'll have to write
access control rights for when this is acceptable and when it is
not and by what users.
** CLOSED **
No change;
Not a shared concern; WG would rather add usage restrictions
later, and only if operational experience shows this is warranted.
--------------------
I012)
7.3 example shows the use of ftp. Can we use something more secure in
the example please?
** CLOSED **
No change; no suggested replacement text provided
--------------------
I013)
7.4: #url allows a url to appear as a delete. doing remote file
management using netconf is questionable at best. From a security
point of view, it makes me cringe.
** CLOSED **
No change; no suggested replacement text provided
--------------------
I014)
8.8.5.1: so with #url capability supporting ftp I can force a netconf
client to remote edit files? Is this really wise?
** CLOSED **
No change; no suggested replacement text provided
--------------------
I015)
url summary: there are two types of urls: local and remote. Some
operations make sense for some of those, some for others. Some
operations, IMHO, should not be allowed on remote types.
** CLOSED **
No change; no suggested replacement text provided
--------------------
I016)
9: Implementators SHOULD also provide a well thought out authorization
scheme with NETCONF. => MUST
** CLOSED **
No change; no WG consensus for this change; subjective what "well
thought out" means; consider removing this phrase.
--------------------
I017)
9: you need to discuss that global operations MUST disallow the
changing of information that an individual does not have authorization
to perform. EG, if a user U is not allowed to configure an IP address
on an interface but someone else has configured an IP address for an
interface within the <candidate>, then the user U must not be allowed
to perform a copy-config or commit from <candidate> to <running>.
** CLOSED ** CHANGE REQUIRED **
Add a paragraph at the end of PROT:sec9 based on this suggested text.
--------------------
I018)
9: Similarly, you need to discuss what happens if you don't use a
lock. Specifically, if user U1 modifies the candidate config in a way
that user U2 is not allowed to, and since U1 MUST NOT be able to
commit those changes then not using a lock could leave a system in a
state where neither U1 nor U2 can commit their changes to running.
** CLOSED **
No change; U1 cannot be aware of U2 (Un) and it is up to the agent
to check access control during the <commit> and disallow unauthorized
changes. There is already text that if locks are not implemented
correctly then improper results may occur.
--------------------
I019) Commit operation atomicity
[PROT, missing section number]
Proposed change:
If the device is unable to commit all of the changes in the candidate
configuration datastore, then the running configuration must
remain unchanged.
Response:
Capital "'MUST' remain unchanged" and I'm happy with the wording.
** CLOSED ** CHANGE REQUIRED **
Edit accepted
--------------------
I020)
d) The description of the error-info states that vendor specific
elements may only be added at the end of the sequence. I do not
really see the need for this rule since namespaces should be used
anyway. I would prefer to not introduce such rules, the
specification should instead spell out that any
extensions/additions must have their own namespace.
** CLOSED ** CHANGE REQUIRED **
Edit accepted; CLR should be removed
--------------------
I021)
g) I had some trouble to figure out what RPC responses can
contain. Section 4.4 says that an <ok> element is sent in
<rpc-reply> messages if no error occurred. Looking at the examples
shown later on, it looks like <ok> is only present if the RPC
was successful and no other result data was returned. I am not
sure why this <ok> is needed at all.
Things get a bit more irritating if I look at the <rpc-error>
elements. Such an element is used to signal an error or a warning.
This raises the question whether a warning can be returned even
though the RPC succeeds. Will I then get <ok> or <something>
followed by an <rpc-error> signalling a warning? Or will the
warning come first? If the RPC does not abort on error, I would
suggest that I can get multiple errors. But this does not seem to
be the case (according to the NETCONF RelaxNG spec.) The RelaxNG
spec (did not check the xsd) requires the element to be <data>
while section 4.2 shows an example which shows <some-content>.
If the idea is indeed that RPC results always show up in a <data>
element, then why not replace <ok> with an empty <data/> element?
I recall some discussion that errors/warnings may actually be
generated while an operation is processed and that they were even
supposed at some point to interleave the data portion. So I assume
there is something missing here. Perhaps the examples used later in
the document focus too much on the no error cases.
** CLOSED **
No change; Not all operations have a <data> element (e.g., <lock>)
--------------------
I022)
r) Section 7.1 IMHO misses text which explain how overlapping operation
attributes are handled. What for example happens if I have:
<... operation="delete">
<... operation="merge"/>
</...>
There might be more interesting combinations. I would prefer to
have well defined rules so that all implementors do the same thing
here. If there are nested operation attribute value combinations
that do not make sense, I think it would be fair to request that
such things are checked before starting the execution of the merge.
** CLOSED **
No change; This depends on the data model and common sense.
We don't need CLRs that say the agent MUST or MUST NOT merge
sub-tree X before deleting it and its parent in the same <edit-config>.
--------------------
I023)
t) After reading the <edit-config> part of the spec, I felt that there
is in general a need to have more elements of the procedure spelled
out. I think it would help implementors tremendously if it were
spelled out which tests have to be performed, what the error codes
are that can be generated and so on. At the moment, the document
leaves it to the implementor to figure out what needs to be
checked, in which order, before are while processing an edit-config
and so on. I believe it would help interoperability if some more
guidance would be given here.
** CLOSED **
No change; Could be a companion document after some implementation
experience gained.
--------------------
I024)
E) Section 8.8.3 says shows the following urn format:
urn:ietf:params:xml:ns:netconf:base:1.0#url?protocol={protocol-name,...}
It is unclear what are meta characters here. I guess '{' and '}' are
meta characters if I look at the subsequent examples. Anyway, the
more general comment here is that you identity URI schemes and not
protocols. So perhaps the example should be:
urn:ietf:params:xml:ns:netconf:base:1.0#url?schemes=http,ftp,file
Perhaps life would be even easier if the schemes were announce as
separate capabilities:
urn:ietf:params:xml:ns:netconf:base:1.0#url?scheme=http
urn:ietf:params:xml:ns:netconf:base:1.0#url?scheme=ftp
urn:ietf:params:xml:ns:netconf:base:1.0#url?scheme=file
Perhaps a general discussion how to deal with parameters in
capabilties would be useful. The later version has the advantage
that I do not have to parse the full scheme to check whether the
'file' scheme is supported - a simle string match is good enough.
(But parsing this on the other hand does not seem overly complex
either).
** CLOSED **
No change; No consensus to change the #url capability syntax