/*
 * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 */

 module openflow-instruction {
    namespace "urn:opendaylight:openflow:common:instruction";
    prefix "ofinstruction";

    import openflow-types { prefix oft; }
    import openflow-action {prefix ofaction;}

    revision "2013-07-31" {
        description "#NOT_PUBLISHED# OpenFlow 1.3 - instruction model";
    }

    container instruction-container {
        uses instruction-grouping;
    }

    grouping instructions-grouping {
        list instruction {
            config false;
            ordered-by user;
            uses instruction-grouping;
            leaf experimenter-id {
                type oft:experimenter-id;
            }
        }
    }

    grouping instruction-grouping {
        choice instruction-choice {
            case goto-table-case {
                container goto-table {
                    leaf table-id {
                        type uint8;
                    }
                }
            }
            case write-metadata-case {
                container write-metadata {
                    leaf metadata {
                        type binary;
                    }
                    leaf metadata-mask {
                        type binary;
                    }
                }
            }
            case write-actions-case {
                container write-actions {
                    uses ofaction:actions-grouping;
                }
            }
            case apply-actions-case {
                container apply-actions {
                    uses ofaction:actions-grouping;
                }
            }
            case clear-actions-case {
                // empty instruction
            }
            case meter-case {
                container meter {
                    leaf meter-id {
                        type uint32;
                    }
                }
            }
        }
    }
}