BUG-4062: Flows,Groups,Meters not getting deleted during switch flap
[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             // BE-RECON: Modification for including stale-flow for Reconciliation
122             list stale-flow {
123                 key "id";
124
125                 leaf id {
126                     type flow-id;
127                 }
128
129                 uses flow:flow;
130             }
131         }
132     }
133     
134     grouping meters {
135         description "Openflow meter list.";
136         list meter {
137             key "meter-id";
138             uses meter:meter;
139         }
140         // BE-RECON: Modification for including stale-flow for Reconciliation
141         list stale-meter {
142             key "meter-id";
143             uses meter:meter;
144         }
145     }
146
147     grouping ip-address-grouping {
148         description "Additional ip address info referring to device interface which connects to controller";
149         leaf ip-address {
150             description "IP address of a flow capable node.";
151             type inet:ip-address;
152         }
153     }
154
155     grouping flow-node {
156         description "Openflow node structure = device";
157         leaf manufacturer {
158             type string;
159         }
160         leaf hardware {
161             type string;
162         }
163         leaf software {
164             type string;
165         }
166         leaf serial-number {
167             type string;
168         }
169         leaf description {
170             type string;
171         }
172
173         uses tables;
174         uses group:groups;
175         uses meters;
176         uses ip-address-grouping;
177         // TODO: ports
178         
179         container supported-match-types {
180             list match-type {
181                 key "match";
182                 uses feature;
183                 leaf match {
184                     type string; // FIXME: Add identity
185                 }
186                 
187             }
188         }
189         
190         container supported-instructions {
191             list instruction-type {
192                 key "instruction";
193                 uses feature;
194                 leaf instruction {
195                     type string; // FIXME: Add identity
196                 }
197             }
198         }
199
200         container supported-actions {
201             list action-type {
202                 key "action";
203                 uses feature;
204
205                 leaf action {
206                     type string; // FIXME: Add identity
207                 }
208             }
209         }
210         
211         container switch-features {
212             
213             leaf max_buffers {
214                 type uint32;
215             }
216             
217             leaf max_tables {
218                 type uint8;
219             }
220             
221             leaf-list capabilities {
222                 type identityref {
223                     base feature-capability;
224                 }
225             }
226             
227         }
228     }
229
230     grouping flow-node-connector {
231         description "Wrapper of openflow port. TODO::simplify/rename";
232         uses port:flow-capable-port;
233     }
234
235     augment "/inv:nodes/inv:node" {
236         ext:augment-identifier "flow-capable-node";
237         description "Top attach point of openflow node into node inventory tree.";
238         uses flow-node;
239     }
240
241     augment "/inv:nodes/inv:node/inv:node-connector" {
242         ext:augment-identifier "flow-capable-node-connector";
243         description "Openflow port into inventory tree.";
244         uses flow-node-connector;
245     }
246
247     augment "/inv:node-updated" {
248         ext:augment-identifier "flow-capable-node-updated";
249         description "Openflow node into node notification.";
250         uses flow-node;
251     }
252
253     augment "/inv:node-updated/inv:node-connector" {
254         //ext:identical-augment "flow-capable-node-connector";
255         ext:augment-identifier "flow-capable-node-connector-update-fields";
256         description "Openflow port into node notification.";
257         uses flow-node-connector;
258     }
259     
260     augment "/inv:node-connector-updated" {
261         ext:augment-identifier "flow-capable-node-connector-updated";
262         description "Openflow port into node-connector notification.";
263         uses flow-node-connector;
264     }
265
266     augment "/inv:nodes/inv:node/table" {
267         ext:augment-identifier "flow-hash-id-mapping";
268     description "Flow is identified by match and priority on device. So Operational/DS
269         has to simulate that behavior and contract between FlowId and match+priority
270         identification should represent Flow hashCode. Flow has to contain only
271         match priority and flowCookie for create a hashCode";
272         list flow-hash-id-map {
273             key "hash";
274             leaf hash {
275                 type string;
276             }
277             leaf flow-id {
278                 type flow-id;
279             }
280         }
281     }
282 }