// Copyright 2014, 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 removed
// 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 the LoxiGen Compiler."
//
// You may not use this file except in compliance with the EPL or
// LOXI Exception. You may obtain 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
#version 6

/*
 *Experimenter TCP flags
 *Author: fangtuo90@gmail.com
 */

enum ofp_ovs_tcp_flag(wire_type=uint16_t, bitmask=True) {
    OFP_OVS_TCP_FLAG_FIN = 0x001,
    OFP_OVS_TCP_FLAG_SYN = 0x002,
    OFP_OVS_TCP_FLAG_RST = 0x004,
    OFP_OVS_TCP_FLAG_PSH = 0x008,
    OFP_OVS_TCP_FLAG_ACK = 0x010,
    OFP_OVS_TCP_FLAG_URG = 0x020,
    OFP_OVS_TCP_FLAG_ECE = 0x040,
    OFP_OVS_TCP_FLAG_CWR = 0x080,
    OFP_OVS_TCP_FLAG_NS  = 0x100,
};

struct of_oxm_ovs_tcp_flags : of_oxm {
    uint32_t type_len == 0xffff5406;
    uint32_t experimenter_id == 0x4f4e4600;
    uint16_t value;
};

struct of_oxm_ovs_tcp_flags_masked : of_oxm {
    uint32_t type_len == 0xffff5508;
    uint32_t experimenter_id == 0x4f4e4600;
    uint16_t value;
    uint16_t value_mask;
};
