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-device.yang b/experiments/netconf/proto2yang/ietf-device.yang
new file mode 100644
index 0000000..0a37cf3
--- /dev/null
+++ b/experiments/netconf/proto2yang/ietf-device.yang
@@ -0,0 +1,349 @@
+
+module ietf-device {
+
+
+ namespace "urn:opencord:params:xml:ns:voltha:ietf-device";
+ prefix device;
+
+ import ietf-openflow_13 { prefix openflow_13 ; }
+ import ietf-common { prefix common ; }
+ import ietf-any { prefix any ; }
+
+ organization "CORD";
+ contact
+ " Any name";
+
+ description
+ "";
+
+ revision "2016-11-15" {
+ description "Initial revision.";
+ reference "reference";
+ }
+
+
+ grouping DeviceType {
+ description
+ "A Device Type";
+ leaf id {
+ type string;
+ description
+ "Unique name for the device type";
+ }
+
+ leaf adapter {
+ type string;
+ description
+ "Name of the adapter that handles device type";
+ }
+
+ leaf accepts_bulk_flow_update {
+ type boolean;
+ description
+ "Capabilitities";
+ }
+
+ leaf accepts_add_remove_flow_updates {
+ type boolean;
+ description
+ "";
+ }
+
+ }
+
+ grouping DeviceTypes {
+ description
+ "A plurality of device types";
+ list items {
+ key "id";
+ uses DeviceType;
+
+ description
+ "";
+ }
+
+ }
+
+ grouping Port {
+ description
+ "";
+ leaf port_no {
+ type uint32;
+ description
+ "Device-unique port number";
+ }
+
+ leaf label {
+ type string;
+ description
+ "Arbitrary port label";
+ }
+
+ leaf type {
+ type PortType;
+ description
+ "Type of port";
+ }
+
+ leaf admin_state {
+ type common:AdminState;
+
+ description
+ "";
+ }
+
+ leaf oper_status {
+ type common:OperStatus;
+
+ description
+ "";
+ }
+
+ leaf device_id {
+ type string;
+ description
+ "Unique .id of device that owns this port";
+ }
+
+
+ typedef PortType {
+ type enumeration {
+ enum UNKNOWN {
+ description "";
+ }
+ enum ETHERNET_NNI {
+ description "";
+ }
+ enum ETHERNET_UNI {
+ description "";
+ }
+ enum PON_OLT {
+ description "";
+ }
+ enum PON_ONU {
+ description "";
+ }
+ }
+ description
+ "";
+ }
+
+ grouping PeerPort {
+ description
+ "";
+ leaf device_id {
+ type string;
+ description
+ "";
+ }
+
+ leaf port_no {
+ type uint32;
+ description
+ "";
+ }
+
+ }
+
+ }
+
+ grouping Ports {
+ description
+ "";
+ list items {
+ key "port_no";
+ uses Port;
+
+ description
+ "";
+ }
+
+ }
+
+ grouping Device {
+ description
+ "A Physical Device instance";
+ leaf id {
+ type string;
+ description
+ "Voltha's device identifier";
+ }
+
+ leaf type {
+ type string;
+ description
+ "Device type, refers to one of the registered device types";
+ }
+
+ leaf root {
+ type boolean;
+ description
+ "Is this device a root device. Each logical switch has one root
+ device that is associated with the logical flow switch.";
+ }
+
+ leaf parent_id {
+ type string;
+ description
+ "Parent device id, in the device tree (for a root device, the parent_id
+ is the logical_device.id)";
+ }
+
+ leaf parent_port_no {
+ type uint32;
+ description
+ "";
+ }
+
+ leaf vendor {
+ type string;
+ description
+ "Vendor, version, serial number, etc.";
+ }
+
+ leaf model {
+ type string;
+ description
+ "";
+ }
+
+ leaf hardware_version {
+ type string;
+ description
+ "";
+ }
+
+ leaf firmware_version {
+ type string;
+ description
+ "";
+ }
+
+ leaf software_version {
+ type string;
+ description
+ "";
+ }
+
+ leaf serial_number {
+ type string;
+ description
+ "";
+ }
+
+ leaf adapter {
+ type string;
+ description
+ "Addapter that takes care of device";
+ }
+
+ leaf vlan {
+ type uint32;
+ description
+ "Device contact on vlan (if 0, no vlan)";
+ }
+
+ leaf mac_address {
+ type string;
+ description
+ "Device contact MAC address (format: xx:xx:xx:xx:xx:xx )";
+ }
+
+ leaf ipv4_address {
+ type string;
+ description
+ "Device contact IPv4 address (format: a.b.c.d or can use hostname too)";
+ }
+
+ leaf ipv6_address {
+ type string;
+ description
+ "Device contact IPv6 address using the canonical string form
+ ( xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx )";
+ }
+
+
+ leaf admin_state {
+ type common:AdminState;
+
+ description
+ "";
+ }
+
+ leaf oper_status {
+ type common:OperStatus;
+
+ description
+ "";
+ }
+
+ leaf connect_status {
+ type common:ConnectStatus;
+
+ description
+ "";
+ }
+
+ container custom {
+ uses any:Any;
+
+ description
+ "Device type specific attributes
+TODO additional common attribute here";
+ }
+
+ list ports {
+ key "port_no";
+ uses Port;
+
+ description
+ "";
+ }
+
+ container flows {
+ uses openflow_13:Flows;
+
+ description
+ "";
+ }
+
+ container flow_groups {
+ uses openflow_13:FlowGroups;
+
+ description
+ "";
+ }
+
+ grouping ProxyAddress {
+ description
+ "";
+ leaf device_id {
+ type string;
+ description
+ "Which device to use as proxy to this device";
+ }
+
+ leaf channel_id {
+ type uint32;
+ description
+ "Sub-address within proxy device";
+ }
+
+ }
+
+ }
+
+ grouping Devices {
+ description
+ "";
+ list items {
+ key "id";
+ uses Device;
+
+ description
+ "";
+ }
+
+ }
+
+}
\ No newline at end of file