module openflow-approved-extensions { namespace "urn:opendaylight:openflow:approved:extensions"; prefix "ofext"; import yang-ext {prefix ext;} import ietf-inet-types {prefix inet;} import ietf-yang-types {prefix yang;} import openflow-types {prefix oft;} import openflow-protocol {prefix ofproto;} import openflow-action {prefix ofaction;} import openflow-instruction {prefix ofinstruction;} import openflow-extensible-match {prefix oxm;} import openflow-augments {prefix aug;} revision "2016-08-02" { description "Openflow approved extensions definition"; } //ONF Approved OpenFlow Extensions // ONF experimenter error codes typedef onf-experimenter-error-code { description "Error codes for experimenter error type."; type enumeration { enum ONFERR_ET_UNKNOWN { description "Unspecified error."; value 2300; } enum ONFERR_ET_EPERM { description "Permissions error."; value 2301; } enum ONFERR_ET_BAD_ID { description "Bundle ID doesn’t exist."; value 2302; } enum ONFERR_ET_BUNDLE_EXIST { description "Bundle ID already exist."; value 2303; } enum ONFERR_ET_BUNDLE_CLOSED { description "Bundle ID is closed."; value 2304; } enum ONFERR_ET_OUT_OF_BUNDLES { description "Too many bundles IDs."; value 2305; } enum ONFERR_ET_BAD_TYPE { description "Unsupported or unknown message control type."; value 2306; } enum ONFERR_ET_BAD_FLAGS { description "Unsupported, unknown, or inconsistent flags."; value 2307; } enum ONFERR_ET_MSG_BAD_LEN { description "Length problem in included message."; value 2308; } enum ONFERR_ET_MSG_BAD_XID { description "Inconsistent or duplicate XID."; value 2309; } enum ONFERR_ET_MSG_UNSUP { description "Unsupported message in this bundle."; value 2310; } enum ONFERR_ET_MSG_CONFLICT { description "Unsupported message combination in this bundle."; value 2311; } enum ONFERR_ET_MSG_TOO_MANY { description "Can not handle this many messages in bundle."; value 2312; } enum ONFERR_ET_MSG_FAILED { description "One message in bundle failed."; value 2313; } enum ONFERR_ET_TIMEOUT { description "Bundle is taking too long."; value 2314; } enum ONFERR_ET_BUNDLE_IN_PROGRESS { description "Bundle is locking the resource."; value 2315; } } } // Extension 109 - TCP FLAGS identity tcp_flags { base oxm:match-field; description "TCP flags from the TCP header"; } augment "/oxm:oxm-container/oxm:match-entry-value/aug:experimenter-id-case" { ext:augment-identifier "tcp-flags-container"; container tcp-flags { leaf flags { type uint16; } leaf mask { type binary; } } } // Extension 230 - Bundle Extension (experimenterID 0x4F4E4600) typedef bundle-id { description "Identify the bundle."; type uint32; } typedef bundle-control-type { description "Bundle control message type."; type enumeration { enum ONF_BCT_OPEN_REQUEST { value 0; } enum ONF_BCT_OPEN_REPLY { value 1; } enum ONF_BCT_CLOSE_REQUEST { value 2; } enum ONF_BCT_CLOSE_REPLY { value 3; } enum ONF_BCT_COMMIT_REQUEST { value 4; } enum ONF_BCT_COMMIT_REPLY { value 5; } enum ONF_BCT_DISCARD_REQUEST { value 6; } enum ONF_BCT_DISCARD_REPLY { value 7; } } } typedef bundle-flags { description "Bundle configuration flags."; type bits { bit atomic { description "Execute atomically."; position 0; } bit ordered { description "Execute in specified order."; position 1; } } } typedef bundle-property-type { description "Bundle property types."; type enumeration { enum ONF_ET_BPT_EXPERIMENTER { description "Experimenter property."; value 65535; //0xFFFF } } } grouping bundle-properties { list bundle-property { description "Bundle properties list."; leaf type { type bundle-property-type; } choice bundle-property-entry { case bundle-experimenter-property { leaf experimenter { type oft:experimenter-id; } leaf exp-type { type uint32; } choice bundle-experimenter-property-data { // to be augmented by vendors } } } } } augment "/ofproto:experimenter/ofproto:input/ofproto:experimenter-data-of-choice" { case bundle-control { description "ONF_ET_BUNDLE_CONTROL message in OpenFlow Switch Extension 230."; leaf bundle-id { type bundle-id; } leaf type { type bundle-control-type; } leaf flags { type bundle-flags; } uses bundle-properties; } case bundle-add-message { description "ONF_ET_BUNDLE_ADD_MESSAGE in OpenFlow Switch Extension 230."; leaf bundle-id { type bundle-id; } leaf flags { type bundle-flags; } // Inner message choice message { description "Message added to the bundle."; case flow-mod-case { uses ofproto:flow-mod; } case group-mod-case { uses ofproto:group-mod; } case port-mod-case { uses ofproto:port-mod; } } uses bundle-properties; } } }