// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
// Copyright (c) 2011, 2012 Open Networking Foundation
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
// This library was generated by the LoxiGen Compiler.
// See the file LICENSE.txt which should have been included in the source distribution

// Automatically generated by LOXI from template of_factory_interface.java
// Do not modify

package org.projectfloodlight.openflow.protocol.oxm;

import org.projectfloodlight.openflow.protocol.*;
import org.projectfloodlight.openflow.protocol.action.*;
import org.projectfloodlight.openflow.protocol.actionid.*;
import org.projectfloodlight.openflow.protocol.bsntlv.*;
import org.projectfloodlight.openflow.protocol.errormsg.*;
import org.projectfloodlight.openflow.protocol.meterband.*;
import org.projectfloodlight.openflow.protocol.instruction.*;
import org.projectfloodlight.openflow.protocol.instructionid.*;
import org.projectfloodlight.openflow.protocol.match.*;
import org.projectfloodlight.openflow.protocol.oxm.*;
import org.projectfloodlight.openflow.protocol.queueprop.*;
import org.projectfloodlight.openflow.types.*;
import org.projectfloodlight.openflow.util.*;
import org.projectfloodlight.openflow.exceptions.*;

public interface OFOxms {
    // Subfactories

    OFOxmArpOp.Builder buildArpOp() throws UnsupportedOperationException;
    OFOxmArpOp arpOp(ArpOpcode value);
    OFOxmArpOpMasked.Builder buildArpOpMasked() throws UnsupportedOperationException;
    OFOxmArpOpMasked arpOpMasked(ArpOpcode value, ArpOpcode mask);
    OFOxmArpSha.Builder buildArpSha() throws UnsupportedOperationException;
    OFOxmArpSha arpSha(MacAddress value);
    OFOxmArpShaMasked.Builder buildArpShaMasked() throws UnsupportedOperationException;
    OFOxmArpShaMasked arpShaMasked(MacAddress value, MacAddress mask);
    OFOxmArpSpa.Builder buildArpSpa() throws UnsupportedOperationException;
    OFOxmArpSpa arpSpa(IPv4Address value);
    OFOxmArpSpaMasked.Builder buildArpSpaMasked() throws UnsupportedOperationException;
    OFOxmArpSpaMasked arpSpaMasked(IPv4Address value, IPv4Address mask);
    OFOxmArpTha.Builder buildArpTha() throws UnsupportedOperationException;
    OFOxmArpTha arpTha(MacAddress value);
    OFOxmArpThaMasked.Builder buildArpThaMasked() throws UnsupportedOperationException;
    OFOxmArpThaMasked arpThaMasked(MacAddress value, MacAddress mask);
    OFOxmArpTpa.Builder buildArpTpa() throws UnsupportedOperationException;
    OFOxmArpTpa arpTpa(IPv4Address value);
    OFOxmArpTpaMasked.Builder buildArpTpaMasked() throws UnsupportedOperationException;
    OFOxmArpTpaMasked arpTpaMasked(IPv4Address value, IPv4Address mask);
    OFOxmBsnGlobalVrfAllowed.Builder buildBsnGlobalVrfAllowed() throws UnsupportedOperationException;
    OFOxmBsnGlobalVrfAllowed bsnGlobalVrfAllowed(OFBooleanValue value);
    OFOxmBsnGlobalVrfAllowedMasked.Builder buildBsnGlobalVrfAllowedMasked() throws UnsupportedOperationException;
    OFOxmBsnGlobalVrfAllowedMasked bsnGlobalVrfAllowedMasked(OFBooleanValue value, OFBooleanValue mask);
    OFOxmBsnInPorts128.Builder buildBsnInPorts128() throws UnsupportedOperationException;
    OFOxmBsnInPorts128 bsnInPorts128(OFBitMask128 value);
    OFOxmBsnInPorts128Masked.Builder buildBsnInPorts128Masked() throws UnsupportedOperationException;
    OFOxmBsnInPorts128Masked bsnInPorts128Masked(OFBitMask128 value, OFBitMask128 mask);
    OFOxmBsnL3DstClassId.Builder buildBsnL3DstClassId() throws UnsupportedOperationException;
    OFOxmBsnL3DstClassId bsnL3DstClassId(ClassId value);
    OFOxmBsnL3DstClassIdMasked.Builder buildBsnL3DstClassIdMasked() throws UnsupportedOperationException;
    OFOxmBsnL3DstClassIdMasked bsnL3DstClassIdMasked(ClassId value, ClassId mask);
    OFOxmBsnL3InterfaceClassId.Builder buildBsnL3InterfaceClassId() throws UnsupportedOperationException;
    OFOxmBsnL3InterfaceClassId bsnL3InterfaceClassId(ClassId value);
    OFOxmBsnL3InterfaceClassIdMasked.Builder buildBsnL3InterfaceClassIdMasked() throws UnsupportedOperationException;
    OFOxmBsnL3InterfaceClassIdMasked bsnL3InterfaceClassIdMasked(ClassId value, ClassId mask);
    OFOxmBsnL3SrcClassId.Builder buildBsnL3SrcClassId() throws UnsupportedOperationException;
    OFOxmBsnL3SrcClassId bsnL3SrcClassId(ClassId value);
    OFOxmBsnL3SrcClassIdMasked.Builder buildBsnL3SrcClassIdMasked() throws UnsupportedOperationException;
    OFOxmBsnL3SrcClassIdMasked bsnL3SrcClassIdMasked(ClassId value, ClassId mask);
    OFOxmBsnLagId.Builder buildBsnLagId() throws UnsupportedOperationException;
    OFOxmBsnLagId bsnLagId(LagId value);
    OFOxmBsnLagIdMasked.Builder buildBsnLagIdMasked() throws UnsupportedOperationException;
    OFOxmBsnLagIdMasked bsnLagIdMasked(LagId value, LagId mask);
    OFOxmBsnVrf.Builder buildBsnVrf() throws UnsupportedOperationException;
    OFOxmBsnVrf bsnVrf(VRF value);
    OFOxmBsnVrfMasked.Builder buildBsnVrfMasked() throws UnsupportedOperationException;
    OFOxmBsnVrfMasked bsnVrfMasked(VRF value, VRF mask);
    OFOxmEthDst.Builder buildEthDst() throws UnsupportedOperationException;
    OFOxmEthDst ethDst(MacAddress value);
    OFOxmEthDstMasked.Builder buildEthDstMasked() throws UnsupportedOperationException;
    OFOxmEthDstMasked ethDstMasked(MacAddress value, MacAddress mask);
    OFOxmEthSrc.Builder buildEthSrc() throws UnsupportedOperationException;
    OFOxmEthSrc ethSrc(MacAddress value);
    OFOxmEthSrcMasked.Builder buildEthSrcMasked() throws UnsupportedOperationException;
    OFOxmEthSrcMasked ethSrcMasked(MacAddress value, MacAddress mask);
    OFOxmEthType.Builder buildEthType() throws UnsupportedOperationException;
    OFOxmEthType ethType(EthType value);
    OFOxmEthTypeMasked.Builder buildEthTypeMasked() throws UnsupportedOperationException;
    OFOxmEthTypeMasked ethTypeMasked(EthType value, EthType mask);
    OFOxmIcmpv4Code.Builder buildIcmpv4Code() throws UnsupportedOperationException;
    OFOxmIcmpv4Code icmpv4Code(ICMPv4Code value);
    OFOxmIcmpv4CodeMasked.Builder buildIcmpv4CodeMasked() throws UnsupportedOperationException;
    OFOxmIcmpv4CodeMasked icmpv4CodeMasked(ICMPv4Code value, ICMPv4Code mask);
    OFOxmIcmpv4Type.Builder buildIcmpv4Type() throws UnsupportedOperationException;
    OFOxmIcmpv4Type icmpv4Type(ICMPv4Type value);
    OFOxmIcmpv4TypeMasked.Builder buildIcmpv4TypeMasked() throws UnsupportedOperationException;
    OFOxmIcmpv4TypeMasked icmpv4TypeMasked(ICMPv4Type value, ICMPv4Type mask);
    OFOxmIcmpv6Code.Builder buildIcmpv6Code() throws UnsupportedOperationException;
    OFOxmIcmpv6Code icmpv6Code(U8 value);
    OFOxmIcmpv6CodeMasked.Builder buildIcmpv6CodeMasked() throws UnsupportedOperationException;
    OFOxmIcmpv6CodeMasked icmpv6CodeMasked(U8 value, U8 mask);
    OFOxmIcmpv6Type.Builder buildIcmpv6Type() throws UnsupportedOperationException;
    OFOxmIcmpv6Type icmpv6Type(U8 value);
    OFOxmIcmpv6TypeMasked.Builder buildIcmpv6TypeMasked() throws UnsupportedOperationException;
    OFOxmIcmpv6TypeMasked icmpv6TypeMasked(U8 value, U8 mask);
    OFOxmInPhyPort.Builder buildInPhyPort() throws UnsupportedOperationException;
    OFOxmInPhyPort inPhyPort(OFPort value);
    OFOxmInPhyPortMasked.Builder buildInPhyPortMasked() throws UnsupportedOperationException;
    OFOxmInPhyPortMasked inPhyPortMasked(OFPort value, OFPort mask);
    OFOxmInPort.Builder buildInPort() throws UnsupportedOperationException;
    OFOxmInPort inPort(OFPort value);
    OFOxmInPortMasked.Builder buildInPortMasked() throws UnsupportedOperationException;
    OFOxmInPortMasked inPortMasked(OFPort value, OFPort mask);
    OFOxmIpDscp.Builder buildIpDscp() throws UnsupportedOperationException;
    OFOxmIpDscp ipDscp(IpDscp value);
    OFOxmIpDscpMasked.Builder buildIpDscpMasked() throws UnsupportedOperationException;
    OFOxmIpDscpMasked ipDscpMasked(IpDscp value, IpDscp mask);
    OFOxmIpEcn.Builder buildIpEcn() throws UnsupportedOperationException;
    OFOxmIpEcn ipEcn(IpEcn value);
    OFOxmIpEcnMasked.Builder buildIpEcnMasked() throws UnsupportedOperationException;
    OFOxmIpEcnMasked ipEcnMasked(IpEcn value, IpEcn mask);
    OFOxmIpProto.Builder buildIpProto() throws UnsupportedOperationException;
    OFOxmIpProto ipProto(IpProtocol value);
    OFOxmIpProtoMasked.Builder buildIpProtoMasked() throws UnsupportedOperationException;
    OFOxmIpProtoMasked ipProtoMasked(IpProtocol value, IpProtocol mask);
    OFOxmIpv4Dst.Builder buildIpv4Dst() throws UnsupportedOperationException;
    OFOxmIpv4Dst ipv4Dst(IPv4Address value);
    OFOxmIpv4DstMasked.Builder buildIpv4DstMasked() throws UnsupportedOperationException;
    OFOxmIpv4DstMasked ipv4DstMasked(IPv4Address value, IPv4Address mask);
    OFOxmIpv4Src.Builder buildIpv4Src() throws UnsupportedOperationException;
    OFOxmIpv4Src ipv4Src(IPv4Address value);
    OFOxmIpv4SrcMasked.Builder buildIpv4SrcMasked() throws UnsupportedOperationException;
    OFOxmIpv4SrcMasked ipv4SrcMasked(IPv4Address value, IPv4Address mask);
    OFOxmIpv6Dst.Builder buildIpv6Dst() throws UnsupportedOperationException;
    OFOxmIpv6Dst ipv6Dst(IPv6Address value);
    OFOxmIpv6DstMasked.Builder buildIpv6DstMasked() throws UnsupportedOperationException;
    OFOxmIpv6DstMasked ipv6DstMasked(IPv6Address value, IPv6Address mask);
    OFOxmIpv6Flabel.Builder buildIpv6Flabel() throws UnsupportedOperationException;
    OFOxmIpv6Flabel ipv6Flabel(IPv6FlowLabel value);
    OFOxmIpv6FlabelMasked.Builder buildIpv6FlabelMasked() throws UnsupportedOperationException;
    OFOxmIpv6FlabelMasked ipv6FlabelMasked(IPv6FlowLabel value, IPv6FlowLabel mask);
    OFOxmIpv6NdSll.Builder buildIpv6NdSll() throws UnsupportedOperationException;
    OFOxmIpv6NdSll ipv6NdSll(MacAddress value);
    OFOxmIpv6NdSllMasked.Builder buildIpv6NdSllMasked() throws UnsupportedOperationException;
    OFOxmIpv6NdSllMasked ipv6NdSllMasked(MacAddress value, MacAddress mask);
    OFOxmIpv6NdTarget.Builder buildIpv6NdTarget() throws UnsupportedOperationException;
    OFOxmIpv6NdTarget ipv6NdTarget(IPv6Address value);
    OFOxmIpv6NdTargetMasked.Builder buildIpv6NdTargetMasked() throws UnsupportedOperationException;
    OFOxmIpv6NdTargetMasked ipv6NdTargetMasked(IPv6Address value, IPv6Address mask);
    OFOxmIpv6NdTll.Builder buildIpv6NdTll() throws UnsupportedOperationException;
    OFOxmIpv6NdTll ipv6NdTll(MacAddress value);
    OFOxmIpv6NdTllMasked.Builder buildIpv6NdTllMasked() throws UnsupportedOperationException;
    OFOxmIpv6NdTllMasked ipv6NdTllMasked(MacAddress value, MacAddress mask);
    OFOxmIpv6Src.Builder buildIpv6Src() throws UnsupportedOperationException;
    OFOxmIpv6Src ipv6Src(IPv6Address value);
    OFOxmIpv6SrcMasked.Builder buildIpv6SrcMasked() throws UnsupportedOperationException;
    OFOxmIpv6SrcMasked ipv6SrcMasked(IPv6Address value, IPv6Address mask);
    OFOxmMetadata.Builder buildMetadata() throws UnsupportedOperationException;
    OFOxmMetadata metadata(OFMetadata value);
    OFOxmMetadataMasked.Builder buildMetadataMasked() throws UnsupportedOperationException;
    OFOxmMetadataMasked metadataMasked(OFMetadata value, OFMetadata mask);
    OFOxmMplsLabel.Builder buildMplsLabel() throws UnsupportedOperationException;
    OFOxmMplsLabel mplsLabel(U32 value);
    OFOxmMplsLabelMasked.Builder buildMplsLabelMasked() throws UnsupportedOperationException;
    OFOxmMplsLabelMasked mplsLabelMasked(U32 value, U32 mask);
    OFOxmMplsTc.Builder buildMplsTc() throws UnsupportedOperationException;
    OFOxmMplsTc mplsTc(U8 value);
    OFOxmMplsTcMasked.Builder buildMplsTcMasked() throws UnsupportedOperationException;
    OFOxmMplsTcMasked mplsTcMasked(U8 value, U8 mask);
    OFOxmSctpDst.Builder buildSctpDst() throws UnsupportedOperationException;
    OFOxmSctpDst sctpDst(TransportPort value);
    OFOxmSctpDstMasked.Builder buildSctpDstMasked() throws UnsupportedOperationException;
    OFOxmSctpDstMasked sctpDstMasked(TransportPort value, TransportPort mask);
    OFOxmSctpSrc.Builder buildSctpSrc() throws UnsupportedOperationException;
    OFOxmSctpSrc sctpSrc(TransportPort value);
    OFOxmSctpSrcMasked.Builder buildSctpSrcMasked() throws UnsupportedOperationException;
    OFOxmSctpSrcMasked sctpSrcMasked(TransportPort value, TransportPort mask);
    OFOxmTcpDst.Builder buildTcpDst() throws UnsupportedOperationException;
    OFOxmTcpDst tcpDst(TransportPort value);
    OFOxmTcpDstMasked.Builder buildTcpDstMasked() throws UnsupportedOperationException;
    OFOxmTcpDstMasked tcpDstMasked(TransportPort value, TransportPort mask);
    OFOxmTcpSrc.Builder buildTcpSrc() throws UnsupportedOperationException;
    OFOxmTcpSrc tcpSrc(TransportPort value);
    OFOxmTcpSrcMasked.Builder buildTcpSrcMasked() throws UnsupportedOperationException;
    OFOxmTcpSrcMasked tcpSrcMasked(TransportPort value, TransportPort mask);
    OFOxmUdpDst.Builder buildUdpDst() throws UnsupportedOperationException;
    OFOxmUdpDst udpDst(TransportPort value);
    OFOxmUdpDstMasked.Builder buildUdpDstMasked() throws UnsupportedOperationException;
    OFOxmUdpDstMasked udpDstMasked(TransportPort value, TransportPort mask);
    OFOxmUdpSrc.Builder buildUdpSrc() throws UnsupportedOperationException;
    OFOxmUdpSrc udpSrc(TransportPort value);
    OFOxmUdpSrcMasked.Builder buildUdpSrcMasked() throws UnsupportedOperationException;
    OFOxmUdpSrcMasked udpSrcMasked(TransportPort value, TransportPort mask);
    OFOxmVlanPcp.Builder buildVlanPcp() throws UnsupportedOperationException;
    OFOxmVlanPcp vlanPcp(VlanPcp value);
    OFOxmVlanPcpMasked.Builder buildVlanPcpMasked() throws UnsupportedOperationException;
    OFOxmVlanPcpMasked vlanPcpMasked(VlanPcp value, VlanPcp mask);
    OFOxmVlanVid.Builder buildVlanVid() throws UnsupportedOperationException;
    OFOxmVlanVid vlanVid(OFVlanVidMatch value);
    OFOxmVlanVidMasked.Builder buildVlanVidMasked() throws UnsupportedOperationException;
    OFOxmVlanVidMasked vlanVidMasked(OFVlanVidMatch value, OFVlanVidMatch mask);

    OFMessageReader<OFOxm<?>> getReader();
    OFVersion getVersion();

    public <F extends OFValueType<F>> OFOxm<F> fromValue(F value, MatchField<F> field);
    public <F extends OFValueType<F>> OFOxm<F> fromValueAndMask(F value, F mask, MatchField<F> field);
    public <F extends OFValueType<F>> OFOxm<F> fromMasked(Masked<F> masked, MatchField<F> field);
}
