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