1351f9e38c8cd7e3f02d5c70b70b1dfd79b8043c
[honeycomb.git] / v3po / api / src / main / yang / vpp-classifier.yang
1 module vpp-classifier {
2   yang-version 1;
3   namespace "urn:opendaylight:params:xml:ns:yang:vpp:classifier";
4   prefix "vpp-classifier";
5
6   revision "2015-06-03" {
7     description
8       "Initial revision of model for VPP packet classifier.
9       The model can be used ony to implement ACLs.
10       Other classify table usages are not supported yet,
11       see https://jira.fd.io/browse/VPP-203 for details.";
12     reference
13       "https://wiki.fd.io/view/VPP/Introduction_To_N-tuple_Classifiers";
14   }
15
16   import ietf-yang-types {
17     prefix "yang";
18   }
19
20   typedef classify-table-ref {
21     type leafref {
22       path "/vpp-classifier:vpp-classifier/classify-table/name";
23     }
24     description
25       "This type is used by data models that need to reference
26        configured classify tables.";
27   }
28
29   typedef packet-handling-action {
30     type enumeration {
31       enum "deny" {
32         // by VPP convention, first neighbour node (at index 0) is a drop node
33         value 0;
34       }
35       enum "permit" {
36         value -1; // indicates that the next node not set
37       }
38     }
39   }
40
41   typedef vpp-node {
42     type union {
43       // FIXME: enable after VPP-203 is fixed
44       // type string; // name of vpp-node neighbour, TODO: base node also needs to be defined
45       type packet-handling-action;
46     }
47     description
48       "Defines VPP node reference using relative node name or packet handling action.";
49   }
50
51   typedef opaque-index {
52     type union {
53       type vpp-node;
54       type uint32;
55     }
56     description
57       "Defines opaque-index type - metadata that can be attached to session-hit packets.
58        Vpp nodes can't be referenced by index, because node indexes might change after vpp restart.";
59   }
60
61   grouping classify-session-attributes {
62     description
63       "Defines classify session attributes that are mapped to classify_add_del_session
64        and classify_session_details messages parameters.";
65
66     leaf hit_next {
67       type vpp-node;
68       mandatory true;
69       description
70         "Vpp node to which packet will be send when it produces a match.";
71     }
72     leaf opaque_index {
73       type opaque-index;
74     }
75     leaf advance {
76       type int32;
77       default 0;
78       description
79         "Nodes like ip4/6-classify use the parameter to \"consume\" networking layer.
80         Example: tunnel decapsulation.";
81     }
82   }
83
84   grouping classify-table-base-attributes {
85     description
86       "Defines classify table attributes that are mapped to classify_add_del_table message parameters.";
87
88     leaf nbuckets {
89       mandatory true;
90       type uint32;
91       description
92         "Used by classifier hashing algorithm. It is not possible to resize the bucket array,
93         therefore suggested value is approximate number of expected entries.";
94     }
95     leaf memory_size {
96       mandatory true;
97       type uint32;
98       description
99         "Memory size for classify table and its entries.";
100     }
101     leaf skip_n_vectors {
102       type uint32;
103       default 0;
104       description
105         "Number of 16 byte vectors to be skipped before applying mask.";
106     }
107     leaf next_table {
108       type classify-table-ref;
109       description
110         "Reference to the next classify table. Required when multiple table chaining is used.";
111     }
112     leaf miss_next {
113       mandatory true;
114       type vpp-node;
115       description
116         "Vpp node to which packet will be send when it falis to produce a match";
117     }
118     leaf mask {
119       type yang:hex-string;
120       mandatory true;
121       description
122         "Defines match mask (multiple of 16 bytes)";
123     }
124
125     list classify-session {
126       key "match";
127
128       leaf match {
129         type yang:hex-string;
130         description
131           "Defines actual value to be matched that is
132            a byte vector, which length is multiple of 16 bytes";
133
134         must "string-length(match) = string-length(../../mask)" {
135           error-message
136             "Match length is not equal to classify table mask length.";
137           description
138             "Match length must be equal to classify table mask length.";
139         }
140       }
141
142       uses classify-session-attributes;
143     }
144   }
145
146   grouping classify-table-operational-attributes {
147     description
148       "Defines classify table operational attributes (present in classify_table_info_reply message
149        but not in classify_add_del_table).";
150
151     leaf active_sessions {
152       type uint32;
153       config false;
154       description
155         "Number of sessions defined for the classify table.";
156     }
157   }
158
159   container vpp-classifier {
160     list classify-table {
161       key "name";
162
163       leaf name {
164         type string;
165         description
166           "Hides classify table identifier managed by vpp.";
167       }
168
169       uses classify-table-base-attributes;
170     }
171   }
172
173   container vpp-classifier-state {
174     config false;
175
176     list classify-table {
177       key "name";
178
179       leaf name {
180         type string;
181         description
182           "Hides classify table identifier managed by vpp.";
183       }
184
185       uses classify-table-base-attributes;
186       uses classify-table-operational-attributes;
187     }
188   }
189
190 }