Internet DRAFT - draft-shi-alto-yang-json

draft-shi-alto-yang-json







ALTO Working Group                                                X. Shi
Internet-Draft                                                   Y. Yang
Intended status: Informational                           Yale University
Expires: April 30, 2015                                 October 27, 2014


                   Modeling JSON Messages Using YANG
                      draft-shi-alto-yang-json-00

Abstract

   JavaScript Object Notation (JSON) has been a popular choice as the
   message encoding for many network protocols.  Meanwhile, there are
   broad interests in the networking community to use the YANG data
   modeling language [RFC6020] to define data store and protocol
   messages, so that one can use YANG related tools such as the
   OpenDayLight Controller.  Although YANG itself is XML based, there
   have been efforts to model JSON content using YANG
   [draft-ietf-netmod-yang-json-01]

   This document explores the conditions under which the messages of a
   JSON based protocol can have a syntactically equivalent and hence
   interoperable YANG model.  In particular, this document shows that
   any JSON protocol message with stand-alone non-object JSON values,
   certain JSON arrays of elements of mixed types, or non-keyword keys
   in key-value pairs cannot have a syntactically equivalent YANG model.
   It also applies these conditions to the ALTO and CDNi protocol
   messages as examples.

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 April 30, 2015.






Shi & Yang               Expires April 30, 2015                 [Page 1]

Internet-Draft      Modeling JSON Messages Using YANG       October 2014


Copyright Notice

   Copyright (c) 2014 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
   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  . . . . . . . . . . . . . . . . . . . . . . . .   3
   2.  Claim . . . . . . . . . . . . . . . . . . . . . . . . . . . .   3
     2.1.  Message Encoding Condition  . . . . . . . . . . . . . . .   3
       2.1.1.  Conditions  . . . . . . . . . . . . . . . . . . . . .   3
       2.1.2.  Application of the Message Encoding Condition . . . .   4
     2.2.  The URI Condition . . . . . . . . . . . . . . . . . . . .   5
   3.  Proof of syntactic equivalence conditions . . . . . . . . . .   5
     3.1.  The necessity of the message encoding condition . . . . .   6
       3.1.1.  Condition (1) . . . . . . . . . . . . . . . . . . . .   6
       3.1.2.  Condition (2) . . . . . . . . . . . . . . . . . . . .   6
       3.1.3.  Condition (3) . . . . . . . . . . . . . . . . . . . .   6
       3.1.4.  Conclusion  . . . . . . . . . . . . . . . . . . . . .   6
     3.2.  The sufficiency of the message encoding condition . . . .   6
       3.2.1.  Motivation of using Jackson data binding  . . . . . .   7
       3.2.2.  The message encoding condition in Jackson terms . . .   7
       3.2.3.  Proof . . . . . . . . . . . . . . . . . . . . . . . .   7
     3.3.  Examples  . . . . . . . . . . . . . . . . . . . . . . . .  11
       3.3.1.  ALTO cost map example . . . . . . . . . . . . . . . .  12
       3.3.2.  CDNi metadata example . . . . . . . . . . . . . . . .  15
     3.4.  Concluding remarks  . . . . . . . . . . . . . . . . . . .  20
   4.  Semantic Equivalence  . . . . . . . . . . . . . . . . . . . .  20
     4.1.  Claim . . . . . . . . . . . . . . . . . . . . . . . . . .  20
     4.2.  Proof by Indistinguishability . . . . . . . . . . . . . .  21
   5.  Ramifications . . . . . . . . . . . . . . . . . . . . . . . .  21
   6.  Security Considerations . . . . . . . . . . . . . . . . . . .  22
   7.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  22
   8.  References  . . . . . . . . . . . . . . . . . . . . . . . . .  22
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  22






Shi & Yang               Expires April 30, 2015                 [Page 2]

Internet-Draft      Modeling JSON Messages Using YANG       October 2014


1.  Introduction

   JavaScript Object Notation (JSON) has been a popular choice as the
   message encoding for many network protocols such as the Application-
   Layer Traffic Optimization (ALTO) protocol [RFC7285], the Content
   Delivery Networks Interconnection (CDNi) protocol [RFC6707], the Port
   Control Protocol (PCP) [RFC6887], etc.

   Meanwhile, there are broad interests in the networking community to
   use the YANG data modeling language [RFC6020] to define data store
   and protocol messages, so that one can use YANG related tools such as
   the OpenDayLight Controller.  Although YANG itself is XML based,
   there have been efforts to model JSON content using YANG
   [draft-ietf-netmod-yang-json-01]

   This document explores the conditions under which the messages of a
   JSON based protocol can have a syntactically equivalent hence
   interoperable YANG model, and provides a conversion process from the
   JSON message to the YANG model.  In particular, this document shows
   that any JSON protocol message with stand-alone non-object JSON
   values, certain JSON arrays of elements of mixed types, or non-
   keyword keys in key-value pairs cannot have a syntactically
   equivalent YANG model.  It also applies these conditions to the ALTO
   and CDNi protocol messages as examples.  For protocols that do not
   have syntactically equivalent YANG models, we also explore the
   possibility of a semantically equivalent YANG model.

2.  Claim

   Assume that we follow the specifications of JSON as specified in
   [RFC7159], the YANG modeling languate as specified in [RFC6020]. and
   the JSON encoding of data modeled in YANG as specified in
   [draft-ietf-netmod-yang-json-01].

   A JSON based protocol message can have a syntactically equivalent
   YANG model if and only if:

   (1) the message encoding condition is met;

   (2) the uri condition is met.

2.1.  Message Encoding Condition

2.1.1.  Conditions

   The JSON message encoding condition is the following:

   (1)  The message MUST be a JSON object.



Shi & Yang               Expires April 30, 2015                 [Page 3]

Internet-Draft      Modeling JSON Messages Using YANG       October 2014


   (2)  The arrays MUST be either all objects, or all non-object non-
        array types, i.e. false, null, true, number, string;

   (3)  The JSON message MUST NOT contain a variable as a key or null as
        a value in a JSON object key-value pair; in other words, the
        keys in the JSON message must be an already defined constant
        keyword in the message format of the protocol.

2.1.2.  Application of the Message Encoding Condition

2.1.2.1.  ALTO Network Map Example

   {
     "meta" : {
       "vtag": {
         "resource-id": "my-default-network-map",
          "tag": "da65eca2eb7a10ce8b059740b0b2e3f8eb1d4785"
       }
     },
     "network-map" : {
       "PID1" : {
         "ipv4" : [
           "192.0.2.0/24",
           "198.51.100.0/25"
         ]
       },
       "PID2" : {
         "ipv4" : [
           "198.51.100.128/25"
         ]
       },
       "PID3" : {
         "ipv4" : [
           "0.0.0.0/0"
         ],
         "ipv6" : [
           "::/0"
         ]
       }
     }
   }

   Some of the keys (e.g.  "PID1", "PID2", "PID3") in this JSON object
   are not pre-defined keywords, which violated Condition (3).  Hence it
   cannot have a syntactically equivalent YANG Model.






Shi & Yang               Expires April 30, 2015                 [Page 4]

Internet-Draft      Modeling JSON Messages Using YANG       October 2014


2.1.2.2.  CDNi Metadata Example

   {
     "hosts": [
       {
         "host": "video.example.com",
         "_links": {
           "host-metadata" : {
             "type": "application/cdni.HostMetadata.v1+json",
             "href": "http://metadata.ucdn.example/host1234"
           }
         }
       },
       {
         "host": "images.example.com",
         "_links": {
           "host-metadata" : {
             "type": "application/cdni.HostMetadata.v1+json",
             "href": "http://metadata.ucdn.example/host5678"
           }
         }
       }
     ]
   }

   This JSON object, as specified in Section 6.4.2 in [CDNiMetadata],
   satisfies all three message encoding conditions.  Hence it is
   possible to model it using YANG.

2.2.  The URI Condition

   Some of the YANG related protocols might have URI constraints, e.g.,
   RESTCONF.  There might be also be future protocols that put on
   additional restraints.  In addition, it is a restraint on the data
   (the uri in the JSON message), instead of on the data model.

   In case these constraints are in place, to resolve the issue, the uri
   in the JSON message could be conformed to constraint-compliant uri;
   alternatively, the server could set up a gateway translation for uri.
   Hence, for now we focus only on the message encoding condition and
   leave this condition open.

3.  Proof of syntactic equivalence conditions








Shi & Yang               Expires April 30, 2015                 [Page 5]

Internet-Draft      Modeling JSON Messages Using YANG       October 2014


3.1.  The necessity of the message encoding condition

   We prove the necessity of the message encoding condition by proving
   its contrapositive.

3.1.1.  Condition (1)

   Although there are no strict rules to convert from JSON to XML, a
   stand-alone non-object JSON value would not have an XML tag, which
   fails because of the same reason for Condition (3).

3.1.2.  Condition (2)

   YANG cannot model stand alone arrays as non of the YANG statements
   maps to an array according to [draft-ietf-netmod-yang-json-01].

   There are two statements which generate a name/array pair in YANG,
   the leaf-list statement and the list statement.  For a leaf-list, the
   element type must be a YANG datatype (Section. 6 of
   [draft-ietf-netmod-yang-json-01]); for a list, the array elements
   must be JSON objects.  Hence, there cannot be a mix.

3.1.3.  Condition (3)

   If one of the keys in the key-value pair in the JSON document is not
   pre-defined, the corresponding XML tags will not be pre-defined
   keywords.  Therefore, it would not possible to model it in YANG
   without using YANG's anyxml statement (which allows arbitrary XML
   content).  However, using the anyxml statement defeats the purpose of
   modeling the data as it allows arbitrary XML content, and will not
   help the subsequent parsing process.

3.1.4.  Conclusion

   The above three conditions are necessary to model a JSON message in
   YANG.

3.2.  The sufficiency of the message encoding condition

   We prove this by providing a translation procedure from a JSON
   message that is compliant with the protocol we are trying to model,
   to a custom java class that can be used for Jackson data binding,
   then to a YANG model.  Note that the middle step of translating to
   and from the custom parser class is not necessary, but it is useful.
   This also implies which data binding/JSON parser we use does not
   matter.





Shi & Yang               Expires April 30, 2015                 [Page 6]

Internet-Draft      Modeling JSON Messages Using YANG       October 2014


3.2.1.  Motivation of using Jackson data binding

   JSON data binding is the process of binding data structures (objects,
   arrays, etc.) in JSON to the appropriate data structures in the
   server (e.g. java classes, database tables, etc.) in parsing the JSON
   text.  In order to process JSON messages in a meaningful manner, data
   binding is necessary.  Even if the binding is not explicit, the
   server would need to do it eventually.  For example, one can read
   JSON content in a stream without binding it to the java classes, but
   eventually in order to make sense of the data, the server would
   eventually have to organize it, which is analogous to data binding
   upfront.  Popular choices for JSON parsing and data binding include
   jackson and gson.

   We use Jackson full data binding as our approach.  Full data binding
   binds JSON content into plain old java objects (POJOs), i.e. this
   custom parser class can neither extend nor implement any other class.
   Jackson uses ObjectMapper with the custom parser class to parse JSON
   content into this class.

   The no inheritance assumption means that all custom parser classes
   are base classes.  Nevertheless, this assumption is also not
   necessary--we can simply make any derived classes a new based class.

3.2.2.  The message encoding condition in Jackson terms

   For now, we make a stronger assumption than Condition (2): we assume
   all arrays contain elements that are homogeneous non-array JSON
   values.  We handle the case of heterogeneous objects and
   heterogeneous non-object non-array types later.

   The message encoding condition (3) is that all keys in each key-value
   pair in the JSON text must be pre-defined keywords.  As the keys will
   become either class names and instance variable names, or be keys in
   the java maps, it is easy to see that this condition is equivalent
   to: there exists a full data binding in Jackson custom parser class
   without using any map structures (Map<String, ?>)."

3.2.3.  Proof

3.2.3.1.  Generate Jackson Parser from JSON Message

   We provide a recursive binding process from a JSON object to the
   Jackson custom parser class to be used by Jackson ObjectMapper.







Shi & Yang               Expires April 30, 2015                 [Page 7]

Internet-Draft      Modeling JSON Messages Using YANG       October 2014


   Type determine_type(value) {
     if (type(value) is string or number or boolean or null) {
       return the corresponding java primitive type;
     }
     if (value is a JSON object) {
       return build_parser_class(value).class;
     }
     if (value is an array) {
       return ArrayList<T> where T=determine_type(value[0]);
     }
     // should not reach here.
   }

   Class build_parser_class(JSONObject obj) {
     create custom class C;
     for each key/value pair in the obj {
       add instance variable v in C;
       the name of variable v <- key;
       the type of variable v <- determine_type(value);
     }
     return C.class;
   }

   To ensure the naming in the YANG model is consistent with the JSON
   message, We follow the naming process: change everything into
   CamelCase (i.e. remove dashes, etc.); for instance variables, use
   "my" prefix, (e.g. myVariable, myNetworkMap, etc.); for the custom
   class name, if the object is an element of the array, use "Element"
   suffix; if a class already exists, we add a number after it which we
   then remove at the next stage.

3.2.3.2.  Generate YANG Model from Jackson Parser

   Given a Jackson Parser Java Class, the following algorithm generates
   a YANG model:
















Shi & Yang               Expires April 30, 2015                 [Page 8]

Internet-Draft      Modeling JSON Messages Using YANG       October 2014


   YANGModel build_yang_model(Class C) {
     for each instance variable (Type, Name) {
       if (Type is primitive type: string, number, boolean, null) {
         add the following to the YANG module:
         "leaf Name { type <YANG equivalent of Type>; }"
       }
       if (Type is an ArrayList<TypeElement>) {
         if (TypeElement is primitive type) {
           add the following to the YANG module:
           "leaf-list Name { type <YANG equivalent of TypeElement>; }"
         } else {
           // TypeElement is a custom parser class
           add the following to the YANG module:
           "list Name { build_yang_model(TypeElement.class) }"
         }
       }
       if (Type is a custom parser class) {
         add the following to the YANG module:
         "container Name { build_yang_model(Type.class) }"
       }
     }
   }

3.2.3.3.  Handling heterogeneous arrays

   Due to Java's strong typing, handling heterogeneous arrays is
   difficult, but not impossible.  For simplicity, we provide the YANG
   model directly for heterogeneous arrays and provide guidelines for
   Jackson parsing.

3.2.3.3.1.  Arrays of entirely primitive types

   If the array is consisted of entirely non-object, non-value types
   type_1, type_2, ..., type_n, the corresponding YANG model is a leaf-
   list with a derived type.

   typedef element-type {
     type union {
       type type_1;
       type type_2;
       ...
       type type_m;
     }
   }

   leaf-list key-name {
     type element-type;
   }



Shi & Yang               Expires April 30, 2015                 [Page 9]

Internet-Draft      Modeling JSON Messages Using YANG       October 2014


   In Jackson, one may parse such arrays as String[] and then convert to
   whichever types needed.

3.2.3.3.2.  Example

   foo : [
     12,
     "abc",
     true
   ]

   leaf-list foo {
     type union {
       type int32;
       type string;
       type boolean;
     }
   }

3.2.3.3.3.  Arrays of entirely JSON objects

   If the array is consisted of entirely JSON object, we create a YANG
   grouping for each object (by following the same process as
   build_parser_class and build_yang_object above).  Then use list,
   choice, and case statements.

   list key-name {
     choice elements {
       case element-object-1 {
         uses grouping-1;
       }
       case element-object-2 {
         uses grouping-2;
       }
       ...
       case element-object-n {
         uses grouping-n;
       }
     }
   }

   In Jackson, one may use annotations or custom deserializers to parse
   such structures.








Shi & Yang               Expires April 30, 2015                [Page 10]

Internet-Draft      Modeling JSON Messages Using YANG       October 2014


3.2.3.4.  Example

   foo : [
     {
       "bar" : 12,
       "baz" : "abc"
     },
     {
       "name" : "Cyrus T. Elk",
       "year" : 1938
     }
   ]

   grouping grouping-1 {
     leaf bar {
       type int32;
     }
     leaf baz {
       type string;
     }
   }

   grouping grouping-2 {
     leaf name {
       type string;
     }
     leaf year {
       type int32;
     }
   }

   list foo {
     choice element-types {
       case element-type-1 {
         uses grouping-1;
       }
       case element-type-2 {
         uses grouping-2;
       }
     }
   }

3.3.  Examples








Shi & Yang               Expires April 30, 2015                [Page 11]

Internet-Draft      Modeling JSON Messages Using YANG       October 2014


3.3.1.  ALTO cost map example

   Take the cost map response from the ALTO protocol [RFC7285] as an
   example:

   {
     "meta" : {
       "dependent-vtags" : [
         {"resource-id": "my-default-network-map",
          "tag": "3ee2cb7e8d63d9fab71b9b34cbf764436315542e"
         }
       ],
       "cost-type" : {"cost-mode"  : "numerical",
                      "cost-metric": "routingcost"
       }
     },
     "cost-map" : {
       "PID1": { "PID1": 1,  "PID2": 5,  "PID3": 10 },
       "PID2": { "PID1": 5,  "PID2": 1,  "PID3": 15 },
       "PID3": { "PID1": 20, "PID2": 15  }
     }
   }

   This JSON object does not have a syntactically equivalent model in
   YANG because some of its keys are variables, e.g., the "PID1",
   "PID2", etc.

   If we change this cost map object to the following, we will be able
   to model it.

   {
     "meta" : {
       "dependent-vtags" : [
         {"resource-id": "my-default-network-map",
          "tag": "3ee2cb7e8d63d9fab71b9b34cbf764436315542e"
         }
       ],
       "cost-type" : {"cost-mode"  : "numerical",
                      "cost-metric": "routingcost"
       }
     },
     "cost-map" : [
       {
         "src":"PID1",
         "dst-costs" : [
           {
             "dst": "PID1",
             "cost" : 1



Shi & Yang               Expires April 30, 2015                [Page 12]

Internet-Draft      Modeling JSON Messages Using YANG       October 2014


           },
           {
             "dst": "PID2",
             "cost": 5
           },
           {
             "dst": "PID3",
             "cost": 10
           }
         ]
       },
       {
         "src":"PID2",
         "dst-costs" : [
           {
             "dst": "PID1",
             "cost" : 5
           },
           {
             "dst": "PID2",
             "cost": 1
           },
           {
             "dst": "PID3",
             "cost": 15
           }
         ]
       },
       {
         "src":"PID3",
         "dst-costs" : [
           {
             "dst": "PID1",
             "cost" : 20
           },
           {
             "dst": "PID2",
             "cost": 15
           }
         ]
       }
     ]
   }

   Result of build_parser_class(obj):






Shi & Yang               Expires April 30, 2015                [Page 13]

Internet-Draft      Modeling JSON Messages Using YANG       October 2014


   Class Message {
     Meta myMeta;
     ArrayList<CostMapElement> myCostMap;
   }
   Class Meta {
     ArrayList<DependentVtagsElement> myDependentVtags;
     CostType myCostType;
   }
   Class DependentVtagsElement {
     String myResourceId;
     String myTag;
   }
   Class CostType {
     String myCostMode;
     String myCostMetric;
   }
   Class CostMapElement {
     String mySrc;
     ArrayList<DstCostsElement> myDstCosts;
   }
   Class DstCostsElement {
     String myDst;
     int myCost;
   }

   Generated YANG model:

























Shi & Yang               Expires April 30, 2015                [Page 14]

Internet-Draft      Modeling JSON Messages Using YANG       October 2014


   container meta {
     list dependent-vtags {
       leaf resource-id {
         type string;
       }
       leaf tag {
         type string;
       }
     }
     container cost-type {
       leaf cost-mode {
         type string;
       }
       leaf cost-metric {
         type string;
       }
     }
   }
   list cost-map {
     leaf src {
       type string;
     }
     list dst-costs {
       leaf dst {
         type string;
       }
       leaf cost {
         type int64;
       }
     }
   }

   This YANG model does validate the JSON cost map object with JSON
   encoding defined in [draft-ietf-netmod-yang-json-01].

3.3.2.  CDNi metadata example

   The original JSON message is the following:

{
  "metadata": [
    {
      "generic-metadata-type":"application/cdni.SourceMetadata.v1+json",
      "generic-metadata-value": {
        "sources": [
          {
            "_links": {
              "auth": {



Shi & Yang               Expires April 30, 2015                [Page 15]

Internet-Draft      Modeling JSON Messages Using YANG       October 2014


                "auth-type": "application/cdni.Auth.v1+json",
                "href": "http://metadata.ucdn.example/auth1234"
              }
            },
            "endpoint": "acq1.ucdn.example",
            "protocol": "ftp"
          },
          {
            "_links": {
              "auth": {
                "auth-type": "application/cdni.Auth.v1+json",
                "href": "http://metadata.ucdn.example/auth1234"
              }
            },
            "endpoint": "acq2.ucdn.example",
            "protocol": "http"
          }
        ]
      }
    },
    {
      "generic-metadata-type": "application/cdni.LocationACL.v1+json",
      "generic-metadata-value": {
        "locations": [
          {
            "locations": [
              {
                "footprint-type": "IPv4CIDR",
                "footprint-value": "192.168.0.0/16"
              }
            ],
            "action": "deny"
          }
        ]
      }
    },
    {
      "generic-metadata-type": "application/cdni.ProtocolACL.v1+json",
      "generic-metadata-value": {
        "protocols": [
          {
            "protocols": [
              "ftp"
            ],
            "action": "deny"
          }
        ]
      }



Shi & Yang               Expires April 30, 2015                [Page 16]

Internet-Draft      Modeling JSON Messages Using YANG       October 2014


    }
  ],
  "paths": [
    {
      "path-pattern": {
        "pattern": "/video/trailers/*"
      },
      "_links": {
        "path-metadata": {
          "type": "application/cdni.PathMetadata.v1+json",
          "href": "http://metadata.ucdn.example/host1234/pathABC"
        }
      }
    },
    {
      "path-pattern": {
        "pattern": "/video/movies/*"
      },
      "_links": {
        "path-metadata": {
          "type": "application/cdni.PathMetadata.v1+json",
          "href": "http://metadata.ucdn.example/host1234/pathDCE"
        }
      }
    }
  ]
}

   Result of build_parser_class(obj):


   Class Message {
     ArrayList<MetaDataElement> myMetaData;
     ArrayList<PathsElement> myPaths;
   }
   Class MetaDataElement {
     String myGenericMetadataType;
     GenericMetadataValue myGenericMetadataValue;
   }
   Class GenericMetadataValue {
     ArrayList<SourcesElement> mySources;
     ArrayList<LocationsElement> myLocations;
     ArrayList<ProtocolsElement> myProtocols;
   }
   Class SourcesElement {
     _Links my_Links;
     String myEndpoint;
     String myProtocol;



Shi & Yang               Expires April 30, 2015                [Page 17]

Internet-Draft      Modeling JSON Messages Using YANG       October 2014


   }
   Class _Links {
     Auth myAuth;
   }
   Class Auth {
     String myAuthType;
     String myHref;
   }
   Class LocationsElement {
     ArrayList<LocationsElement2> myLocations;
     String myAction;
   }
   Class LocationsElement2 {
     String myFootprintType;
     String myFootprintValue;
   }
   Class ProtocolsElement {
     ArrayList<String> myProtocols;
     String myAction;
   }
   Class PathsElement {
     PathPattern myPathPattern;
     _Links2 my_Links;
   }
   Class PathPattern {
     String myPattern;
   }
   Class _Links2 {
     PathMetadata myPathMetadata;
   }
   Class PathMetadata {
     String myType;
     String myHref;
   }

   Generated YANG model:

   list metadata {
     leaf generic-metadata-type {
       type string;
     }
     container generic-metadata-value {
       list sources {
         container _links {
           container auth {
             leaf auth-type {
               type string;
             }



Shi & Yang               Expires April 30, 2015                [Page 18]

Internet-Draft      Modeling JSON Messages Using YANG       October 2014


             leaf href {
               type string;
             }
           }
         }
         leaf endpoint {
           type string;
         }
         leaf protocol {
           type string;
         }
       }
       list locations {
         list locations {
           leaf footprint-type {
             type string;
           }
           leaf footprint-value {
             type string;
           }
         }
         leaf action {
           type string;
         }
       }
       list protocols {
         leaf-list protocols {
           type string;
         }
         leaf action {
           type string;
         }
       }
     }
   }
   list paths {
     container path-pattern {
       leaf pattern {
         type string;
       }
     }
     container _links {
       container path-metadata {
         leaf type {
           type string;
         }
         leaf href {
           type string;



Shi & Yang               Expires April 30, 2015                [Page 19]

Internet-Draft      Modeling JSON Messages Using YANG       October 2014


         }
       }
     }
   }

   This YANG model does validate the JSON cost map object with JSON
   encoding defined in [draft-ietf-netmod-yang-json-01].

3.4.  Concluding remarks

   This process proves that the message encoding condition is a
   sufficient condition for the JSON object to have a YANG model.

   Note the model generated is very crude and lose almost all
   constraints and all inheritance features (if any), because it focuses
   on the syntax and is essentially converted from an JSON object
   compliant with a protocol instead of from the protocol itself.  Hence
   this result is more useful in determining which JSON based protocols
   cannot have a syntactically equivalent YANG model, than in generating
   a usable YANG model.

4.  Semantic Equivalence

   For JSON based protocols that don't satisfy the message encoding
   condition, it is still possible to have a semantically equivalent
   YANG model.  All that is required for the protocol compliant clients
   and the YANG model compliant server to interoperate is an adapter
   which does the following:

   1) translate FROM YANG server compliant response msg TO alto
   compliant response msg;

   2) translate FROM alto compliant request msg TO YANG server compliant
   request msg;

4.1.  Claim

   This adapter needs to be protocol-aware.

   Ideally, given any YANG model, we would like to be able to
   automatically (or at least mechanically) generate this message
   adapter, which means not looking at the protocol or its compliant
   msgs.  However, without knowing the specific protocol that we are
   working with (i.e. human intervention, i.e. looking at the protocol
   compliant msgs), such an adapter cannot be auto-generated.






Shi & Yang               Expires April 30, 2015                [Page 20]

Internet-Draft      Modeling JSON Messages Using YANG       October 2014


4.2.  Proof by Indistinguishability

   Suppose both the YANG server compliant msg m_y and the actually
   protocol compliant msg m_p are in JSON (or have been encoded into
   JSON).  Looking at the differences between the two messages, call
   these differences {d1, d2, ..., dn}. The goal for the auto-generated
   adapter would be to identify and eliminate these differences.
   Construct a new JSON msg m' where all but one difference di is the
   same as m_p and di is the same as the m_y.  Without looking at the
   protocol (or m_p), the auto-generated adapter would not be able to
   distinguish between m' and m_p in its translation process, which
   means, it won't be able to tell whether it should change di or not.
   Hence, such an adapter must be protocol-aware.

   A good example is the dependent-vtag in the ALTO protocol:

   "dependent-vtag" : [
     {
       "resource-id" : "my-network-map",
       "tag" : "abcd1234"
     }
   ]

   It was specified this way in the alto protocol.  However, it could
   conceivably be the case that it was originally the following map
   structure, and was converted into the above encoding because of the
   map->list+key issue.  (This case is actually one of the few
   differences in the m_y and m_p where the adapter does not need to
   convert it back to a map structure.)

   "dependent-vtag" : {
     "my-network-map" : {
       "tag" : "abcd1234"
     }
   }

   Without knowing the protocol or protocol messages, it is impossible
   to distinguish.

5.  Ramifications

   We now understand the basic condition for a JSON based protocol to
   have a YANG Model.  For the protocols that don't meet this condition,
   there can be a semantic equivalent YANG model, but there won't be a
   generic process of generating the adapter for all protocols.






Shi & Yang               Expires April 30, 2015                [Page 21]

Internet-Draft      Modeling JSON Messages Using YANG       October 2014


6.  Security Considerations

   This document does not introduce security or privacy concerns.

7.  IANA Considerations

   This document does not have IANA considerations.

8.  References

   [RFC6707]  Niven-Jenkins, B., Le Faucheur, F., and N. Bitar, "Content
              Distribution Network Interconnection (CDNi) Problem
              Statement", RFC 6707, September 2012.

   [CDNiMetadata]
              Niven-Jenkins, B., Murray, R., Caulfield, M., Leung, K.,
              and K. Ma, "CDN Interconnection Metadata", July 2014.

   [RFC7159]  Bray, T., "The JavaScript Object Notation (JSON) Data
              Interchange Format", RFC 7159, March 2014.

   [RFC7285]  Almi, R., Penno, R., Yang, Y., Kiesel, S., Previdi, S.,
              Roome, W., Shalunov, S., and R. Woundy, "Application-Layer
              Traffic Optimization (ALTO) Protocol", RFC 7285, September
              2014.

   [RFC6887]  Wing, D., Ed., Cheshire, S., Boucadair, M., Penno, R., and
              P. Selkirk, "Port Control Protocol", RFC 6887, April 2013.

   [RFC6020]  Bjorklund, M., Ed., "YANG - A Data Modeling Language for
              the Network Configuration Protocol (NETCONF)", RFC 6020,
              October 2010.

   [draft-ietf-netmod-yang-json-01]
              Lhotka, L., "JSON Encoding of Data Modeled with YANG",
              October 2014.

Authors' Addresses

   Xiao Shi
   Yale University
   51 Prospect Street
   New Haven, CT  06511
   USA

   Email: xiao.shi@yale.edu





Shi & Yang               Expires April 30, 2015                [Page 22]

Internet-Draft      Modeling JSON Messages Using YANG       October 2014


   Y. Richard Yang
   Yale University
   51 Prospect St
   New Haven  CT
   USA

   Email: yang.r.yang@gmail.com












































Shi & Yang               Expires April 30, 2015                [Page 23]