External api proposal
[openflowplugin.git] / model / model-flow-service / src / main / yang / flow-node-inventory.yang
1 module flow-node-inventory {
2     namespace "urn:opendaylight:flow:inventory";
3     prefix flownode;
4
5     import yang-ext {prefix ext; revision-date "2013-07-09";}
6     import ietf-inet-types {prefix inet; revision-date "2010-09-24";}
7     import opendaylight-port-types {prefix port;revision-date "2013-09-25";}
8     import opendaylight-inventory {prefix inv;revision-date "2013-08-19";}
9     import opendaylight-table-types {prefix table;revision-date "2013-10-26";}
10     import opendaylight-flow-types {prefix flow;revision-date "2013-10-26";}
11     import opendaylight-group-types {prefix group;revision-date "2013-10-18";}
12     import opendaylight-meter-types {prefix meter;revision-date "2013-09-18";}
13     
14     description "Flow Capable Node extensions to the Inventory model";
15
16     revision "2013-08-19" {
17         description "added descriptions";
18     }
19     
20     identity feature-capability {
21     }
22     
23     identity flow-feature-capability-flow-stats {
24         description "Flow statistics"; 
25         base feature-capability;      
26     }
27     
28     identity flow-feature-capability-table-stats {
29         description "Table statistics";
30         base feature-capability;        
31     }
32     
33     identity flow-feature-capability-port-stats {
34         description "Port statistics";
35         base feature-capability;        
36     }
37     
38     identity flow-feature-capability-stp {
39         description "802.1d spanning tree";
40         base feature-capability;        
41     }
42     
43     identity flow-feature-capability-reserved {
44         description "Reserved, must be zero";
45         base feature-capability;        
46     }
47     
48     identity flow-feature-capability-ip-reasm {
49         description "Can reassemble IP fragments";
50         base feature-capability;        
51     }
52     
53     identity flow-feature-capability-queue-stats {
54         description "Queue statistics";
55         base feature-capability;        
56     }
57     
58     identity flow-feature-capability-arp-match-ip {
59         description "Match IP addresses in ARP pkts";
60         base feature-capability;        
61     }
62     
63     identity flow-feature-capability-group-stats {
64         description "Group statistics";
65         base feature-capability;        
66     }
67     
68     identity flow-feature-capability-port-blocked {
69         description "Switch will block looping ports";
70         base feature-capability;        
71     }
72     
73     grouping feature {
74         description "Features supported by openflow device.";
75         leaf support-state {
76             type inv:support-type;
77         }
78     }
79
80     grouping queue {
81         leaf queue-id {
82             type uint32;
83             description "id for the specific queue";
84             mandatory true; 
85         }
86         container properties {
87             leaf minimum-rate {
88                 type uint32;
89             }
90             leaf maximum-rate{
91                 type uint32;
92             }
93         }
94     }
95
96     typedef flow-id {
97         description "MD-SAL identifier of openflow flow. ";
98         type inet:uri;
99     }
100
101     grouping tables {
102         description "Openflow table structure. Here flows are contained.";
103         list table {
104             key "id"; 
105     
106             leaf id {
107                     type uint8;
108             }            
109     
110             uses table:table-features;
111     
112             list flow {
113                 key "id"; 
114     
115                 leaf id {
116                     type flow-id;
117                 }           
118     
119                 uses flow:flow;
120             }
121         }
122     }
123     
124     grouping meters {
125         description "Openflow meter list.";
126         list meter {
127             key "meter-id";
128             uses meter:meter;
129         }
130     }
131
132     grouping ip-address-grouping {
133         description "Additional ip address info referring to device interface which connects to controller";
134         leaf ip-address {
135             description "IP address of a flow capable node.";
136             type inet:ip-address;
137         }
138     }
139
140     grouping flow-node {
141         description "Openflow node structure = device";
142         leaf manufacturer {
143             type string;
144         }
145         leaf hardware {
146             type string;
147         }
148         leaf software {
149             type string;
150         }
151         leaf serial-number {
152             type string;
153         }
154         leaf description {
155             type string;
156         }
157
158         uses tables;
159         uses group:groups;
160         uses meters;
161         uses ip-address-grouping;
162         // TODO: ports
163         
164         container supported-match-types {
165             list match-type {
166                 key "match";
167                 uses feature;
168                 leaf match {
169                     type string; // FIXME: Add identity
170                 }
171                 
172             }
173         }
174         
175         container supported-instructions {
176             list instruction-type {
177                 key "instruction";
178                 uses feature;
179                 leaf instruction {
180                     type string; // FIXME: Add identity
181                 }
182             }
183         }
184
185         container supported-actions {
186             list action-type {
187                 key "action";
188                 uses feature;
189
190                 leaf action {
191                     type string; // FIXME: Add identity
192                 }
193             }
194         }
195         
196         container switch-features {
197             
198             leaf max_buffers {
199                 type uint32;
200             }
201             
202             leaf max_tables {
203                 type uint8;
204             }
205             
206             leaf-list capabilities {
207                 type identityref {
208                     base feature-capability;
209                 }
210             }
211             
212         }
213     }
214
215     grouping flow-node-connector {
216         description "Wrapper of openflow port. TODO::simplify/rename";
217         uses port:flow-capable-port;
218     }
219
220     augment "/inv:nodes/inv:node" {
221         ext:augment-identifier "flow-capable-node";
222         description "Top attach point of openflow node into node inventory tree.";
223         uses flow-node;
224     }
225
226     augment "/inv:nodes/inv:node/inv:node-connector" {
227         ext:augment-identifier "flow-capable-node-connector";
228         description "Openflow port into inventory tree.";
229         uses flow-node-connector;
230     }
231
232     augment "/inv:node-updated" {
233         ext:augment-identifier "flow-capable-node-updated";
234         description "Openflow node into node notification.";
235         uses flow-node;
236     }
237
238     augment "/inv:node-updated/inv:node-connector" {
239         //ext:identical-augment "flow-capable-node-connector";
240         ext:augment-identifier "flow-capable-node-connector-update-fields";
241         description "Openflow port into node notification.";
242         uses flow-node-connector;
243     }
244     
245     augment "/inv:node-connector-updated" {
246         ext:augment-identifier "flow-capable-node-connector-updated";
247         description "Openflow port into node-connector notification.";
248         uses flow-node-connector;
249     }
250
251     augment "/inv:nodes/inv:node/table" {
252         ext:augment-identifier "flow-hash-id-mapping";
253     description "Flow is identified by match and priority on device. So Operational/DS
254         has to simulate that behavior and contract between FlowId and match+priority
255         identification should represent Flow hashCode. Flow has to contain only
256         match priority and flowCookie for create a hashCode";
257         list flow-hash-id-map {
258             key "hash";
259             leaf hash {
260                 type string;
261             }
262             leaf flow-id {
263                 type flow-id;
264             }
265         }
266     }
267 }