module vpp-classifier { yang-version 1; namespace "urn:opendaylight:params:xml:ns:yang:vpp:classifier"; prefix "vpp-classifier"; revision "2015-06-03" { description "Initial revision of model for VPP packet classifier. The model can be used ony to implement ACLs. Other classify table usages are not supported yet, see https://jira.fd.io/browse/VPP-203 for details."; reference "https://wiki.fd.io/view/VPP/Introduction_To_N-tuple_Classifiers"; } import ietf-yang-types { prefix "yang"; } typedef classify-table-ref { type leafref { path "/vpp-classifier:vpp-classifier/classify-table/name"; } description "This type is used by data models that need to reference configured classify tables."; } typedef packet-handling-action { type enumeration { enum "deny" { // by VPP convention, first neighbour node (at index 0) is a drop node value 0; } enum "permit" { value -1; // indicates that the next node not set } } } typedef vpp-node { type union { // FIXME: enable after VPP-203 is fixed // type string; // name of vpp-node neighbour, TODO: base node also needs to be defined type packet-handling-action; } description "Defines VPP node reference using relative node name or packet handling action."; } typedef opaque-index { type union { type vpp-node; type uint32; } description "Defines opaque-index type - metadata that can be attached to session-hit packets. Vpp nodes can't be referenced by index, because node indexes might change after vpp restart."; } grouping classify-session-attributes { description "Defines classify session attributes that are mapped to classify_add_del_session and classify_session_details messages parameters."; leaf hit_next_index { type vpp-node; mandatory true; description "Vpp node to which packet will be send when it produces a match."; } leaf opaque_index { type opaque-index; } leaf advance { type int32; default 0; description "Nodes like ip4/6-classify use the parameter to \"consume\" networking layer. Example: tunnel decapsulation."; } } grouping classify-table-attributes { description "Defines classify table attributes that are mapped to classify_add_del_table and classify_table_info_reply messages parameters."; leaf nbuckets { mandatory true; type uint32; description "Used by classifier hashing algorithm. It is not possible to resize the bucket array, therefore suggested value is approximate number of expected entries."; } leaf memory_size { mandatory true; type uint32; description "Memory size for classify table and its entries."; } leaf skip_n_vectors { type uint32; default 0; description "Number of 16 byte vectors to be skipped before applying mask."; } leaf next_table { type classify-table-ref; description "Reference to the next classify table. Required when multiple table chaining is used."; } leaf miss_next_index { mandatory true; type vpp-node; description "Vpp node to which packet will be send when it falis to produce a match"; } leaf mask { type yang:hex-string; mandatory true; description "Defines match mask (multiple of 16 bytes)"; } leaf active_sessions { type uint32; mandatory true; config false; description "Number of sessions defined for the classify table."; } list classify-session { key "match"; leaf match { type yang:hex-string; description "Defines actual value to be matched that is a byte vector, which length is multiple of 16 bytes"; must "string-length(match) = string-length(../../mask)" { error-message "Match length is not equal to classify table mask length."; description "Match length must be equal to classify table mask length."; } } uses classify-session-attributes; } } container vpp-classifier { list classify-table { key "name"; leaf name { type string; description "Hides classify table identifier managed by vpp."; } uses classify-table-attributes; } } }