This commit consists of:
1) Dockerizing the netconf server
2) Update proto2yang to support module imports
3) Provide a set of yang modules derived from the proto files in voltha.
   These files as well as the slight mmodifications to the proto files are
   provided in the experiments/netconf/proto2yang directory
4) Code to automatically pull proto files from voltha into the netconf server,
   compiles them and produce the yang equivalent files.
5) Add a getvoltha netconf API to provide voltha state information (basic at
   this time).  There is potential to make this generic once we experiment
   with additional APIs

Change-Id: I94f3a1f871b8025ad675d5f9b9b626d1be8b8d36
diff --git a/experiments/netconf/proto2yang/ietf-http.yang b/experiments/netconf/proto2yang/ietf-http.yang
new file mode 100644
index 0000000..3d9cf2c
--- /dev/null
+++ b/experiments/netconf/proto2yang/ietf-http.yang
@@ -0,0 +1,158 @@
+
+module ietf-http {
+
+
+    namespace "urn:opencord:params:xml:ns:voltha:ietf-http";
+    prefix http;
+
+
+    organization "CORD";
+    contact
+        " Any name";
+
+    description
+        "";
+
+    revision "2016-11-15" {
+        description "Initial revision.";
+        reference "reference";
+    }
+
+
+    grouping HttpRule {
+        description
+            "`HttpRule` defines the mapping of an RPC method to one or more HTTP REST API
+ methods. The mapping determines what portions of the request message are
+ populated from the path, query parameters, or body of the HTTP request.  The
+ mapping is typically specified as an `google.api.http` annotation, see
+  google api annotations.proto  for details.
+
+ The mapping consists of a mandatory field specifying a path template and an
+ optional `body` field specifying what data is represented in the HTTP request
+ body. The field name for the path indicates the HTTP method. Example:
+
+ ```
+ package google.storage.v2;
+
+ import  google api annotations.proto ;
+
+ service Storage  
+   rpc CreateObject(CreateObjectRequest) returns (Object)  
+     option (google.api.http)  
+       post:   v2  bucket_name=buckets    objects 
+       body:  object 
+      ;
+    ;
+  
+ ```
+
+ Here `bucket_name` and `object` bind to fields of the request message
+ `CreateObjectRequest`.
+
+ The rules for mapping HTTP path, query parameters, and body fields
+ to the request message are as follows:
+
+ 1. The `body` field specifies either ` ` or a field path, or is
+    omitted. If omitted, it assumes there is no HTTP body.
+ 2. Leaf fields (recursive expansion of nested messages in the
+    request) can be classified into three types:
+     (a) Matched in the URL template.
+     (b) Covered by body (if body is ` `, everything except (a) fields;
+         else everything under the body field)
+     (c) All other fields.
+ 3. URL query parameters found in the HTTP request are mapped to (c) fields.
+ 4. Any body sent with an HTTP request can contain only (b) fields.
+
+ The syntax of the path template is as follows:
+
+     Template =     Segments   Verb   ;
+     Segments = Segment       Segment   ;
+     Segment  =     |      | LITERAL | Variable ;
+     Variable =     FieldPath    =  Segments       ;
+     FieldPath = IDENT    .  IDENT   ;
+     Verb     =  :  LITERAL ;
+
+ ` ` matches a single path component, `  ` zero or more path components, and
+ `LITERAL` a constant.  A `Variable` can match an entire path as specified
+ again by a template; this nested template must not contain further variables.
+ If no template is given with a variable, it matches a single path component.
+ The notation ` var ` is henceforth equivalent to ` var=  `.
+
+ Use CustomHttpPattern to specify any HTTP method that is not included in the
+ pattern field, such as HEAD, or     to leave the HTTP method unspecified for
+ a given URL path rule. The wild-card rule is useful for services that provide
+ content to Web (HTML) clients.";
+        leaf get {
+            type  string; 
+            description
+                "Used for listing and getting information about resources.";
+        }
+
+        leaf put {
+            type  string; 
+            description
+                "Used for updating a resource.";
+        }
+
+        leaf post {
+            type  string; 
+            description
+                "Used for creating a resource.";
+        }
+
+        leaf delete {
+            type  string; 
+            description
+                "Used for deleting a resource.";
+        }
+
+        leaf patch {
+            type  string; 
+            description
+                "Used for updating a resource.";
+        }
+
+        container custom {
+            uses  CustomHttpPattern;
+
+            description
+                "Custom pattern is used for defining custom verbs.";
+        }
+
+        leaf body {
+            type  string; 
+            description
+                "The name of the request field whose value is mapped to the HTTP body, or
+ ` ` for mapping all fields not captured by the path pattern to the HTTP
+ body.";
+        }
+
+        list additional_bindings {
+            key "get";
+            uses  HttpRule;
+
+            description
+                "Additional HTTP bindings for the selector. Nested bindings must not
+ specify a selector and must not contain additional bindings.";
+        }
+
+    }
+
+    grouping CustomHttpPattern {
+        description
+            "A custom pattern is used for defining custom HTTP verb.";
+        leaf kind {
+            type  string; 
+            description
+                "The name of this custom HTTP verb.";
+        }
+
+        leaf path {
+            type  string; 
+            description
+                "The path matched by this custom verb.";
+        }
+
+    }
+
+}
\ No newline at end of file