Re: [i2rs] Call for Adoption by WG: draft-atlas-i2rs-architecture-01 (ends Aug 12)

"Joel M. Halpern" <jmh@joelhalpern.com> Wed, 14 August 2013 18:24 UTC

Return-Path: <jmh@joelhalpern.com>
X-Original-To: i2rs@ietfa.amsl.com
Delivered-To: i2rs@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id D679621F9A4C for <i2rs@ietfa.amsl.com>; Wed, 14 Aug 2013 11:24:32 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -102.599
X-Spam-Level:
X-Spam-Status: No, score=-102.599 tagged_above=-999 required=5 tests=[AWL=0.000, BAYES_00=-2.599, USER_IN_WHITELIST=-100]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id T5fB+xOU61iT for <i2rs@ietfa.amsl.com>; Wed, 14 Aug 2013 11:24:25 -0700 (PDT)
Received: from mailc2.tigertech.net (mailc2.tigertech.net [208.80.4.156]) by ietfa.amsl.com (Postfix) with ESMTP id BCAB511E8172 for <i2rs@ietf.org>; Wed, 14 Aug 2013 11:24:20 -0700 (PDT)
Received: from localhost (localhost [127.0.0.1]) by mailc2.tigertech.net (Postfix) with ESMTP id A2AF81422B1; Wed, 14 Aug 2013 11:24:20 -0700 (PDT)
X-Virus-Scanned: Debian amavisd-new at c2.tigertech.net
Received: from Joels-MacBook-Pro.local (c213-89-137-101.bredband.comhem.se [213.89.137.101]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mailc2.tigertech.net (Postfix) with ESMTPSA id B005E1422BB; Wed, 14 Aug 2013 11:24:18 -0700 (PDT)
Message-ID: <520BCB50.2040703@joelhalpern.com>
Date: Wed, 14 Aug 2013 14:24:16 -0400
From: "Joel M. Halpern" <jmh@joelhalpern.com>
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130801 Thunderbird/17.0.8
MIME-Version: 1.0
To: Jakob Heitz <jakob.heitz@ericsson.com>
References: <CAG4d1rdDqdajvUeF4WwJ1Jwn_=xqOMkXrkWwCHtsdsZn6WKzRA@mail.gmail.com> <51F8ED88.5050208@cisco.com> <CAG4d1rdBjyx2+jR5+Pc0RNsr_NSRLtrK6RaFgEqwvguHweZ0Cw@mail.gmail.com> <520BC148.3030306@cisco.com> <520BC2F9.9080500@joelhalpern.com> <2F3EBB88EC3A454AAB08915FBF0B8C7E02E24B44@eusaamb109.ericsson.se>
In-Reply-To: <2F3EBB88EC3A454AAB08915FBF0B8C7E02E24B44@eusaamb109.ericsson.se>
Content-Type: text/plain; charset="ISO-8859-1"; format="flowed"
Content-Transfer-Encoding: 7bit
Cc: "i2rs@ietf.org" <i2rs@ietf.org>, Joe Marcus Clarke <jclarke@cisco.com>, Alia Atlas <akatlas@gmail.com>
Subject: Re: [i2rs] Call for Adoption by WG: draft-atlas-i2rs-architecture-01 (ends Aug 12)
X-BeenThere: i2rs@ietf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: "Interface to The Internet Routing System \(IRS\)" <i2rs.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/i2rs>, <mailto:i2rs-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/i2rs>
List-Post: <mailto:i2rs@ietf.org>
List-Help: <mailto:i2rs-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/i2rs>, <mailto:i2rs-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 14 Aug 2013 18:24:38 -0000

write-locks / atomic writes are an interesting quesiton, but probably 
should not be thought about as part of the multiple writers case.  The 
multiple writers case is:
A writes value X.
B decides to write value Y.
How clever do we want to be about handling this.
The answer we have proposed is "as simpleminded as we can get away with."
The specifics we chose are
1) this is an error case
2) there are priorities which determine which value ends up in effect.

Atomic writes could come up when there is a race, but more likely would 
come up when there are system effects which would change this value when 
it is not pinned by I2RS.

Yours,
Joel

On 8/14/13 2:14 PM, Jakob Heitz wrote:
> Or say: "must write atomically".
>
> Here is one way:
> In the WRITE message, put the value you want to write, as well as the value that you think that the parameter currently has.
> You can get the value "you think it has" from a previous READ, then you repeat that in your WRITE message.
> The target of the WRITE will refuse to write your value and return an error if the value was not what you thought it was.
>
> Another way:
> READ with reservation. When you READ, then set a reservation.
> When anyone WRITEs the same parameter, it kills all reservations.
> When you WRITE, the target system checks if you have a reservation and refuses to write if you don't and returns an error.
>
> Or you can write lock the parameter.
>
> --
> Jakob Heitz.
>
>> -----Original Message-----
>> From: i2rs-bounces@ietf.org [mailto:i2rs-bounces@ietf.org] On Behalf Of
>> Joel M. Halpern
>> Sent: Wednesday, August 14, 2013 10:49 AM
>> To: Joe Marcus Clarke
>> Cc: i2rs@ietf.org; Alia Atlas
>> Subject: Re: [i2rs] Call for Adoption by WG: draft-atlas-i2rs-architecture-01
>> (ends Aug 12)
>>
>> Depending upon how one reads RFCs, declaring that having two writers is an
>> error is a MUST NOT write.
>> But we are also trying to recognize that no matter how many MUST NOT
>> statements we produce, things happen.  So we are trying to define the
>> handling.  I can live with precedence.  I can live with "the item does not
>> change".  But I do think it is helpful for us to be explicit about the behavior in
>> this far-to-likely error case.
>>
>> Yours,
>> Joel
>>
>>
>> On 8/14/13 1:41 PM, Joe Marcus Clarke wrote:
>>> On 8/13/13 4:01 PM, Alia Atlas wrote:
>>>>       Section 1.2:
>>>>
>>>>       As can also be seen in Figure 1, an I2RS Agent may communicate with
>>>>          multiple clients.  Each client may send the agent a variety of write
>>>>          operations.  The handling of this situation has been a source of
>>>>          discussion in the working group.  In order to keep the protocol
>>>>          simple, the current view is that two clients should not be attempting
>>>>          to write (modify) the same piece of information.  Such collisions may
>>>>          happen, but are considered error cases that should be resolved by
>> the
>>>>          network applications and management systems.
>>>>
>>>>       JMC: I think more verbiage is needed around how to detect collisions.
>>>>       This is key to security considerations.  Saying "clients should not" is
>>>>       not strong enough to keep our potential attackers.  If each operation is
>>>>       tagged with an identifier that is unique to a client, then it will be
>>>>       possible to determine if the current client is trying to overwrite data
>>>>       from a previous client.  This could fold into authz as well where there
>>>>       is a permission to allow global override of other application's state.
>>>>
>>>>
>>>> [Alia] For the I2RS Agent to properly handle a collision, it does
>>>> need to store the client identifier.  I think that is clear in Sec
>>>> 5.2 "Simply, the I2RS agent stores who did what operation to which
>> entity."
>>>> and the details in Sec 6.8 are "The current recommendation is to have
>>>> a simple priority associated with each I2RS clients, and the highest
>>>> priority change remains in effect. In the case of priority ties, the
>>>> first client whose attribution is associated with the data will keep
>>>> control."  We already have a reference to Sec 6.8 right there - and
>>>> that section is where the details are discussed.  What specific additional
>>>> verbiage do you think would be useful?   The priority is a knob to allow
>>>> overwriting of other applications' state - though needing to is
>>>> considered an error. :-)
>>>
>>> When I first read this, I wanted something stronger to prevent clients
>>> from writing to the same piece of data.  I think the forward
>>> references are fine if perhaps a bit late in the text.  But my ask was
>>> to strengthen the language to say "must not write."
>>>
>>>>
>>>>
>>>>       Section 2:
>>>>
>>>>       read scope: ...
>>>>
>>>>       write scope: ...
>>>>
>>>>       JMC: Should there be an event or notification scope in addition to read
>>>>       and write?
>>>>
>>>>
>>>> [Alia] I think it is folded into the read scope.  If we find the need
>>>> for such a term later on, then we can add it.
>>>
>>> This section talks about "terminology" used in the draft.  However,
>>> "read scope" as terminology is not used anywhere.  The concept of
>>> _reading_ data is, however, quite prevalent.  In the same way, the
>>> draft talks about "notification" in a number of contexts.  As such, I
>>> feel there is enough distinction there to warrant calling out what is
>>> meant by a notification scope.
>>>
>>> "notification scope: The set of events and associated information that
>>> will be sent northbound by the I2RS Agent to I2RS Clients.  Clients
>>> have the ability to register for specific events, but must do so given
>>> the access restrictions of their associated read scope."
>>>
>>>>
>>>>       Section 3.4:
>>>>
>>>>       I2RS clients may be operating on behalf of other applications.  While
>>>>          those applications' identities are not need for authorization, each
>>>>          application should have a unique opaque identifier that can be
>>>>          provided by the I2RS client to the I2RS agent for purposes of
>>>>          tracking attribution of operations.
>>>>
>>>>       JMC: The opaque ID might make it hard to accurately attribute changes.
>>>>       I2RS should mandate a way to ensure traceability back to a client that
>>>>       made the change or was granted access.
>>>>
>>>>
>>>> [Alia] What do you have in mind?  The I2RS client will have a
>>>> security role and its scope.  The I2RS client needs to vet the
>>>> applications that it is a broker for.  The opaque ID can be something that is
>> meaningful
>>>> to that I2RS client.   Basically, I2RS is providing the identity and
>>>> security for between the I2RS client and the I2RS agent.  I don't see
>>>> it as practical or appropriate to try and define how the I2RS client
>>>> and its applications interact; I know the broker/controller model is
>>>> popular and so we do need enough to help support traceability to a
>>>> secondary ID, but I'm not sure what is needed or appropriate beyond
>> that.
>>>
>>> After listening to the working group session and based on other
>>> threads, this text is now clearer to me.  To summarize my feeling, I
>>> don't think I2RS should mandate a northbound Client protocol, but we
>>> need a unique way to identify the specific Client that obtained
>>> access.  This means that even in a load-balancing or HA case, there
>>> must be a way to uniquely identify the Client that communicate with
>>> the Agent.  The northbound actor driving the Client should also be
>>> identifiable, but that is outside the scope of this document.
>>>
>>>>       Section 5.2.2:
>>>>
>>>>       An I2RS Agent may decide that some state should no longer be applied.
>>>>          An I2RS Client may instruct an Agent to remove state it has applied.
>>>>          In all such cases, the state will revert to what it would have been
>>>>          without the I2RS; that state is generally whatever was specified via
>>>>          the CLI, NetConf, SNMP, etc.  I2RS Agents will not store multiple
>>>>          alternative states, nor try to determine which one among such a
>>>>          plurality it should fall back to.  Thus, the model followed is not
>>>>          like the RIB, where multiple routes are stored at different
>>>>          preferences.
>>>>
>>>>       JMC:  Previously I had commented that one event that should be
>> supported
>>>>       and perhaps documented here is that if the agent decides to revert the
>>>>       application can be notified that its state has been reverted.  This
>>>>       might also be useful if another client overrides some portion of another
>>>>       client's state (this is covered in Section 6.8, but might be useful to
>>>>       mention here as well).  Perhaps add at the end of Section 5.2.2:
>>>>
>>>>         "A client may choose to be notified whenever its state is reverted
>>>>       either by another client or by the I2RS agent."
>>>>
>>>>
>>>> [Alia] I'll put in: "An I2RS Client may register for notifications
>>>> when state that was applied by a particular I2RS Client is modified
>>>> or removed."  That is slightly different since it allows an I2RS
>>>> Client to learn about the changes to state from itself or from a
>>>> different I2RS Client.
>>>
>>> WFM, thanks.
>>>
>>>>
>>>>       Section 5.4.2:
>>>>
>>>>       (Bulleted list of examples)
>>>>
>>>>       JMC: Consider adding an example for an event such as a new route
>> being
>>>>       learned or an OSPF neighbor removal.
>>>>
>>>>
>>>> [Alia] I think that "writing routes or prefixes to be advertised via the
>>>> protocol" describes a new route being learned.   I'd prefer not to put
>>>> OSPF neighbor removal in as an example.  It raises the questions
>>>> about what is configuration vs. ephemeral data and the I2RS scope.
>>>> If you have a good use-case that requires it, then I'd be quite
>>>> interested in seeing it.
>>>
>>> I was specifically asking about an _event_ use case.  Very simply if
>>> we learn/lose a route, I'd want my Client to be notified so I can
>>> perhaps react to it to install another route or remove a route I have
>>> previously installed (e.g., a failover/failback use case).
>>>
>>> Additionally, if a peer is otherwise reachable, but stops
>>> participating in OSPF, BGP, etc., I would like I2RS to notify my
>>> Client as I may not know about this any other way (though I could be
>>> flooded with route delete events, it's good to correlate that to a peer going
>> away).
>>>
>>>>
>>>>
>>>>
>>>>       Section 5.4.4:
>>>>
>>>>       Many network elements have separate policy and QoS mechanisms,
>>>>          including knobs which affect local path computation and queue
>> control
>>>>          capabilities.  These capabilities vary widely across implementations,
>>>>          and I2RS cannot model the full range of information collection or
>>>>          manipulation of these attributes.  A core set does need to be
>>>>          included in the I2RS data models and in the expected interfaces
>>>>          between the I2RS Agent and the network element, in order to
>> provide
>>>>          basic capabilities and the hooks for future extensibility.
>>>>
>>>>       JMC: I think this either needs an editor's note for more discussion or
>>>>       perhaps QoS in general should be out of scope.
>>>>
>>>>
>>>> [Alia] I am happy to add in an editor's note for more discussion -
>>>> but we should start that conversation now on the list - because the
>>>> WG does have quite tight deadlines for milestones.
>>>
>>> Fair enough.
>>>
>>>>       Section 6.1:
>>>>
>>>>       That protocol may use several underlying transports (TCP,
>>>>          SCTP, DCCP), with suitable authentication and integrity protection
>>>>          mechanisms.  Whatever transport is used for the data exchange, it
>>>>          must also support suitable congestion control mechanisms.
>>>>
>>>>       JMC: I think Carlos (or someone) mentioned this, but I'm not sure DCCP
>>>>       is ideal for I2RS since we likely do want reliable order of delivery.
>>>>
>>>>
>>>> [Alia] Yes - DCCP is clearly the wrong choice for a control channel -
>>>> but it may be
>>>> good for delivering statistics.   I think we'll have different transport
>>>> options depending on the requirements of a particular data model or
>>>> section.  Since you are the second person to be confused by that
>>>> section, I've added the following sentence:
>>>>
>>>> "These different transports can support different types of
>>>> communication (e.g. control, reading, notifications, and information
>>>> collection) and different sets of data."
>>>>
>>>>    Let me know if that helps or if you have better ideas for wording.
>>>
>>> That works.
>>>
>>>>       Section 6.7:
>>>>
>>>>       One of the other important aspects of the I2RS is that it is intended
>>>>          to simplify collecting information about the state of network
>>>>          elements.
>>>>
>>>>       JMC: I think this needs to be more specific to routing information
>>>>       versus any information from the network element (e.g., it does not
>> cover
>>>>       CPU statistics).
>>>>
>>>>
>>>> [Alia] The scoping is a question - and that will depend on what the
>>>> use-cases we consider need and what the related information and data
>>>> models need to be.  If you look at the
>>>> draft-bitar-i2rs-service-chaining-00, it does ask for things like CPU
>>>> load.  I do think there is a real need to be able to get back
>>>> thresholded and filtered information.  You probably heard Ed's personal
>>>> thoughts about a single protocol as well...   So - I don't think the
>>>> architecture needs to restrict the data in scope - particular in a
>>>> section that is talking about communication patterns - but as a WG,
>>>> we need to keep a tight focus that still provides sufficient
>>>> information to fully solve the desired use-cases.
>>>
>>> My concerns comes from a desire not to have I2RS become a common
>>> API/protocol for things that SNMP or NETCONF or some other potential
>>> data collection scheme is used for.  So I agree we need a tight focus
>>> and potentially a litmus test for what should be adopted as
>>> collectable data via I2RS.  As it stands now, I think someone could
>>> argue for any kind of data and present a use case for it (e.g.,
>>> latency, interface errors, location).  So the statement I made was
>>> more around the lines of should I2RS stay pure to routing and routed
>>> topology or should we really open the door to other data that is not
>> specifically related to routing?
>>>
>>> Joe
>>>
>>>>
>> _______________________________________________
>> i2rs mailing list
>> i2rs@ietf.org
>> https://www.ietf.org/mailman/listinfo/i2rs
>