// Copyright 2013, 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 nsp (113)
struct of_oxm_nsp : of_oxm {
    uint32_t type_len == 0x0001e204;
    uint32_t value;
};

struct of_oxm_nsp_masked : of_oxm {
    uint32_t type_len == 0x0001e308;
    uint32_t value;
    uint32_t value_mask;
};

// Nicira extension for nsi (114)
struct of_oxm_nsi : of_oxm {
    uint32_t type_len == 0x0001e401;
    uint8_t value;
};

struct of_oxm_nsi_masked : of_oxm {
    uint32_t type_len == 0x0001e502;
    uint8_t value;
    uint8_t value_mask;
};

// Nicira extension for nsh_c1 (115)
struct of_oxm_nsh_c1 : of_oxm {
    uint32_t type_len == 0x0001e604;
    uint32_t value;
};

struct of_oxm_nsh_c1_masked : of_oxm {
    uint32_t type_len == 0x0001e708;
    uint32_t value;
    uint32_t value_mask;
};

// Nicira extension for nsh_c2 (116)
struct of_oxm_nsh_c2 : of_oxm {
    uint32_t type_len == 0x0001e804;
    uint32_t value;
};

struct of_oxm_nsh_c2_masked : of_oxm {
    uint32_t type_len == 0x0001e908;
    uint32_t value;
    uint32_t value_mask;
};


// Nicira extension for nsh_c3 (117)
struct of_oxm_nsh_c3 : of_oxm {
    uint32_t type_len == 0x0001ea04;
    uint32_t value;
};

struct of_oxm_nsh_c3_masked : of_oxm {
    uint32_t type_len == 0x0001eb08;
    uint32_t value;
    uint32_t value_mask;
};

// Nicira extension for nsh_c4 (118)
struct of_oxm_nsh_c4 : of_oxm {
    uint32_t type_len == 0x0001ec04;
    uint32_t value;
};

struct of_oxm_nsh_c4_masked : of_oxm {
    uint32_t type_len == 0x0001ed08;
    uint32_t value;
    uint32_t value_mask;
};


// Nicira extension for nsh_mdtype (119)
struct of_oxm_nsh_mdtype : of_oxm {
    uint32_t type_len == 0x0001ee01;
    uint8_t value;
};

struct of_oxm_nsh_mdtype_masked : of_oxm {
    uint32_t type_len == 0x0001ef02;
    uint8_t value;
    uint8_t value_mask;
};


// Nicira extension for nsh_np (120)
struct of_oxm_nsh_np : of_oxm {
    uint32_t type_len == 0x0001f001;
    uint8_t value;
};

struct of_oxm_nsh_np_masked : of_oxm {
    uint32_t type_len == 0x0001f102;
    uint8_t value;
    uint8_t value_mask;
};


// Nicira extension for encap_eth_src (121)
struct of_oxm_encap_eth_src : of_oxm {
    uint32_t type_len == 0x0001f206;
    of_mac_addr_t value;
};

struct of_oxm_encap_eth_src_masked : of_oxm {
    uint32_t type_len == 0x0001f30c;
    of_mac_addr_t value;
    of_mac_addr_t value_mask;

};


// Nicira extension for encap_eth_dst (122)
struct of_oxm_encap_eth_dst : of_oxm {
    uint32_t type_len == 0x0001f406;
    of_mac_addr_t value;
};

struct of_oxm_encap_eth_dst_masked : of_oxm {
    uint32_t type_len == 0x0001f50c;
    of_mac_addr_t value;
    of_mac_addr_t value_mask;
};


// Nicira extension for encap_eth_type (123)
struct of_oxm_encap_eth_type : of_oxm {
    uint32_t type_len == 0x0001f602;
    uint16_t value;
};

struct of_oxm_encap_eth_type_masked : of_oxm {
    uint32_t type_len == 0x0001f704;
    uint16_t value;
    uint16_t value_mask;
};
