blob: 16186fa1c113ba2b49b4c3fa3c4c85c1b422cb8e [file] [log] [blame]
khenaidooabad44c2018-08-03 16:58:35 -04001syntax = "proto3";
2
3option go_package = "github.com/opencord/voltha-go/protos/voltha";
4
5package voltha;
6
7import "meta.proto";
8import "google/protobuf/any.proto";
9import "common.proto";
10import "openflow_13.proto";
11import "yang_options.proto";
12
13
14// A Device Type
15message DeviceType {
16
17 // Unique name for the device type
18 string id = 1;
19
20 // Unique venor id for the device type applicable to ONU
21 // 4 bytes of vendor id from ONU serial number
22 string vendor_id = 5;
23
24 repeated string vendor_ids = 6;
25
26 // Name of the adapter that handles device type
27 string adapter = 2;
28
29 // Capabilitities
30
31 bool accepts_bulk_flow_update = 3;
32 bool accepts_add_remove_flow_updates = 4;
Arun Arora5f89fb62018-12-19 08:25:54 +000033 bool accepts_direct_logical_flows_update = 7;
khenaidooabad44c2018-08-03 16:58:35 -040034
35}
36
37// A plurality of device types
38message DeviceTypes {
39 repeated DeviceType items = 1;
40}
41
42message PmConfig {
43 enum PmType {
44 COUNTER = 0;
45 GUAGE = 1;
46 STATE = 2;
47 }
48 string name = 1;
49 PmType type = 2;
50 bool enabled = 3; // Whether or not this metric makes it to Kafka
51 uint32 sample_freq = 4; // Sample rate in 10ths of a second
52}
53
54message PmGroupConfig {
55 string group_name = 1;
56 uint32 group_freq = 2; // Frequency applicable to the grop
57 bool enabled = 3; // Enable/disable group level only
58 repeated PmConfig metrics = 4;
59}
60
61message PmConfigs {
62 string id = 1; // To work around a chameleon POST bug
63 uint32 default_freq = 2; // Default sample rate
64 // Forces group names and group semantics
65 bool grouped = 3 [(access) = READ_ONLY];
66 // Allows Pm to set an individual sample frequency
67 bool freq_override = 4 [(access) = READ_ONLY];
68 repeated PmGroupConfig groups = 5; // The groups if grouped is true
69 repeated PmConfig metrics = 6; // The metrics themselves if grouped is false.
70}
71
72// Describes instance of software image on the device
73message Image {
74 string name = 1; // software patch name
75 string version = 2; // version of software
76 string hash = 3; // md5 hash
77 string install_datetime = 4; // combined date and time expressed in UTC.
78 // use ISO 8601 format for date and time
79
80 // The active software image is one that is currently loaded and executing
81 // in the ONU or circuit pack. Under normal operation, one software image
82 // is always active while the other is inactive. Under no circumstances are
83 // both software images allowed to be active at the same time
84 bool is_active = 5; // True if the image is active
85
86 // The committed software image is loaded and executed upon reboot of the
87 // ONU and/or circuit pack. During normal operation, one software image is
88 // always committed, while the other is uncommitted.
89 bool is_committed = 6; // True if the image is committed
90
91 // A software image is valid if it has been verified to be an executable
92 // code image. The verification mechanism is not subject to standardization;
93 // however, it should include at least a data integrity (e.g., CRC) check of
94 // the entire code image.
95 bool is_valid = 7; // True if the image is valid
96}
97
98// List of software on the device
99message Images {
100 repeated Image image = 1;
101}
102
103message ImageDownload {
104 option (yang_child_rule) = MOVE_TO_PARENT_LEVEL;
105
106 enum ImageDownloadState {
107 DOWNLOAD_UNKNOWN = 0;
108 DOWNLOAD_SUCCEEDED = 1;
109 DOWNLOAD_REQUESTED = 2;
110 DOWNLOAD_STARTED = 3;
111 DOWNLOAD_FAILED = 4;
112 DOWNLOAD_UNSUPPORTED = 5;
113 }
114
115 enum ImageDownloadFailureReason {
116 NO_ERROR = 0;
117 INVALID_URL = 1;
118 DEVICE_BUSY = 2;
119 INSUFFICIENT_SPACE = 3;
120 UNKNOWN_ERROR = 4;
121 }
122
123 enum ImageActivateState {
124 IMAGE_UNKNOWN = 0;
125 IMAGE_INACTIVE = 1;
126 IMAGE_ACTIVATE = 2;
127 IMAGE_ACTIVE = 3;
128 IMAGE_REVERT = 4;
129 }
130
131 // Device Identifier
132 string id = 1;
133
134 // Image unique identifier
135 string name = 2;
136
137 // URL where the image is available
138 // should include username password
139 string url = 3;
140
141 // CRC of the image to be verified aginst
142 uint32 crc = 4;
143
144 // Download state
145 ImageDownloadState state = 5;
146
147 // Downloaded version
148 string image_version = 6;
149
150 // Bytes downloaded
151 uint32 downloaded_bytes = 7;
152
153 // Download failure reason
154 ImageDownloadFailureReason reason= 8;
155
156 // Additional info
157 string additional_info = 9;
158
159 // Save current configuration
160 bool save_config = 10;
161
162 // Image local location
163 string local_dir = 11;
164
165 // Image activation state
166 ImageActivateState image_state = 12;
167}
168
169message ImageDownloads {
170 repeated ImageDownload items = 2;
171}
172
173message Port {
174 option (voltha.yang_child_rule) = MOVE_TO_PARENT_LEVEL;
175
176 enum PortType {
177 UNKNOWN = 0;
178 ETHERNET_NNI = 1;
179 ETHERNET_UNI = 2;
180 PON_OLT = 3;
181 PON_ONU = 4;
182 VENET_OLT = 5;
183 VENET_ONU = 6;
184 }
185
186 uint32 port_no = 1; // Device-unique port number
187
188 string label = 2; // Arbitrary port label
189
190 PortType type = 3; // Type of port
191
192 AdminState.AdminState admin_state = 5;
193
194 OperStatus.OperStatus oper_status = 6;
195
196 string device_id = 7; // Unique .id of device that owns this port
197
198 message PeerPort {
199 string device_id = 1;
200 uint32 port_no = 2;
201 }
202 repeated PeerPort peers = 8;
203
204}
205
206message Ports {
207 repeated Port items = 1;
208}
209
210// A Physical Device instance
211message Device {
212 option (voltha.yang_child_rule) = MOVE_TO_PARENT_LEVEL;
213
214 // Voltha's device identifier
215 string id = 1 [(access) = READ_ONLY];
216
217 // Device type, refers to one of the registered device types
218 string type = 2 [(access) = READ_ONLY];
219
220 // Is this device a root device. Each logical switch has one root
221 // device that is associated with the logical flow switch.
222 bool root = 3 [(access) = READ_ONLY];
223
224 // Parent device id, in the device tree (for a root device, the parent_id
225 // is the logical_device.id)
226 string parent_id = 4 [(access) = READ_ONLY];
227 uint32 parent_port_no = 20 [(access) = READ_ONLY];
228
229 // Vendor, version, serial number, etc.
230 string vendor = 5 [(access) = READ_ONLY];
231 string model = 6 [(access) = READ_ONLY];
232 string hardware_version = 7 [(access) = READ_ONLY];
233 string firmware_version = 8 [(access) = READ_ONLY];
234 // List of software on the device
235 Images images = 9 [(access) = READ_ONLY];
236 string serial_number = 10 [(access) = READ_ONLY];
237 string vendor_id = 24 [(access) = READ_ONLY];
238
239 // Addapter that takes care of device
240 string adapter = 11 [(access) = READ_ONLY];
241
242 // Device contact on vlan (if 0, no vlan)
243 uint32 vlan = 12;
244
245 message ProxyAddress {
246 string device_id = 1; // Which device to use as proxy to this device
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400247 string device_type = 2; // The device type of the proxy device to use as the adapter name
248 uint32 channel_id = 3; // Sub-address within proxy
249 uint32 channel_group_id = 4; // Channel Group index
250 string channel_termination = 5; // Channel Termination name
251 uint32 onu_id = 6; // onu identifier; optional
252 uint32 onu_session_id = 7; // session identifier for the ONU; optional
khenaidooabad44c2018-08-03 16:58:35 -0400253 };
254
khenaidoob9203542018-09-17 22:56:37 -0400255 // Device contact MAC address (format: "xx:xx:xx:xx:xx:xx")
256 string mac_address = 13;
khenaidooabad44c2018-08-03 16:58:35 -0400257
khenaidoob9203542018-09-17 22:56:37 -0400258 oneof address {
khenaidooabad44c2018-08-03 16:58:35 -0400259 // Device contact IPv4 address (format: "a.b.c.d" or can use hostname too)
260 string ipv4_address = 14;
261
262 // Device contact IPv6 address using the canonical string form
263 // ("xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx")
264 string ipv6_address = 15;
265
266 string host_and_port = 21;
267
268 };
269 string extra_args = 23; // Used to pass additional device specific arguments
270
271 ProxyAddress proxy_address = 19;
272
273 AdminState.AdminState admin_state = 16;
274
275 OperStatus.OperStatus oper_status = 17 [(access) = READ_ONLY];
276
277 string reason = 22 [(access) = READ_ONLY]; // Used in FAILED state
278
279 ConnectStatus.ConnectStatus connect_status = 18 [(access) = READ_ONLY];
280
281 // TODO additional common attribute here
282
283 // Device type specific attributes
284 google.protobuf.Any custom = 64;
285
286 repeated Port ports = 128 [(child_node) = {key: "port_no"}];
287 openflow_13.Flows flows = 129 [(child_node) = {}];
288 openflow_13.FlowGroups flow_groups = 130 [(child_node) = {}];
289 // PmConfigs will eventually converted to a child node of the
290 // device to falicitata callbacks and to simplify manipulation.
291 PmConfigs pm_configs = 131 [(child_node) = {}];
292
293 repeated ImageDownload image_downloads = 133 [(child_node) = {key: "name"}];
294}
295
296message Devices {
297 repeated Device items = 1;
298}