// Copyright 2015, Big Switch Networks, Inc.
//
// LoxiGen is licensed under the Eclipse Public License, version 1.0 (EPL), with
// the following special exception:
//
// LOXI Exception
//
// As a special exception to the terms of the EPL, you may distribute libraries
// generated by LoxiGen (LoxiGen Libraries) under the terms of your choice, provided
// that copyright and licensing notices generated by LoxiGen are not altered or removd
// from the LoxiGen Libraries and the notice provided below is (i) included in
// the LoxiGen Libraries, if distributed in source code form and (ii) included in any
// documentation for the LoxiGen Libraries, if distributed in binary form.
//
// Notice: "Copyright 2013, Big Switch Networks, Inc. This library was generated by t"
//
// You may not use this file except in compliance with the EPL or LOXI Exception. Youn
// a copy of the EPL at:
//
// http://www.eclipse.org/legal/epl-v10.html
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// EPL for the specific language governing permissions and limitations
// under the EPL.

#version 3
#version 4
#version 5

// Nicira extension for reg0
struct of_oxm_reg0 : of_oxm {
    uint32_t type_len == 0x00010004;
    uint32_t value;
};

struct of_oxm_reg0_masked : of_oxm {
    uint32_t type_len == 0x00010108;
    uint32_t value;
    uint32_t value_mask;
};

// Nicira extension for reg1
struct of_oxm_reg1 : of_oxm {
    uint32_t type_len == 0x00010204;
    uint32_t value;
};

struct of_oxm_reg1_masked : of_oxm {
    uint32_t type_len == 0x00010308;
    uint32_t value;
    uint32_t value_mask;
};

// Nicira extension for reg2
struct of_oxm_reg2 : of_oxm {
    uint32_t type_len == 0x00010404;
    uint32_t value;
};

struct of_oxm_reg2_masked : of_oxm {
    uint32_t type_len == 0x00010508;
    uint32_t value;
    uint32_t value_mask;
};

// Nicira extension for reg3
struct of_oxm_reg3 : of_oxm {
    uint32_t type_len == 0x00010604;
    uint32_t value;
};

struct of_oxm_reg3_masked : of_oxm {
    uint32_t type_len == 0x00010708;
    uint32_t value;
    uint32_t value_mask;
};

// Nicira extension for reg4
struct of_oxm_reg4 : of_oxm {
    uint32_t type_len == 0x00010804;
    uint32_t value;
};

struct of_oxm_reg4_masked : of_oxm {
    uint32_t type_len == 0x00010908;
    uint32_t value;
    uint32_t value_mask;
};

// Nicira extension for reg5
struct of_oxm_reg5 : of_oxm {
    uint32_t type_len == 0x00010a04;
    uint32_t value;
};

struct of_oxm_reg5_masked : of_oxm {
    uint32_t type_len == 0x00010b08;
    uint32_t value;
    uint32_t value_mask;
};

// Nicira extension for reg6
struct of_oxm_reg6 : of_oxm {
    uint32_t type_len == 0x00010c04;
    uint32_t value;
};

struct of_oxm_reg6_masked : of_oxm {
    uint32_t type_len == 0x00010d08;
    uint32_t value;
    uint32_t value_mask;
};

// Nicira extension for reg7
struct of_oxm_reg7 : of_oxm {
    uint32_t type_len == 0x00010e04;
    uint32_t value;
};

struct of_oxm_reg7_masked : of_oxm {
    uint32_t type_len == 0x00011008;
    uint32_t value;
    uint32_t value_mask;
};
