Internet DRAFT - draft-bierman-core-yid

draft-bierman-core-yid







core                                                          A. Bierman
Internet-Draft                                           YumaWorks, Inc.
Intended status: Standards Track                         P. van der Stok
Expires: February 17, 2017                                    consultant
                                                         August 16, 2016


                        Numeric YANG Identifiers
                       draft-bierman-core-yid-00

Abstract

   This document describes an encoding of YANG object identifiers using
   numeric values instead of string values.  It combines several
   techniques to provide optimized serialization in protocol messages.

Note

   Discussion and suggestions for improvement are requested, and should
   be sent to core@ietf.org.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at http://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on February 17, 2017.

Copyright Notice

   Copyright (c) 2016 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect



Bierman & van der Stok  Expires February 17, 2017               [Page 1]

Internet-Draft                  YANG IDs                     August 2016


   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
     1.1.  Terminology . . . . . . . . . . . . . . . . . . . . . . .   3
       1.1.1.  Examples  . . . . . . . . . . . . . . . . . . . . . .   4
       1.1.2.  Tree Diagrams . . . . . . . . . . . . . . . . . . . .   4
     1.2.  Design Objectives . . . . . . . . . . . . . . . . . . . .   5
     1.3.  Solution Approach . . . . . . . . . . . . . . . . . . . .   5
   2.  YANG Identifier Registry  . . . . . . . . . . . . . . . . . .   6
     2.1.  YANG Identifier Registry Example  . . . . . . . . . . . .   8
   3.  YANG Identifier . . . . . . . . . . . . . . . . . . . . . . .   9
     3.1.  module-id . . . . . . . . . . . . . . . . . . . . . . . .  10
     3.2.  local-id  . . . . . . . . . . . . . . . . . . . . . . . .  10
       3.2.1.  YANG Hash Numbered local-id . . . . . . . . . . . . .  11
       3.2.2.  Manually Numbered local-id  . . . . . . . . . . . . .  11
   4.  YANG Identifier Registry Format . . . . . . . . . . . . . . .  12
     4.1.  ietf-yid Module . . . . . . . . . . . . . . . . . . . . .  12
   5.  YANG Hash Generation  . . . . . . . . . . . . . . . . . . . .  19
   6.  Security Considerations . . . . . . . . . . . . . . . . . . .  21
   7.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  21
     7.1.  YANG Module Library Entry: ietf-yid . . . . . . . . . . .  21
     7.2.  YANG Module Names Parameter Addition: module-id . . . . .  21
     7.3.  YANG Identifier Registry  . . . . . . . . . . . . . . . .  22
       7.3.1.  Registry Maintenance  . . . . . . . . . . . . . . . .  22
   8.  Acknowledgements  . . . . . . . . . . . . . . . . . . . . . .  23
   9.  References  . . . . . . . . . . . . . . . . . . . . . . . . .  23
     9.1.  Normative References  . . . . . . . . . . . . . . . . . .  23
     9.2.  Informative References  . . . . . . . . . . . . . . . . .  23
   Appendix A.  Open Issues  . . . . . . . . . . . . . . . . . . . .  24
   Appendix B.  YANG Identifier Examples . . . . . . . . . . . . . .  25
     B.1.  Hash Collision Repair Example . . . . . . . . . . . . . .  25
     B.2.  Manual Numbering Example  . . . . . . . . . . . . . . . .  26
     B.3.  Augment Numbering Example . . . . . . . . . . . . . . . .  28
   Appendix C.  YANG Hash Examples . . . . . . . . . . . . . . . . .  30
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  33

1.  Introduction

   This document describes mechanisms for mapping YANG schema nodes to
   numeric values.  Existing YANG-based protocol use path expression
   strings or element hierarchies that use element names to identify a
   particular YANG data node.  These object identifiers can represent a
   significant percentage of protocol message payload content.



Bierman & van der Stok  Expires February 17, 2017               [Page 2]

Internet-Draft                  YANG IDs                     August 2016


   Constrained environments require efficient protocols and a numeric
   (binary) representation of YANG object identifiers can help reduce
   payload overhead in protocol messages.

   The effective use of YANG Identifiers requires three components:

      YANG Identifier Registry: A collection of numeric encoding rules
      for a specific set of YANG modules.  Implementations need to use
      the contents of the registry to encode and decode object
      identifiers for data nodes in the associated modules.

      YANG Identifier: A hierarchical numeric YANG object identifier.
      This is intended to be a permanent object identifier, like the
      path expression or element names it is meant to replace.

      Message Serialization: A set of encoding rules within a particular
      serialization format.  It is expected that CBOR will be used in
      constrained environments.  This document does not define any
      message serialization techniques, or assume any specific protocols
      will be used.  [TBD: add ref. to YANG to CBOR draft]

   This document replaces the YANG Hash draft
   [I-D.bierman-core-yang-hash].  The core concepts from that draft have
   been incorporated into this document.

1.1.  Terminology

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in [RFC2119].

   Readers of this specification should be familiar with all the terms
   and concepts discussed in [RFC2578].

   The following terms are defined in the NETCONF protocol [RFC6241]:
   client, configuration data, datastore, and server.

   The following terms are defined in the YANG data modelling language
   [RFC6020]: container, data node, key, key leaf, leaf, leaf-list, and
   list.

   The following terms are defined in RESTCONF protocol
   [I-D.ietf-netconf-restconf]: data resource, data-store resource, edit
   operation, query parameter, target resource, and unified data-store.

   The following terms are defined in this document:





Bierman & van der Stok  Expires February 17, 2017               [Page 3]

Internet-Draft                  YANG IDs                     August 2016


   YANG module schema tree:  The conceptual tree of YANG objects
      comprised of all "rpc", "data-def" and "notification" statements
      within a particular revision of a module and all submodules
      included by this module.

   YANG Identifier:  Numeric object identifier, which is a fixed-length
      numeric value that represents a particular schema node within a
      YANG module schema tree.  The length and format of a YANG
      identifier are defined in the YANG Identifier Registry.  Also
      called a "YID".

   YANG Identifier File:  Also called a YID File.  Contains a
      representation of the manual numeric path assignments for a YANG
      module.

1.1.1.  Examples

   Some text within examples throughout the document are split into
   multiple lines for display purposes only.  When a line ends with
   backslash ('\') as the last character, the line is wrapped for
   display purposes.  It is to be considered to be joined to the next
   line by deleting the backslash, the following line break, and the
   leading whitespace of the next line.

1.1.2.  Tree Diagrams

   A simplified graphical representation of the data model is used in
   the YANG modules specified in this document.  The meaning of the
   symbols in these diagrams is as follows:

      Brackets "[" and "]" enclose list keys.

      Abbreviations before data node names: "rw" means configuration
      data (read-write) and "ro" state data (read-only).

      Symbols after data node names: "?" means an optional node, "!"
      means a presence container, and "*" denotes a list and leaf-list.

      Parentheses enclose choice and case nodes, and case nodes are also
      marked with a colon (":").

      Ellipsis ("...") stands for contents of subtrees that are not
      shown.








Bierman & van der Stok  Expires February 17, 2017               [Page 4]

Internet-Draft                  YANG IDs                     August 2016


1.2.  Design Objectives

   This work is motivated by the need to minimize the size of object
   identifiers within protocol messages representing YANG data, encoded
   using binary format.  The string encoding size of YANG identifier
   names can be very significant since designers are encouraged to
   provide long descriptive names to help human readability of the YANG
   module.

   It is therefore desirable to produce an object numbering algorithm
   that can be serialized efficiently in protocol messages with binary
   encoding formats such as CBOR.

   There are several design objectives for this work:

      Persistent Identifiers: It is important that once an identifier is
      assigned, that is it never changed in any future revisions in the
      module.

      Unique Identifiers: It is important that it is easy to ensure that
      all identifiers are unique within a server, and all servers that
      share the same set of YANG Identifier information.

      Low Complexity: The algorithms need to be simple to understand.
      Module updates need be simple, and only require the latest module
      and registry information.  Dependency on YANG statement order or
      statement refactoring (e.g., move to groupings or submodules) must
      be avoided.

      Flexibility: The algorithms need be tuned for specific YANG
      modules.  Manual (packed) numbering or hash-based numbering should
      be supported.

      No Inter-Module Dependencies: The algorithms must not allow
      identifiers from different YANG modules to conflict in any way.
      An identifier that is always scoped by an administratively
      assigned module identifier is required.

      No Hash Collisions: The algorithms must allow hash collisions to
      be avoided without modifying the associated YANG module.  The
      numeric assignments for all objects within a module must be
      permanently unique (within that module scope).

1.3.  Solution Approach

   This document describes a solution with four components:





Bierman & van der Stok  Expires February 17, 2017               [Page 5]

Internet-Draft                  YANG IDs                     August 2016


   YANG Identifier Registry:  A YANG Identifier registry contains
      manually administered information for each YANG module.  A minimal
      amount of information is needed for each module.  A numeric module
      identifier needs to be assigned for each module in the registry.
      Most registry information is permanent.  New entries can be added
      but naming information for old entries cannot be changed.  Each
      module can be either be numbered automatically using YANG Hash, or
      manually using registry assignment.

   YANG Identifier Format:  A YANG Identifier format is a structured
      binary identifier that allows a hierarchical YANG schema node to
      be represented as a single integer.  The mapping is based on a
      murmur32 hash of the YANG object identifier string for each data
      definition node.  The YANG path identifier is not allowed to
      change value after it is first assigned, so it can be safely and
      easily used as a permanent identifier.  The value does not depend
      on module statement order or any field that is allowed to change
      in YANG in new module revisions.

   YANG Hash:  The YANG Hash automatic numbering algorithm, defined in
      Section 5, is used to automatically assign the numeric identifiers
      to YANG data definition schema nodes.  Hash values are scoped by
      the module identifier, so clashes between modules are not
      possible.  If a hash collision does occur within the same module,
      then a registry entry is used to map the clashing data nodes to
      manually assigned identifiers.  Hash collisions are not allowed in
      the registry.  They are manually avoided without any need to
      modify the YANG module.

   Manual Numbering:  A manual numbering mechanism and a YANG Identifier
      template to specify manually assigned local identifiers is needed.
      This allows compact numbering of objects and therefore the most
      efficient use of identifier numbering space.

2.  YANG Identifier Registry

   A YANG Identifier registry is a data structure representing the
   numeric mapping information for a set of YANG modules.  This is a
   global registry, meaning that all servers that use the same registry
   use the same numeric assignments.

   Ideally, all servers will use the same registry and there will be
   only one registry.  It is expected that a server will use the
   official registry maintained by IANA, but other registries including
   locally administered registries are possible.  Each registry is self-
   contained.  Registries cannot be mixed or reference other registries.
   (This is a subject for future work).  All YANG identifier values are




Bierman & van der Stok  Expires February 17, 2017               [Page 6]

Internet-Draft                  YANG IDs                     August 2016


   hierarchical, and scoped by the numeric identifier assigned in the
   registry for the module.

   The YANG Identifier registry supports automatically numbered objects
   within a module using YANG Hash.  It also supports manually numbered
   objects within a module using object path to number mappings.  If
   YANG Hash is used, then some of the numbering space for the module is
   reserved for manual assignments in case there are any hash collisions
   within the module.

   The size of the YANG identifiers, and the size of each field within
   the YANG identifier, are configured in the registry.  The type of
   local identifier numbering is also configured, on a per-module basis.
   A server can only support one registry at a time, and it is expected
   to advertise which registry it is using via the management protocol
   in use.

   Each registry entry represents the numeric mapping information for
   one YANG module.  Only one entry per module is maintained, for the
   latest revision.  Registry information is never allowed to change.
   Information for new schema nodes can be added but information for
   existing schema nodes can never be altered.

   A YANG Identifier registry provides the following global parameters
   that apply to all modules:

      name: The administrative name for the registry

      revision: The current revision ID for the registry

      module-bits: The number of bits assigned to a module-id in a YID
      for the registry

      local-bits: The number of bits assigned to a local-id in a YID for
      the registry

   The registry also has a list of modules that support numeric YANG
   identifiers.  Each module entry has the following parameters that
   apply to all revisions of the module:

      module-id: The numeric identifier assigned to the module in the
      registry

      name: The name of the YANG module.

      revision: The revision ID of the registry entry for the module





Bierman & van der Stok  Expires February 17, 2017               [Page 7]

Internet-Draft                  YANG IDs                     August 2016


      local-type: The type of local-id values used in a YANG Identifier
      for a schema node in the module.  The values 'hash' and 'manual'
      are supported.

   If the 'local-type' is equal to 'manual' for a module entry, then the
   manually assigned numbers are provided in the module registry entry.
   This information can either be in-line in the registry entry or
   accessible via an external URI.

   The following information is provided for every YANG identifier in
   the module if the mapping parameters are local:

      local-id: The local identifier assigned to the schema node

      path: The YANG object identifier for the schema node

   The following information is provided for the entire module if the
   mapping parameters are remote:

      mapping-url: The URL for retrieval of a representation of the
      mapping information

      mapping-type: The media type for the 'mapping-url'

2.1.  YANG Identifier Registry Example

   The following example shows a JSON representation of a "yid-registry"
   container.  There are 3 modules (ietf-system, ietf-yang-library, and
   example-address).  The registry uses 32 bit identifiers.  16 bits are
   used for local identifiers in each module.





















Bierman & van der Stok  Expires February 17, 2017               [Page 8]

Internet-Draft                  YANG IDs                     August 2016


     { "yid-registry" : {
         "name" : "example-reg",
         "revision" : 0x7e00701,
         "module-bits" : 16,
         "local-bits" : 16,
         "module" : [
           {
             "module-id" : 1,
             "name" : "ietf-system",
             "revision" : 0x7de0806,
             "local-type" : "hash"
           },
           {
             "module-id" : 2,
             "name" : "ietf-yang-library",
             "revision" : 0x7e00615,
             "local-type" : "hash"
           },
           {
             "module-id" : 3,
             "name" : "example-address",
             "revision" : 0x7de0508,
             "local-type" : "manual",
             "mapping-url" : "http://example.com/yang-ids-47.json",
             "mapping-type" : "application/json"
           }
         ]
       }
     }

3.  YANG Identifier

   A YANG Identifier is constructed of 2 fields: a module identifier
   called "module-id" and a local identifier within the scope of the
   module, called "local-id".
















Bierman & van der Stok  Expires February 17, 2017               [Page 9]

Internet-Draft                  YANG IDs                     August 2016


      YANG Identifier Formats:

          Form 1: YANG Hash Used

             +-------------+  +-------------+
             |  module-id  |  |R| local-id  |
             +-------------+  +-------------+

          Form 2: Manual Identifiers used

             +-------------+  +-------------+
             |  module-id  |  |  local-id   |
             +-------------+  +-------------+

   The local identifier can either be a YANG Hash if the 'local-type'
   for the module registry entry is 'hash', or manual numbering if the
   'local-type' is 'manual'.  If YANG Hash is used, then one bit is
   reserved within the local-id as the "rehash bit".

   A YANG Identifier is derived from the 'module-id', 'local-bits', and
   'local-id' fields, using the following formula:


      YID = (module-id * (2 ^^ local-bits)) + local-id


3.1.  module-id

   The module-id field is a mandatory fixed-width number that must be
   unique within the registry.  This number is manually assigned for
   each YANG module and is specified in the registry entry information
   for the YANG module.  All other YANG identifier sub-fields are scoped
   by this module-id.  It is not possible for YANG identifier values
   from different modules within a YANG Identifier registry to collide.

   Module identifiers are expected to be assigned by the registry
   maintainer, not by YANG module authors.  It is critical that
   assignments are unique and stable.  Registry maintenance procedures
   are discussed in the IANA Considerations section .  Section 7.

3.2.  local-id

   The local-id is a fixed width number defined in the YANG Identifier
   registry.  Local identifiers can be one of two formats: YANG Hash or
   Manually Assigned.






Bierman & van der Stok  Expires February 17, 2017              [Page 10]

Internet-Draft                  YANG IDs                     August 2016


3.2.1.  YANG Hash Numbered local-id

   The automatic numbering of local identifier values is based on the
   YANG Hash for the path identifier for the schema node.  An absolute
   path expression is used to identify the schema node.

   The YANG registry value of 'local-bits' determines the size of the
   YANG hash value.  One bit is reserved as the "rehash" bit and "local-
   bits - 1" number of bits are used for the YANG hash value.

   A YANG Hash is calculated for the path expression for each schema
   node according to the procedure defined in Section 5.  The lowest
   order bits are used.

   If any hash collisions occur, then a manual registry entry is needed
   for all but one of the colliding nodes.  Since the value zero is
   reserved, a hash value of zero is considered a clash, and must be
   fixed using a manually assigned entry for the node.

   For example, if 8 bits were used for the 'local-bits' value, then the
   low order 7 bits are for hash values.  The local-id values 1 - 127
   would be allowed for hash values.  The values 128 - 255 would be
   allowed for manually assigned rehash values.

3.2.2.  Manually Numbered local-id

   A YANG Identifier data structure is used to represent the manually
   assigned schema node assignments for a YANG module.  Each data node
   is explicitly assigned a numeric value that is unique within the YANG
   module where it is defined.  Data nodes that augment external modules
   are defined in the augmenting module.  Once an assignment is made it
   can never be changed.  Only new assignments can be made in new
   revisions of a module registry entry.

   If local identifiers are used then the mapping between the YANG
   object identifier and numeric value MUST be provided via the
   registry.  The format for 'local' entries is defined in the YANG
   module in Section 4.1.

   The format of registry entry files that use the 'remote' form of
   local-id identification is outside the scope of this document.  The
   only requirements are that the fields "local-id" and "path" MUST be
   used in each entry to represent the YANG identifier to numeric
   mapping.  The 'mapping-type' field is used to determine the syntax
   and semantics of the data represented by the 'mapping-url' resource.






Bierman & van der Stok  Expires February 17, 2017              [Page 11]

Internet-Draft                  YANG IDs                     August 2016


4.  YANG Identifier Registry Format

   A YANG Identifier Registry is a data structure that represents the
   module identifier encoding details for all modules in the registry.
   It is expected that the protocol using YANG Identifiers will indicate
   which YANG Identifier Registry it is using.

   The YANG Identifier Registry syntax and semantics are defined using a
   YANG module called "ietf-yid".  This allows instances that conform to
   the registry structure to be serialized in different encoding
   formats, such as XML, JSON, or CBOR.

   The following YANG tree diagram represents the contents of the ietf-
   yid module:

      +--rw yid-registry!
         +--rw name           string
         +--rw revision       yid-revision-id
         +--rw module-bits    uint8
         +--rw local-bits     uint8
         +--rw module* [module-id]
            +--rw module-id       yid-module-id
            +--rw name            string
            +--rw revision        yid-revision-id
            +--rw local-type      enumeration
            +--rw (local-type-parms)?
               +--:(local)
               |  +--rw mapping* [local-id]
               |     +--rw local-id    yid-local-id
               |     +--rw path        string
               +--:(remote)
                  +--rw mapping-url?    inet:uri
                  +--rw mapping-type?   string

4.1.  ietf-yid Module

   <CODE-BEGINS file=ietf-yid@2016-08-16.yang>

   module ietf-yid {
     namespace "urn:ietf:params:xml:ns:yang:ietf-yid";
     prefix "yid";
     import ietf-inet-types { prefix inet; }

     organization
       "IETF CORE (Constrained RESTfull Environments) Working Group";

     contact
       "WG Web:   <http://tools.ietf.org/wg/core/>



Bierman & van der Stok  Expires February 17, 2017              [Page 12]

Internet-Draft                  YANG IDs                     August 2016


        WG List:  <mailto:core@ietf.org>

        Author:   Andy Bierman
                  <mailto:andy@yumaworks.com>

        Author:   Peter Van der Stock
                  <mailto:consultancy@vanderstok.org>
       ";

     description
       "This module contains a conceptual YANG specification
        for a YANG Identifier Registry.

        Copyright (c) 2016 IETF Trust and the persons identified as
        authors of the code.  All rights reserved.

        Redistribution and use in source and binary forms, with or
        without modification, is permitted pursuant to, and subject
        to the license terms contained in, the Simplified BSD License
        set forth in Section 4.c of the IETF Trust's Legal Provisions
        Relating to IETF Documents
        (http://trustee.ietf.org/license-info).

        This version of this YANG module is part of RFC XXXX; see
        the RFC itself for full legal notices.";

     // RFC Ed.: replace XXXX with actual RFC number and remove this
     // note.

     // RFC Ed.: remove this note
     // Note: extracted from draft-bierman-core-yid-00.txt

     // RFC Ed.: update the date below with the date of RFC publication
     // and remove this note.
     revision 2016-08-16 {
       description
         "Initial revision.";
       reference
         "RFC XXXX: Numeric YANG Identifiers.";
     }

     extension permanent-data {
       description
         "This extension can be used as a sub-statement in any data
          definition statement.  It indicates that an instance of
          the associated data node is considered permanent.

          The value of an instance of a data node that contains this



Bierman & van der Stok  Expires February 17, 2017              [Page 13]

Internet-Draft                  YANG IDs                     August 2016


          extension MUST NOT change after it is assigned in
          a published version of an instance document.

          Note that a work-in-progress is not a published document.
          An RFC or IANA registry entry are examples of
          published document.

          There is no parameter value for this extension.";
     }

     typedef yid-revision-id {
       type uint32;
       description
         "Contains a numeric representation of the YANG Identifier
          registry version.  This value SHOULD be constructed
          from a revision date string, using the following
          unsigned integer format: YYYYMMDD

           where:

            YYYY is a 16-bit integer representation of the year
            MM is a 8-bit integer representation of the month (1 - 12)
            DD is a 8-bit integer representation of the day in the month
         ";
     }

     typedef yid-module-id {
       type uint32 {
         range "1 .. max";
       }
       description
         "Represents a YANG Identifier module-id field.";
     }

     typedef yid-local-id {
       type uint32 {
         range "1 .. max";
       }
       description
         "Represents a YANG Identifier local-id field.";
     }

     grouping yid-registry {
       description
         "A grouping that representing the syntax and semantics of a
          YANG Identifier Registry.";

       container yid-registry {



Bierman & van der Stok  Expires February 17, 2017              [Page 14]

Internet-Draft                  YANG IDs                     August 2016


         presence "Instantiation of the YID registry is required.";

         description
           "Represents an YANG Identifier Registry";

         leaf name {
           type string;
           mandatory true;
           description
             "An administrative name for the YANG identifier registry.
              This value SHOULD NOT change once assigned.";
         }

         leaf revision {
           type yid-revision-id;
           mandatory true;
           description
             "A revision identifier that is unique within all
              revisions of a YANG Identifier registry.
              This value MUST NOT change once assigned in
              the first revision of the YANG Identifier registry.";
         }

         leaf module-bits {
           yid:permanent-data;
           type uint8 {
             range "4 .. 32";
           }
           mandatory true;
           description
             "The number of bits reserved for all module identifier
              values used within the registry.

              This value MUST NOT be changed after initial
              publication of the registry.";
         }

         leaf local-bits {
           yid:permanent-data;
           type uint8 {
             range "4 .. 32";
           }
           mandatory true;
           description
             "The number of bits reserved for all local identifier
              values used within each module.

              The value 'module-bits + local-bits' represents



Bierman & van der Stok  Expires February 17, 2017              [Page 15]

Internet-Draft                  YANG IDs                     August 2016


              the total number of bits contained in all full-form
              YANG Identifier values used within the registry.

              This value MUST NOT be changed after initial
              publication of the registry.";
         }

         list module {
           key module-id;
           unique name;

           description
             "Represents one module entry in the registry.
              Only complete YANG module schema trees are
              represented in a YID registry entry.
              Sub-module or incomplete representations are
              not allowed.";

           uses yid-module-entry;
         }  // list module
       }  // container yid-registry
     }  // grouping yid-registry


     grouping yid-module-entry {

       description
         "Represents one module entry in the registry.
          Only complete YANG module schema trees are
          represented in a YID registry entry.
          Sub-module or incomplete representations are
          not allowed.";

       leaf module-id {
         yid:permanent-data;
         type yid-module-id;
         description
           "The numeric identifier assigned to this module.
            This value MUST NOT be changed once the the module
            entry is created.";

       }

       leaf name {
         yid:permanent-data;
         type string;
         mandatory true;
         description



Bierman & van der Stok  Expires February 17, 2017              [Page 16]

Internet-Draft                  YANG IDs                     August 2016


           "The module name string. This exactly matches
            the value used in the associated YANG module.

            This value MUST NOT be changed once the the module
            entry is created.";
       }

       leaf revision {
           type yid-revision-id;
           mandatory true;
           description
             "A revision identifier that is unique within all
              revisions of the specified YANG module.

              This value MUST be updated to the new publication
              identifier value each time the YANG module is updated
              in the registry. Only one entry per module is
              maintained.";
       }

       leaf local-type {
         yid:permanent-data;
         type enumeration {
           enum hash {
             value 0;
             description
               "All local-id values where the most significant bit
                is set are YANG hash values.

                All local-id values where the most significant bit
                is not set are manually assigned YANG rehash values.";
           }
           enum manual {
             value 1;
             description
               "All local-id values are manually assigned identifiers.";
           }
         }
         mandatory true;
         description
           "The type of numbering used in local identifiers.";
       }

       choice local-type-parms {
         description
           "The manual local-id assignments can be done inline
            or contained in a remote YID file representation.
            This choice MUST be provided if any local identifier



Bierman & van der Stok  Expires February 17, 2017              [Page 17]

Internet-Draft                  YANG IDs                     August 2016


            mappings are used in the module.  This includes
            all manually assigned values, and and rehash entries,
            if the associated 'local-type' value is 'hash'.";
         case local {
           description
             "Case arm for inline local-id manual assignments.
              The YID node list MAY be updated in the registry for
              each new revision of the associated YANG module.";

           list mapping {
             key "local-id";
             unique path;
             description
               "Represents one manual schema node assignment.";

             leaf local-id {
               yid:permanent-data;
               type yid-local-id;
               description
                 "The manually assigned local-id value for this entry.
                  The actual allowed range for this list is controlled
                  by the value of 'local-bits'.  The number of entries
                  allowed is (2 ^^ local-bits) - 2. The 'local-id' value
                  zero is reserved and cannot be used.";
             }

             leaf path {
               yid:permanent-data;
               type string;
               mandatory true;
               description
                 "The path expression representing this schema node.
                  This value MUST NOT be changed in new revisions
                  of an instance of a YID file.";
             }
           }
         }
         case remote {
           leaf mapping-url {
             type inet:uri;
             description
               "Case arm for remote specification of the manual
                assignments. The value is a URI for a
                representation of the YID File associated with the
                manually assigned numbers for a set of YANG schema
                nodes with a YANG module.

                This value MAY be updated in the registry for



Bierman & van der Stok  Expires February 17, 2017              [Page 18]

Internet-Draft                  YANG IDs                     August 2016


                each new revision of the associated YANG module.";
           }
           leaf mapping-type {
             type string;
             description
               "The value is a string identifying the media-type
                for the representation of mapping information
                identified by the associated 'mapping-url' value.

                This value MAY be updated in the registry for
                each new revision of the associated YANG module.";
           }
         }   // case remote
       }  // choice local-parm-types

     } // grouping yid-module-entry


     uses yid-registry;

   }

   <CODE ENDS>

5.  YANG Hash Generation

   Hash based local identifiers are defined in this section.  The
   association between a path string value and numeric value is done
   through a hash algorithm.  The 'N' least significant bits of the
   "murmur3" 32-bit hash algorithm are used.  The value of 'N' is
   defined by the "local-bits" value in the YANG Identifier registry.
   This hash algorithm is described online at [murmur3].
   Implementations are available online [murmur-imp].  When converting 4
   input bytes to a 32-bit integer in the hash algorithm, the Little-
   Endian convention MUST be used.

   The "murmur3_32" hash function is executed for the entire path
   string.

   The value '42' is used as the seed for the hash function.  The YANG
   hash is subsequently calculated by taking the 'N - 1' least
   significant bits, where the value of N is defined by the "local-bits'
   value for the YANG Identifier registry.

   The resulting number is used by the server.  If the value is already
   being used for a different object within the same YANG module, then
   the assignment is considered invalid, and MUST be resolved in the




Bierman & van der Stok  Expires February 17, 2017              [Page 19]

Internet-Draft                  YANG IDs                     August 2016


   registry entry.  This is done by separating the clashing objects by
   manually assigning identifiers.

   The hash is generated for the string representing the object path
   identifier.  A canonical representation of the path identifier is
   used.

   The module name is used to identify the namespace of the object node.
   The prefix cannot be used because it is allowed to change over time.
   The module name is never allowed to change.

   The module name MUST be present in the identifier for the first node
   in the object path identifier.

   If a child node in the object path identifier is from the same module
   namespace as its parent, then the module-name MUST NOT be used in the
   identifier.

   If a child node in the object path identifier is not from the same
   module namespace as its parent, then the module-name MUST be used in
   the identifier.

   Choice and case node names are not included in the path expression.
   Only 'container', 'list', 'leaf', 'leaf-list', and 'anyxml' nodes are
   listed in the path expression.

   The YANG Hash value is calculated for all data nodes in the module.
   The hash values are calculated, even if the server only implements a
   subset of these objects.  This includes all "data-def" statements.

   Example: the following identifier is for the 'mtu' leaf in the ietf-
   interfaces module:


      /ietf-interfaces:interfaces/interface/mtu


   Example: the following identifier is for the 'ipv4' container in the
   ietf-ip module, which augments the 'interface' list in the ietf-
   interfaces module:


      /ietf-interfaces:interfaces/interface/ietf-ip:ipv4








Bierman & van der Stok  Expires February 17, 2017              [Page 20]

Internet-Draft                  YANG IDs                     August 2016


6.  Security Considerations

   The exchange of names by numbers does not affect the security of the
   transmitted requests.

7.  IANA Considerations

   This document requests the following actions be taken by IANA

    1) add the "ietf-yid" YANG module to the YANG Module Names Registry
    2) add a new "module-id" parameter to the YANG Module Names Registry
    3) create a new YANG Identifiers Registry

7.1.  YANG Module Library Entry: ietf-yid

   This document registers one URI as a namespace in the IETF XML
   registry [RFC3688].  Following the format in RFC 3688, the following
   registration is requested:

      URI: urn:ietf:params:xml:ns:yang:ietf-yid
      Registrant Contact: The CORE WG of the IETF.
      XML: N/A, the requested URI is an XML namespace.

   This document registers one YANG module in the YANG Module Names
   registry [RFC6020]:

      name:         ietf-yid
      namespace:    urn:ietf:params:xml:ns:yang:ietf-yid
      prefix:       yid
      // RFC Ed.: replace XXXX with RFC number and remove this note
      reference:    RFCXXXX

7.2.  YANG Module Names Parameter Addition: module-id

   This document requests that a new parameter named "module-id" be
   added to the YANG Module Names Registry.  This value is a 20 bit
   number, greater than zero, that represents an arbitrary integer
   assignment (by IANA) for the YANG module.

   This is only required for registry entries that represent YANG
   modules, not YANG sub-modules.  The YANG typedef "yid-module-id" in
   the "ietf-yid" YANG module defines the syntax and semantics of a
   module-id value.








Bierman & van der Stok  Expires February 17, 2017              [Page 21]

Internet-Draft                  YANG IDs                     August 2016


7.3.  YANG Identifier Registry

   This document requests that a new YANG Identifier Registry be created
   and maintained by IANA.  This registry is used to archive numeric
   numbering information for YANG modules found in the YANG Module Names
   registry.

   This is only required for registry entries that represent YANG
   modules, not YANG sub-modules.  The YANG data node "yid-registry" in
   the "ietf-yid" YANG module defines the syntax and semantics of a YANG
   Identifier registry.

   The syntax and semantics of the registry structure is described by
   the "yid-registry" grouping definition in the "ietf-yid" YANG module
   defined in Section 4.1.

   A "module" entry needs to be maintained for each YANG module
   maintained by IANA.  The "yid-module-entry" grouping in the "ietf-
   yid" YANG module defines the syntax and semantics of each module
   entry.  The "module-id" field in the entry must match the "module-id"
   assigned to the YANG module in the YANG Module Names registry.

   TBD: List the tools available to generate YANG hash and manual
   assignment entries

   The following initial parameter values are suggested for the
   registry:

     { "yid-registry" : {
         "name" : "ietf-yid",
         "revision" : TBD,
         "module-bits" : 20,
         "local-bits" : 16
       }
     }

7.3.1.  Registry Maintenance

   When a YANG module is added to the YANG Module Names Registry, IANA
   will assign a unique module-id value for the module.  At this time an
   initial YANG Identifier registry entry for the module is created.

   When a YANG module update is being published, and IANA actions are
   being processed for the pending RFC, an update to the YANG Identifier
   registry for the existing module is created.  The registry entry
   "revision" field is updated to a new value that is greater than the
   previous value.




Bierman & van der Stok  Expires February 17, 2017              [Page 22]

Internet-Draft                  YANG IDs                     August 2016


   No existing entry information is allowed to change.  Only new
   manually numbered local-id values can be added.  For local mappings,
   new "mapping" list entries can be added.  For remote mappings, the
   "mapping-url" and "mapping-type" fields can be updated to identify
   the new mapping information.

   For YANG modules that use YANG hash based local-id values, there is
   no need to update the registry entry for the module unless any hash
   collisions would be introduced by the new module revision.  For YANG
   modules that use manually numbered local-id values, there is no need
   to update the registry unless new data nodes have been added to the
   YANG module.

8.  Acknowledgements

   We are very grateful to Bert Greevenbosch who suggested the use of
   hashes and specified the use of murmur3.

9.  References

9.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <http://www.rfc-editor.org/info/rfc2119>.

   [RFC6020]  Bjorklund, M., Ed., "YANG - A Data Modeling Language for
              the Network Configuration Protocol (NETCONF)", RFC 6020,
              DOI 10.17487/RFC6020, October 2010,
              <http://www.rfc-editor.org/info/rfc6020>.

   [murmur3]  "murmurhash family",
              Web http://en.wikipedia.org/wiki/MurmurHash.

   [murmur-imp]
              "murmurhash implementation",
              Web https://code.google.com/p/smhasher/.

9.2.  Informative References

   [RFC2578]  McCloghrie, K., Ed., Perkins, D., Ed., and J.
              Schoenwaelder, Ed., "Structure of Management Information
              Version 2 (SMIv2)", STD 58, RFC 2578,
              DOI 10.17487/RFC2578, April 1999,
              <http://www.rfc-editor.org/info/rfc2578>.





Bierman & van der Stok  Expires February 17, 2017              [Page 23]

Internet-Draft                  YANG IDs                     August 2016


   [RFC4293]  Routhier, S., Ed., "Management Information Base for the
              Internet Protocol (IP)", RFC 4293, DOI 10.17487/RFC4293,
              April 2006, <http://www.rfc-editor.org/info/rfc4293>.

   [RFC6241]  Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
              and A. Bierman, Ed., "Network Configuration Protocol
              (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
              <http://www.rfc-editor.org/info/rfc6241>.

   [I-D.ietf-netconf-restconf]
              Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
              Protocol", draft-ietf-netconf-restconf-16 (work in
              progress), August 2016.

   [I-D.bierman-core-yang-hash]
              Bierman, A. and P. Stok, "YANG Hash", draft-bierman-core-
              yang-hash-00 (work in progress), February 2016.

Appendix A.  Open Issues

   There are some advanced features not specified in this document.
   These can be left as future work.

   When to assign a module-id:  There may be significant delay between
      the time a module is used in development and when it is published
      and added to a registry.  Once a module-id has been assigned, it
      cannot be undone or changed.  When should a module-id be assigned
      in a YANG Identifier registry?  Should it be early in development,
      late in development, or after the module approval process?

   How to support private numbering:  Should it be possible for a
      registry used by a server to contain module-id values that have
      not been globally assigned in the registry?  Should a numeric
      range be reserved for this purpose?  If so, is this range globally
      reserved or configured into each registry?

   How to combine registries:  What if a server vendor wants to support
      modules not listed in a single registry?  How can this be
      supported?  E.g., increase the size of the identifier and allocate
      some bits for a registry identifier?

   Should more YANG statements be numbered:  Should "rpc" and
      "notification" statements be numbered?  Should YANG 1.1 "action"
      statements be numbered?

   How to support anyxml and anydata subtrees:  A YANG data node that is
      defined with the "anyxml" ar "anydata" statement has an identifier
      for the top of the specified subtree in instance documents.  XML



Bierman & van der Stok  Expires February 17, 2017              [Page 24]

Internet-Draft                  YANG IDs                     August 2016


      and JSON representations of these YANG statements uses a QName to
      identify each descendant node within the anyxml or anydata
      subtree.  These descendant nodes do not exist in the YANG module
      schema tree.  They only exist in instance documents conforming to
      the YANG module.  Therefore it is not possible to give these nodes
      numeric assignments.  Use of string (QName) identifiers within
      anyxml or anydata subtrees may be required.

Appendix B.  YANG Identifier Examples

   The following simple YANG module is used throughout these examples:

     module example-address {
       namespace "http://example.com/ns/example-address";
       prefix "exaddr";
       revision 2016-08-05;

       container addresses {
         list address {
           key "last first";
           leaf last { type string; }
           leaf first { type string; }
           leaf street { type string; }
           leaf city { type string; }
           leaf zipcode { type string; }
         }
       }
     }

B.1.  Hash Collision Repair Example

   The following example shows how a hash collision can be avoided using
   the YANG Hash "rehash" bit.

   The following path identifiers and conceptual hash values are
   assigned for the "example-address" module:

     H1 /example-address:addresses
     H2 /example-address:addresses/address
     H3 /example-address:addresses/address/last
     H4 /example-address:addresses/address/first
     H5 /example-address:addresses/address/street
     H6 /example-address:addresses/address/city
     H7 /example-address:addresses/address/zipcode

   The following YANG Identifier values could be assigned using if there
   are no hash collisions.




Bierman & van der Stok  Expires February 17, 2017              [Page 25]

Internet-Draft                  YANG IDs                     August 2016


     module-id = M
     local-id = Hn

   However, if 2 nodes have the same hash value (say H2 and H5) then one
   of the nodes needs to be renumbered using an manual assignment in the
   YANG registry.  If 16 bit local identifiers are used then values 1 -
   32767 are reserved for hash values, and values 32768 - 65535 are
   reserved for manually assigned rehash mappings.

        { "module" : [
            {
              "module-id" : 17,
              "name" : "example-address",
              "revision" : 0x7e00801,
              "local-type" : "hash",
              "mapping" : [
                {
                  "local-id" : 32768,
                  "path" : "/example-address:addresses/address/street"
                }
              ]
            }
          ]
        }

B.2.  Manual Numbering Example

   In this example, manually assigned local-id values are given to the
   example-address module.  Instead of hash values, simple ascending
   integer values are given.

     1 /example-address:addresses
     2 /example-address:addresses/address
     3 /example-address:addresses/address/last
     4 /example-address:addresses/address/first
     5 /example-address:addresses/address/street
     6 /example-address:addresses/address/city
     7 /example-address:addresses/address/zipcode

   If the 'module-id' value '17' is assigned, and the 'local-bits' value
   is '16', then the following YANG Identifier values would be assigned
   for these local-id values:









Bierman & van der Stok  Expires February 17, 2017              [Page 26]

Internet-Draft                  YANG IDs                     August 2016


     0x110001 /example-address:addresses
     0x110002 /example-address:addresses/address
     0x110003 /example-address:addresses/address/last
     0x110004 /example-address:addresses/address/first
     0x110005 /example-address:addresses/address/street
     0x110006 /example-address:addresses/address/city
     0x110007 /example-address:addresses/address/zipcode

   The example YANG Identifier (YID) file contents:










































Bierman & van der Stok  Expires February 17, 2017              [Page 27]

Internet-Draft                  YANG IDs                     August 2016


        { "module" : [
            {
              "module-id" : 17,
              "name" : "example-address",
              "revision" : 0x7e00801,
              "local-type" : "manual",
              "mapping" : [
                {
                  "local-id" : 1,
                  "path" : "/example-address:addresses"
                },
                {
                  "local-id" : 2,
                  "path" : "/example-address:addresses/address"
                },
                {
                  "local-id" : 3,
                  "path" : "/example-address:addresses/address/last"
                },
                {
                  "local-id" : 4,
                  "path" : "/example-address:addresses/address/first"
                },
                {
                  "local-id" : 5,
                  "path" : "/example-address:addresses/address/street"
                },
                {
                  "local-id" : 6,
                  "path" : "/example-address:addresses/address/city"
                },
                {
                  "local-id" : 7,
                  "path" : "/example-address:addresses/address/zipcode"
                }
              ]
            }
          }
        }

B.3.  Augment Numbering Example

   In this example, manually assigned local-id values are given to the
   following "example-phone" module:







Bierman & van der Stok  Expires February 17, 2017              [Page 28]

Internet-Draft                  YANG IDs                     August 2016


     module example-phone {
       namespace "http://example.com/ns/example-phone";
       prefix "exphone";
       import example-address { prefix addr; }
       revision 2016-08-05;

       augment "/addr:addresses/addr:address" {
         container phones {
           list phone {
             key "prefix number";
             leaf prefix { type string; }
             leaf number { type string; }
             leaf type { type phone-type; }
           }
         }
       }
     }

   The following local-id mappings are defined in this example.

     1 /example-address:addresses/address/example-phone:phones
     2 /example-address:addresses/address/example-phone:phones\
         /phone
     3 /example-address:addresses/address/example-phone:phones\
         /phone/prefix
     4 /example-address:addresses/address/example-phone:phones\
         /phone/number
     5 /example-address:addresses/address/example-phone:phones\
         /phone/type

   If the 'module-id' value '24' is assigned, and the 'local-bits' value
   is '16', then the following YANG Identifier values would be assigned
   for these local-id values:

     0x180001 /example-address:addresses/address/example-phone:phones
     0x180002 /example-address:addresses/address/example-phone:phones\
                 /phone
     0x180003 /example-address:addresses/address/example-phone:phones\
                 /phone/prefix
     0x180004 /example-address:addresses/address/example-phone:phones\
                 /phone/number
     0x180005 /example-address:addresses/address/example-phone:phones\
                 /phone/type

   The example YANG Identifier (YID) file contents are shown below.






Bierman & van der Stok  Expires February 17, 2017              [Page 29]

Internet-Draft                  YANG IDs                     August 2016


        { "module" : [
            {
              "module-id" : 24,
              "name" : "example-phone",
              "revision" : 0x7e00801,
              "local-type" : "manual",
              "mapping" : [
                {
                  "local-id" : 1,
                  "path" : "/example-address:addresses/address\
                     /example-phone:phones"
                },
                {
                  "local-id" : 2,
                  "path" : "/example-address:addresses/address\
                     /example-phone:phones/phone"
                },
                {
                  "local-id" : 3,
                  "path" : "/example-address:addresses/address\
                     /example-phone:phones/phone/prefix"
                },
                {
                  "local-id" : 4,
                  "path" : "/example-address:addresses/address\
                     /example-phone:phones/phone/number"
                },
                {
                  "local-id" : 5,
                  "path" : "/example-address:addresses/address\
                     /example-phone:phones/phone/type"
                }
              ]
            }
          }
        }

Appendix C.  YANG Hash Examples

   The YANG translation of the SMIv2 module specifying the
   ipNetToMediaTable [RFC4293] yields:










Bierman & van der Stok  Expires February 17, 2017              [Page 30]

Internet-Draft                  YANG IDs                     August 2016


   container IP-MIB {
     container ipNetToPhysicalTable {
       list ipNetToPhysicalEntry {
          key "ipNetToPhysicalIfIndex
               ipNetToPhysicalNetAddressType
               ipNetToPhysicalNetAddress";
          leaf ipNetToMediaIfIndex {
             type: int32;
          }
          leaf ipNetToPhysicalIfIndex {
            type if-mib:InterfaceIndex;
          }
          leaf ipNetToPhysicalNetAddressType {
            type inet-address:InetAddressType;
          }
          leaf ipNetToPhysicalNetAddress {
            type inet-address:InetAddress;
          }
          leaf ipNetToPhysicalPhysAddress {
            type yang:phys-address {
               length "0..65535";
            }
          }
          leaf ipNetToPhysicalLastUpdated {
            type yang:timestamp;
          }
          leaf ipNetToPhysicalType {
            type enumeration { ... }
          }
          leaf ipNetToPhysicalState {
            type enumeration { ... }
          }
          leaf ipNetToPhysicalRowStatus {
            type snmpv2-tc:RowStatus;
          }
       }
    }

   The YANG hash values for 'ipNetToPhysicalEntry' and its child nodes
   are calculated by constructing the schema node identifier for the
   objects, and then calculating the 30 bit murmur3 hash values (shown
   in parenthesis):









Bierman & van der Stok  Expires February 17, 2017              [Page 31]

Internet-Draft                  YANG IDs                     August 2016


      /IP-MIB:IP-MIB/ipNetToPhysicalTable (0x0aba15cc)
      /IP-MIB:IP-MIB/ipNetToPhysicalTable/ipNetToPhysicalEntry
         (0xo6aaddbc)
      /IP-MIB:IP-MIB/ipNetToPhysicalTable/ipNetToPhysicalEntry\
         /ipNetToPhysicalIfIndex (0x346b3071)
      /IP-MIB:IP-MIB/ipNetToPhysicalTable/ipNetToPhysicalEntry\
         /ipNetToPhysicalNetAddressType (0x3650bb64)
      /IP-MIB:IP-MIB/ipNetToPhysicalTable/ipNetToPhysicalEntry\
         /ipNetToPhysicalNetAddress (0x06fd4d91)
      /IP-MIB/ipNetToPhysicalTable/ipNetToPhysicalEntry\
         /ipNetToPhysicalPhysAddress (0x26180bcb)
      /IP-MIB:IP-MIB/ipNetToPhysicalTable/ipNetToPhysicalEntry\
         /ipNetToPhysicalLastUpdated (0x3d6bbe90)
      /IP-MIB:IP-MIB/ipNetToPhysicalTable/ipNetToPhysicalEntry\
         /ipNetToPhysicalType (0x35ecbb3d)
      /IP-MIB:IP-MIB/ipNetToPhysicalTable/ipNetToPhysicalEntry\
         /ipNetToPhysicalState (0x13038bb5)
      /IP-MIB:IP-MIB/ipNetToPhysicalTable/ipNetToPhysicalEntry\
         /ipNetToPhysicalRowStatus (0x09e1fa37)

   The example YANG Identifier (YID) file contents are shown below.
   Note that there are no hash collisions so there are no local
   identifiers assigned.  This is expected to be the typical case.

        { "module" : [
            {
              "module-id" : 25,
              "name" : "IP-MIB",
              "revision" : 0x7d60202,
              "local-type" : "hash"
            }
          ]
        }

   If the 'module-id' value '25' is assigned, and the 'local-bits' value
   is '16', then the following YANG Identifier values would be assigned
   for these local-id values (only the terminal node is shown since they
   are unique in SMIv2).  Note that only 15 bits of the 30 bit hash
   value are used.  The 16th bit is reserved to identify manually
   assigned rehash entries.











Bierman & van der Stok  Expires February 17, 2017              [Page 32]

Internet-Draft                  YANG IDs                     August 2016


      0x1915cc  ipNetToPhysicalTable
      0x195dbc  ipNetToPhysicalEntry
      0x193071  ipNetToPhysicalIfIndex
      0x193b64  ipNetToPhysicalNetAddressType
      0x194d91  ipNetToPhysicalNetAddress
      0x190bcb  ipNetToPhysicalPhysAddress
      0x193e90  ipNetToPhysicalLastUpdated
      0x193b3d  ipNetToPhysicalType
      0x190bb5  ipNetToPhysicalState
      0x197a37  ipNetToPhysicalRowStatus

Authors' Addresses

   Andy Bierman
   YumaWorks, Inc.
   685 Cochran St.
   Suite #160
   Simi Valley, CA  93065
   USA

   Email: andy@yumaworks.com


   Peter van der Stok
   consultant

   Phone: +31-492474673 (Netherlands), +33-966015248 (France)
   Email: consultancy@vanderstok.org
   URI:   www.vanderstok.org






















Bierman & van der Stok  Expires February 17, 2017              [Page 33]