> On 11 Jan 2017, at 17:56, Andy Bierman <a...@yumaworks.com> wrote:
> 
> Hi,
> 
> 
> On Wed, Jan 11, 2017 at 7:12 AM, Robert Wilton <rwil...@cisco.com> wrote:
> 
> 
> On 11/01/2017 09:22, Martin Bjorklund wrote:
> Andy Bierman <a...@yumaworks.com> wrote:
> On Tue, Jan 10, 2017 at 1:20 PM, Kent Watsen <kwat...@juniper.net> wrote:
> 
> I think it is better to have a human decide what is in the module
> instead of relying on a pyang plugin to generate some additional module
> that follows some simplistic pattern.
> It may be simple, but I’m thinking that’s only because it’s not tricky  ;)
> 
> 
> The client and server developers still need to know about this
> auto-generated module
> and implement it.  Operators might have to know about it to use it.
> My idea is not to auto generate models on the fly.
> 
> My aim is to allow folks to start writing models in the desired long term 
> format (i.e. combined config and state tree) with the model designer being 
> able to assume the existence of the operational state datastore.
> 
> 
> 
> I am not convinced this "new format" has solved anything.
> Don't you need separate description-stmts in every node for each
> datastore?  What does the value mean if pre-configured? configured?
> operational?  Will the auto-generated objects be exactly correct
> and never need any alterations or additional text?
> They still need to be used by developers and YANG tools.

Right, this is one problem of this "deduplication": even if two nodes - one 
config and the other state - have the same name or even type (which is not 
always the case, as we know), their semantics is often different. An IP address 
in configuration means a manually configured address whereas in state it may 
come from any source. So writing sensible descriptions will become tricky.

> 
> Is is that realistic to force the config structure and operational structure
> to be the same? Seems it is quite common to monitor data structures
> with additional keys or different keys.  This is completely unsupported
> so separate /foo and /foo-state trees will still exist.

I agree.

Lada

> 
> IMO this combination of trees needs to be proven.
> Take ietf-interfaces and show how much better it will work
> if the /interfaces and /interfaces-state trees were combined.
> 
> 
> Andy
> 
> 
> The tooling would be there to statically generate the extra foo-state config 
> false node modules for servers that don't support the operational state 
> datastore.  This could be done once, and the extra foo-state modules 
> committed to the github YANG respository in the same way that models are 
> extracted from IETF RFCs today.
> 
> The aim here is that the single model being produced by IETF would be usable 
> both by new client/servers that support an operational state datastore, and 
> also by existing NETCONF client/servers that don't implement an operational 
> state datastore.
> 
> I'm not proposing that as a long term solution, but as a path to make it 
> easier for folk to migrate, and to not slow down the model writing effort.  
> Otherwise, it may be hard to get a protocol model writer to design the YANG 
> model in a way that is not fully usable on any current devices.
> 
> As an illustration, an RFC published combined ietf-interfaces model may look 
> like this:
> 
> module: ietf-interfaces-combined
>     +--rw interfaces
>        +--rw interface* [name]
>           +--rw name                        string
>           +--rw description?                string
>           +--rw type                        identityref
>           +--rw enabled?                    boolean
>           +--rw link-up-down-trap-enable?   enumeration {if-mib}?
>           +--ro oper-status                 enumeration
>           +--ro last-change? yang:date-and-time
>           +--ro if-index                    int32 {if-mib}?
>           +--ro phys-address? yang:phys-address
>           +--ro higher-layer-if*            interface-ref
>           +--ro lower-layer-if*             interface-ref
>           +--ro speed?                      yang:gauge64
>           +--ro statistics
>              +--ro discontinuity-time    yang:date-and-time
>              +--ro in-octets?            yang:counter64
>              +--ro in-unicast-pkts?      yang:counter64
>              +--ro in-broadcast-pkts?    yang:counter64
>              +--ro in-multicast-pkts?    yang:counter64
>              +--ro in-discards?          yang:counter32
>              +--ro in-errors?            yang:counter32
>              +--ro in-unknown-protos?    yang:counter32
>              +--ro out-octets?           yang:counter64
>              +--ro out-unicast-pkts?     yang:counter64
>              +--ro out-broadcast-pkts?   yang:counter64
>              +--ro out-multicast-pkts?   yang:counter64
>              +--ro out-discards?         yang:counter32
>              +--ro out-errors?           yang:counter32
> 
> The extra generated model would look like this:
> 
> module: ietf-interfaces-combined-state
>     +--ro interfaces-state
>        +--ro interface* [name]
>           +--ro name                        string
>           +--ro description?                string
>           +--ro type                        identityref
>           +--ro enabled?                    boolean
>           +--ro link-up-down-trap-enable?   enumeration {if:if-mib}?
>           +--ro oper-status                 enumeration
>           +--ro last-change? yang:date-and-time
>           +--ro if-index                    int32 {if:if-mib}?
>           +--ro phys-address? yang:phys-address
>           +--ro higher-layer-if* if:interface-ref
>           +--ro lower-layer-if* if:interface-ref
>           +--ro speed?                      yang:gauge64
>           +--ro statistics
>              +--ro discontinuity-time    yang:date-and-time
>              +--ro in-octets?            yang:counter64
>              +--ro in-unicast-pkts?      yang:counter64
>              +--ro in-broadcast-pkts?    yang:counter64
>              +--ro in-multicast-pkts?    yang:counter64
>              +--ro in-discards?          yang:counter32
>              +--ro in-errors?            yang:counter32
>              +--ro in-unknown-protos?    yang:counter32
>              +--ro out-octets?           yang:counter64
>              +--ro out-unicast-pkts?     yang:counter64
>              +--ro out-broadcast-pkts?   yang:counter64
>              +--ro out-multicast-pkts?   yang:counter64
>              +--ro out-discards?         yang:counter32
>              +--ro out-errors?           yang:counter32
> 
> Servers that support operational-state would just implement 
> ietf-interfaces-combined
> 
> Servers that don't support operational-state could implement 
> ietf-interfaces-combined and ietf-interfaces-combined-state, probably not 
> implementing the duplicate config false leaves under the interfaces config 
> tree.  Deviations could also be auto-generated to remove the config false 
> leaves from the config tree so that they are only in the state tree.
> 
> Of course, Clients may need to support both schemes depending on what types 
> of devices they are interacting with.
> 
> Finally, I've illustrated this using ietf-interfaces, but I'm not actually 
> proposing immediately changing that model.  I was more thinking about IETF 
> protocols that in the process of working on their YANG models.
> 
> Rob
> 
> 
> Exactly.  I agree that this is a real hack.  Implementations can use
> whatever transformation tricks they want in order to comply with
> different standards, but the standard modules should be very clear.
> 
> 
> 
> 
> 
> 
> /martin
> _______________________________________________
> netmod mailing list
> netmod@ietf.org
> https://www.ietf.org/mailman/listinfo/netmod
> 
> 
> _______________________________________________
> netmod mailing list
> netmod@ietf.org
> https://www.ietf.org/mailman/listinfo/netmod

--
Ladislav Lhotka, CZ.NIC Labs
PGP Key ID: 0xB8F92B08A9F76C67





_______________________________________________
netmod mailing list
netmod@ietf.org
https://www.ietf.org/mailman/listinfo/netmod

Reply via email to