   module ietf-sd-onos-common-types {
     namespace "urn:ietf:params:xml:ns:yang:ietf-sd-onos-common-types";
     prefix types ;
     /*
     import ietf-inet-types{
        prefix inet;
        }
     import ietf-yang-types {
       prefix yang-types;
       }
     */
     organization "";
     contact "";

     description
       "Defines common basic types of L3VPN.";

     revision "2015-12-16" {
       reference "";
     }

     typedef admin-status {
       type enumeration {
         enum admin-up {
           value 0 ;
           description "admin up, the operate-status is depend on the real
   running status ." ;
         }
         enum admin-down {
           value 1 ;
           description "admin down,the operate-status is forced to down no
   matter what the real status is" ;
         }
         enum config-up {
           value 2 ;
           description "the operate-status is forced to up no matter what
   the real status is." ;
         }
       }
       default admin-up;
       description
         "The administration status of the service.";
     }

     typedef notification-status {
       type enumeration {
         enum up {
           value 0 ;
           description "up." ;
         }
         enum down {
           value 1 ;
           description "down." ;
         }
       }
       default up;
       description
         "The notification status of the service.";
     }

     typedef notification-type {
       type enumeration {
         enum ne{
           value 0 ;
           description "ncd change." ;
         }
         enum link{
           value 1 ;
           description "link change." ;
         }
         enum ltp{
           value 2 ;
           description "ltp change." ;
         }
       }
       default ltp;
       description
         "The notification-type of the service.";
     }

     typedef operate-status {
       type enumeration {
         enum operate-up {
           value 0 ;
           description "operate up." ;
         }
         enum operate-down {
           value 1 ;
           description "operate down." ;
         }
       }
       default operate-up;
       description
         "The operation status of the service.";
     }

      grouping command-result {
         description
           "Reusable container of the result of the command.";
        container command-result {
           description
             "The result of the command.";
          leaf result {
             type int8;
             description
               "1 : success, 2 : failed, 3 : partly failed" ;
         }
         container success-resources {
           description
             "The resources those are available." ;
           list success-resource-list {
             description
               "The resource list shows those are available." ;
             leaf resource-id {
               type string;
               description
                 "The available resource id." ;
             }
           }
         }
         container failed-resources {
           description
             "The resources those are failed." ;
           list failed-resource-list {
             description
               "The resources list shows those are failed." ;
             leaf resource-id {
               type string;
               description
                 "The failed resources ids." ;
             }
             leaf error-code {
               type string;
               description
                 "The error code." ;
             }
           }
         }
       }
     }
   }
