diff --git a/of/lib/gen-src/main/java/org/projectfloodlight/openflow/protocol/ver10/OFOxmsVer10.java b/of/lib/gen-src/main/java/org/projectfloodlight/openflow/protocol/ver10/OFOxmsVer10.java
new file mode 100644
index 0000000..a53c7a3
--- /dev/null
+++ b/of/lib/gen-src/main/java/org/projectfloodlight/openflow/protocol/ver10/OFOxmsVer10.java
@@ -0,0 +1,1165 @@
+// 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_class.java
+// Do not modify
+
+package org.projectfloodlight.openflow.protocol.ver10;
+
+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 class OFOxmsVer10 implements OFOxms {
+    public final static OFOxmsVer10 INSTANCE = new OFOxmsVer10();
+
+
+
+
+    public OFOxmArpOp.Builder buildArpOp() {
+        throw new UnsupportedOperationException("OFOxmArpOp not supported in version 1.0");
+    }
+    public OFOxmArpOp arpOp(ArpOpcode value) {
+        throw new UnsupportedOperationException("OFOxmArpOp not supported in version 1.0");
+    }
+
+    public OFOxmArpOpMasked.Builder buildArpOpMasked() {
+        throw new UnsupportedOperationException("OFOxmArpOpMasked not supported in version 1.0");
+    }
+    public OFOxmArpOpMasked arpOpMasked(ArpOpcode value, ArpOpcode mask) {
+        throw new UnsupportedOperationException("OFOxmArpOpMasked not supported in version 1.0");
+    }
+
+    public OFOxmArpSha.Builder buildArpSha() {
+        throw new UnsupportedOperationException("OFOxmArpSha not supported in version 1.0");
+    }
+    public OFOxmArpSha arpSha(MacAddress value) {
+        throw new UnsupportedOperationException("OFOxmArpSha not supported in version 1.0");
+    }
+
+    public OFOxmArpShaMasked.Builder buildArpShaMasked() {
+        throw new UnsupportedOperationException("OFOxmArpShaMasked not supported in version 1.0");
+    }
+    public OFOxmArpShaMasked arpShaMasked(MacAddress value, MacAddress mask) {
+        throw new UnsupportedOperationException("OFOxmArpShaMasked not supported in version 1.0");
+    }
+
+    public OFOxmArpSpa.Builder buildArpSpa() {
+        throw new UnsupportedOperationException("OFOxmArpSpa not supported in version 1.0");
+    }
+    public OFOxmArpSpa arpSpa(IPv4Address value) {
+        throw new UnsupportedOperationException("OFOxmArpSpa not supported in version 1.0");
+    }
+
+    public OFOxmArpSpaMasked.Builder buildArpSpaMasked() {
+        throw new UnsupportedOperationException("OFOxmArpSpaMasked not supported in version 1.0");
+    }
+    public OFOxmArpSpaMasked arpSpaMasked(IPv4Address value, IPv4Address mask) {
+        throw new UnsupportedOperationException("OFOxmArpSpaMasked not supported in version 1.0");
+    }
+
+    public OFOxmArpTha.Builder buildArpTha() {
+        throw new UnsupportedOperationException("OFOxmArpTha not supported in version 1.0");
+    }
+    public OFOxmArpTha arpTha(MacAddress value) {
+        throw new UnsupportedOperationException("OFOxmArpTha not supported in version 1.0");
+    }
+
+    public OFOxmArpThaMasked.Builder buildArpThaMasked() {
+        throw new UnsupportedOperationException("OFOxmArpThaMasked not supported in version 1.0");
+    }
+    public OFOxmArpThaMasked arpThaMasked(MacAddress value, MacAddress mask) {
+        throw new UnsupportedOperationException("OFOxmArpThaMasked not supported in version 1.0");
+    }
+
+    public OFOxmArpTpa.Builder buildArpTpa() {
+        throw new UnsupportedOperationException("OFOxmArpTpa not supported in version 1.0");
+    }
+    public OFOxmArpTpa arpTpa(IPv4Address value) {
+        throw new UnsupportedOperationException("OFOxmArpTpa not supported in version 1.0");
+    }
+
+    public OFOxmArpTpaMasked.Builder buildArpTpaMasked() {
+        throw new UnsupportedOperationException("OFOxmArpTpaMasked not supported in version 1.0");
+    }
+    public OFOxmArpTpaMasked arpTpaMasked(IPv4Address value, IPv4Address mask) {
+        throw new UnsupportedOperationException("OFOxmArpTpaMasked not supported in version 1.0");
+    }
+
+    public OFOxmBsnEgrPortGroupId.Builder buildBsnEgrPortGroupId() {
+        throw new UnsupportedOperationException("OFOxmBsnEgrPortGroupId not supported in version 1.0");
+    }
+    public OFOxmBsnEgrPortGroupId bsnEgrPortGroupId(ClassId value) {
+        throw new UnsupportedOperationException("OFOxmBsnEgrPortGroupId not supported in version 1.0");
+    }
+
+    public OFOxmBsnEgrPortGroupIdMasked.Builder buildBsnEgrPortGroupIdMasked() {
+        throw new UnsupportedOperationException("OFOxmBsnEgrPortGroupIdMasked not supported in version 1.0");
+    }
+    public OFOxmBsnEgrPortGroupIdMasked bsnEgrPortGroupIdMasked(ClassId value, ClassId mask) {
+        throw new UnsupportedOperationException("OFOxmBsnEgrPortGroupIdMasked not supported in version 1.0");
+    }
+
+    public OFOxmBsnGlobalVrfAllowed.Builder buildBsnGlobalVrfAllowed() {
+        throw new UnsupportedOperationException("OFOxmBsnGlobalVrfAllowed not supported in version 1.0");
+    }
+    public OFOxmBsnGlobalVrfAllowed bsnGlobalVrfAllowed(OFBooleanValue value) {
+        throw new UnsupportedOperationException("OFOxmBsnGlobalVrfAllowed not supported in version 1.0");
+    }
+
+    public OFOxmBsnGlobalVrfAllowedMasked.Builder buildBsnGlobalVrfAllowedMasked() {
+        throw new UnsupportedOperationException("OFOxmBsnGlobalVrfAllowedMasked not supported in version 1.0");
+    }
+    public OFOxmBsnGlobalVrfAllowedMasked bsnGlobalVrfAllowedMasked(OFBooleanValue value, OFBooleanValue mask) {
+        throw new UnsupportedOperationException("OFOxmBsnGlobalVrfAllowedMasked not supported in version 1.0");
+    }
+
+    public OFOxmBsnInPorts128.Builder buildBsnInPorts128() {
+        throw new UnsupportedOperationException("OFOxmBsnInPorts128 not supported in version 1.0");
+    }
+    public OFOxmBsnInPorts128 bsnInPorts128(OFBitMask128 value) {
+        throw new UnsupportedOperationException("OFOxmBsnInPorts128 not supported in version 1.0");
+    }
+
+    public OFOxmBsnInPorts128Masked.Builder buildBsnInPorts128Masked() {
+        throw new UnsupportedOperationException("OFOxmBsnInPorts128Masked not supported in version 1.0");
+    }
+    public OFOxmBsnInPorts128Masked bsnInPorts128Masked(OFBitMask128 value, OFBitMask128 mask) {
+        throw new UnsupportedOperationException("OFOxmBsnInPorts128Masked not supported in version 1.0");
+    }
+
+    public OFOxmBsnL3DstClassId.Builder buildBsnL3DstClassId() {
+        throw new UnsupportedOperationException("OFOxmBsnL3DstClassId not supported in version 1.0");
+    }
+    public OFOxmBsnL3DstClassId bsnL3DstClassId(ClassId value) {
+        throw new UnsupportedOperationException("OFOxmBsnL3DstClassId not supported in version 1.0");
+    }
+
+    public OFOxmBsnL3DstClassIdMasked.Builder buildBsnL3DstClassIdMasked() {
+        throw new UnsupportedOperationException("OFOxmBsnL3DstClassIdMasked not supported in version 1.0");
+    }
+    public OFOxmBsnL3DstClassIdMasked bsnL3DstClassIdMasked(ClassId value, ClassId mask) {
+        throw new UnsupportedOperationException("OFOxmBsnL3DstClassIdMasked not supported in version 1.0");
+    }
+
+    public OFOxmBsnL3InterfaceClassId.Builder buildBsnL3InterfaceClassId() {
+        throw new UnsupportedOperationException("OFOxmBsnL3InterfaceClassId not supported in version 1.0");
+    }
+    public OFOxmBsnL3InterfaceClassId bsnL3InterfaceClassId(ClassId value) {
+        throw new UnsupportedOperationException("OFOxmBsnL3InterfaceClassId not supported in version 1.0");
+    }
+
+    public OFOxmBsnL3InterfaceClassIdMasked.Builder buildBsnL3InterfaceClassIdMasked() {
+        throw new UnsupportedOperationException("OFOxmBsnL3InterfaceClassIdMasked not supported in version 1.0");
+    }
+    public OFOxmBsnL3InterfaceClassIdMasked bsnL3InterfaceClassIdMasked(ClassId value, ClassId mask) {
+        throw new UnsupportedOperationException("OFOxmBsnL3InterfaceClassIdMasked not supported in version 1.0");
+    }
+
+    public OFOxmBsnL3SrcClassId.Builder buildBsnL3SrcClassId() {
+        throw new UnsupportedOperationException("OFOxmBsnL3SrcClassId not supported in version 1.0");
+    }
+    public OFOxmBsnL3SrcClassId bsnL3SrcClassId(ClassId value) {
+        throw new UnsupportedOperationException("OFOxmBsnL3SrcClassId not supported in version 1.0");
+    }
+
+    public OFOxmBsnL3SrcClassIdMasked.Builder buildBsnL3SrcClassIdMasked() {
+        throw new UnsupportedOperationException("OFOxmBsnL3SrcClassIdMasked not supported in version 1.0");
+    }
+    public OFOxmBsnL3SrcClassIdMasked bsnL3SrcClassIdMasked(ClassId value, ClassId mask) {
+        throw new UnsupportedOperationException("OFOxmBsnL3SrcClassIdMasked not supported in version 1.0");
+    }
+
+    public OFOxmBsnLagId.Builder buildBsnLagId() {
+        throw new UnsupportedOperationException("OFOxmBsnLagId not supported in version 1.0");
+    }
+    public OFOxmBsnLagId bsnLagId(LagId value) {
+        throw new UnsupportedOperationException("OFOxmBsnLagId not supported in version 1.0");
+    }
+
+    public OFOxmBsnLagIdMasked.Builder buildBsnLagIdMasked() {
+        throw new UnsupportedOperationException("OFOxmBsnLagIdMasked not supported in version 1.0");
+    }
+    public OFOxmBsnLagIdMasked bsnLagIdMasked(LagId value, LagId mask) {
+        throw new UnsupportedOperationException("OFOxmBsnLagIdMasked not supported in version 1.0");
+    }
+
+    public OFOxmBsnTcpFlags.Builder buildBsnTcpFlags() {
+        throw new UnsupportedOperationException("OFOxmBsnTcpFlags not supported in version 1.0");
+    }
+    public OFOxmBsnTcpFlags bsnTcpFlags(U16 value) {
+        throw new UnsupportedOperationException("OFOxmBsnTcpFlags not supported in version 1.0");
+    }
+
+    public OFOxmBsnTcpFlagsMasked.Builder buildBsnTcpFlagsMasked() {
+        throw new UnsupportedOperationException("OFOxmBsnTcpFlagsMasked not supported in version 1.0");
+    }
+    public OFOxmBsnTcpFlagsMasked bsnTcpFlagsMasked(U16 value, U16 mask) {
+        throw new UnsupportedOperationException("OFOxmBsnTcpFlagsMasked not supported in version 1.0");
+    }
+
+    public OFOxmBsnUdf0.Builder buildBsnUdf0() {
+        throw new UnsupportedOperationException("OFOxmBsnUdf0 not supported in version 1.0");
+    }
+    public OFOxmBsnUdf0 bsnUdf0(UDF value) {
+        throw new UnsupportedOperationException("OFOxmBsnUdf0 not supported in version 1.0");
+    }
+
+    public OFOxmBsnUdf0Masked.Builder buildBsnUdf0Masked() {
+        throw new UnsupportedOperationException("OFOxmBsnUdf0Masked not supported in version 1.0");
+    }
+    public OFOxmBsnUdf0Masked bsnUdf0Masked(UDF value, UDF mask) {
+        throw new UnsupportedOperationException("OFOxmBsnUdf0Masked not supported in version 1.0");
+    }
+
+    public OFOxmBsnUdf1.Builder buildBsnUdf1() {
+        throw new UnsupportedOperationException("OFOxmBsnUdf1 not supported in version 1.0");
+    }
+    public OFOxmBsnUdf1 bsnUdf1(UDF value) {
+        throw new UnsupportedOperationException("OFOxmBsnUdf1 not supported in version 1.0");
+    }
+
+    public OFOxmBsnUdf1Masked.Builder buildBsnUdf1Masked() {
+        throw new UnsupportedOperationException("OFOxmBsnUdf1Masked not supported in version 1.0");
+    }
+    public OFOxmBsnUdf1Masked bsnUdf1Masked(UDF value, UDF mask) {
+        throw new UnsupportedOperationException("OFOxmBsnUdf1Masked not supported in version 1.0");
+    }
+
+    public OFOxmBsnUdf2.Builder buildBsnUdf2() {
+        throw new UnsupportedOperationException("OFOxmBsnUdf2 not supported in version 1.0");
+    }
+    public OFOxmBsnUdf2 bsnUdf2(UDF value) {
+        throw new UnsupportedOperationException("OFOxmBsnUdf2 not supported in version 1.0");
+    }
+
+    public OFOxmBsnUdf2Masked.Builder buildBsnUdf2Masked() {
+        throw new UnsupportedOperationException("OFOxmBsnUdf2Masked not supported in version 1.0");
+    }
+    public OFOxmBsnUdf2Masked bsnUdf2Masked(UDF value, UDF mask) {
+        throw new UnsupportedOperationException("OFOxmBsnUdf2Masked not supported in version 1.0");
+    }
+
+    public OFOxmBsnUdf3.Builder buildBsnUdf3() {
+        throw new UnsupportedOperationException("OFOxmBsnUdf3 not supported in version 1.0");
+    }
+    public OFOxmBsnUdf3 bsnUdf3(UDF value) {
+        throw new UnsupportedOperationException("OFOxmBsnUdf3 not supported in version 1.0");
+    }
+
+    public OFOxmBsnUdf3Masked.Builder buildBsnUdf3Masked() {
+        throw new UnsupportedOperationException("OFOxmBsnUdf3Masked not supported in version 1.0");
+    }
+    public OFOxmBsnUdf3Masked bsnUdf3Masked(UDF value, UDF mask) {
+        throw new UnsupportedOperationException("OFOxmBsnUdf3Masked not supported in version 1.0");
+    }
+
+    public OFOxmBsnUdf4.Builder buildBsnUdf4() {
+        throw new UnsupportedOperationException("OFOxmBsnUdf4 not supported in version 1.0");
+    }
+    public OFOxmBsnUdf4 bsnUdf4(UDF value) {
+        throw new UnsupportedOperationException("OFOxmBsnUdf4 not supported in version 1.0");
+    }
+
+    public OFOxmBsnUdf4Masked.Builder buildBsnUdf4Masked() {
+        throw new UnsupportedOperationException("OFOxmBsnUdf4Masked not supported in version 1.0");
+    }
+    public OFOxmBsnUdf4Masked bsnUdf4Masked(UDF value, UDF mask) {
+        throw new UnsupportedOperationException("OFOxmBsnUdf4Masked not supported in version 1.0");
+    }
+
+    public OFOxmBsnUdf5.Builder buildBsnUdf5() {
+        throw new UnsupportedOperationException("OFOxmBsnUdf5 not supported in version 1.0");
+    }
+    public OFOxmBsnUdf5 bsnUdf5(UDF value) {
+        throw new UnsupportedOperationException("OFOxmBsnUdf5 not supported in version 1.0");
+    }
+
+    public OFOxmBsnUdf5Masked.Builder buildBsnUdf5Masked() {
+        throw new UnsupportedOperationException("OFOxmBsnUdf5Masked not supported in version 1.0");
+    }
+    public OFOxmBsnUdf5Masked bsnUdf5Masked(UDF value, UDF mask) {
+        throw new UnsupportedOperationException("OFOxmBsnUdf5Masked not supported in version 1.0");
+    }
+
+    public OFOxmBsnUdf6.Builder buildBsnUdf6() {
+        throw new UnsupportedOperationException("OFOxmBsnUdf6 not supported in version 1.0");
+    }
+    public OFOxmBsnUdf6 bsnUdf6(UDF value) {
+        throw new UnsupportedOperationException("OFOxmBsnUdf6 not supported in version 1.0");
+    }
+
+    public OFOxmBsnUdf6Masked.Builder buildBsnUdf6Masked() {
+        throw new UnsupportedOperationException("OFOxmBsnUdf6Masked not supported in version 1.0");
+    }
+    public OFOxmBsnUdf6Masked bsnUdf6Masked(UDF value, UDF mask) {
+        throw new UnsupportedOperationException("OFOxmBsnUdf6Masked not supported in version 1.0");
+    }
+
+    public OFOxmBsnUdf7.Builder buildBsnUdf7() {
+        throw new UnsupportedOperationException("OFOxmBsnUdf7 not supported in version 1.0");
+    }
+    public OFOxmBsnUdf7 bsnUdf7(UDF value) {
+        throw new UnsupportedOperationException("OFOxmBsnUdf7 not supported in version 1.0");
+    }
+
+    public OFOxmBsnUdf7Masked.Builder buildBsnUdf7Masked() {
+        throw new UnsupportedOperationException("OFOxmBsnUdf7Masked not supported in version 1.0");
+    }
+    public OFOxmBsnUdf7Masked bsnUdf7Masked(UDF value, UDF mask) {
+        throw new UnsupportedOperationException("OFOxmBsnUdf7Masked not supported in version 1.0");
+    }
+
+    public OFOxmBsnVlanXlatePortGroupId.Builder buildBsnVlanXlatePortGroupId() {
+        throw new UnsupportedOperationException("OFOxmBsnVlanXlatePortGroupId not supported in version 1.0");
+    }
+    public OFOxmBsnVlanXlatePortGroupId bsnVlanXlatePortGroupId(ClassId value) {
+        throw new UnsupportedOperationException("OFOxmBsnVlanXlatePortGroupId not supported in version 1.0");
+    }
+
+    public OFOxmBsnVlanXlatePortGroupIdMasked.Builder buildBsnVlanXlatePortGroupIdMasked() {
+        throw new UnsupportedOperationException("OFOxmBsnVlanXlatePortGroupIdMasked not supported in version 1.0");
+    }
+    public OFOxmBsnVlanXlatePortGroupIdMasked bsnVlanXlatePortGroupIdMasked(ClassId value, ClassId mask) {
+        throw new UnsupportedOperationException("OFOxmBsnVlanXlatePortGroupIdMasked not supported in version 1.0");
+    }
+
+    public OFOxmBsnVrf.Builder buildBsnVrf() {
+        throw new UnsupportedOperationException("OFOxmBsnVrf not supported in version 1.0");
+    }
+    public OFOxmBsnVrf bsnVrf(VRF value) {
+        throw new UnsupportedOperationException("OFOxmBsnVrf not supported in version 1.0");
+    }
+
+    public OFOxmBsnVrfMasked.Builder buildBsnVrfMasked() {
+        throw new UnsupportedOperationException("OFOxmBsnVrfMasked not supported in version 1.0");
+    }
+    public OFOxmBsnVrfMasked bsnVrfMasked(VRF value, VRF mask) {
+        throw new UnsupportedOperationException("OFOxmBsnVrfMasked not supported in version 1.0");
+    }
+
+    public OFOxmEthDst.Builder buildEthDst() {
+        throw new UnsupportedOperationException("OFOxmEthDst not supported in version 1.0");
+    }
+    public OFOxmEthDst ethDst(MacAddress value) {
+        throw new UnsupportedOperationException("OFOxmEthDst not supported in version 1.0");
+    }
+
+    public OFOxmEthDstMasked.Builder buildEthDstMasked() {
+        throw new UnsupportedOperationException("OFOxmEthDstMasked not supported in version 1.0");
+    }
+    public OFOxmEthDstMasked ethDstMasked(MacAddress value, MacAddress mask) {
+        throw new UnsupportedOperationException("OFOxmEthDstMasked not supported in version 1.0");
+    }
+
+    public OFOxmEthSrc.Builder buildEthSrc() {
+        throw new UnsupportedOperationException("OFOxmEthSrc not supported in version 1.0");
+    }
+    public OFOxmEthSrc ethSrc(MacAddress value) {
+        throw new UnsupportedOperationException("OFOxmEthSrc not supported in version 1.0");
+    }
+
+    public OFOxmEthSrcMasked.Builder buildEthSrcMasked() {
+        throw new UnsupportedOperationException("OFOxmEthSrcMasked not supported in version 1.0");
+    }
+    public OFOxmEthSrcMasked ethSrcMasked(MacAddress value, MacAddress mask) {
+        throw new UnsupportedOperationException("OFOxmEthSrcMasked not supported in version 1.0");
+    }
+
+    public OFOxmEthType.Builder buildEthType() {
+        throw new UnsupportedOperationException("OFOxmEthType not supported in version 1.0");
+    }
+    public OFOxmEthType ethType(EthType value) {
+        throw new UnsupportedOperationException("OFOxmEthType not supported in version 1.0");
+    }
+
+    public OFOxmEthTypeMasked.Builder buildEthTypeMasked() {
+        throw new UnsupportedOperationException("OFOxmEthTypeMasked not supported in version 1.0");
+    }
+    public OFOxmEthTypeMasked ethTypeMasked(EthType value, EthType mask) {
+        throw new UnsupportedOperationException("OFOxmEthTypeMasked not supported in version 1.0");
+    }
+
+    public OFOxmIcmpv4Code.Builder buildIcmpv4Code() {
+        throw new UnsupportedOperationException("OFOxmIcmpv4Code not supported in version 1.0");
+    }
+    public OFOxmIcmpv4Code icmpv4Code(ICMPv4Code value) {
+        throw new UnsupportedOperationException("OFOxmIcmpv4Code not supported in version 1.0");
+    }
+
+    public OFOxmIcmpv4CodeMasked.Builder buildIcmpv4CodeMasked() {
+        throw new UnsupportedOperationException("OFOxmIcmpv4CodeMasked not supported in version 1.0");
+    }
+    public OFOxmIcmpv4CodeMasked icmpv4CodeMasked(ICMPv4Code value, ICMPv4Code mask) {
+        throw new UnsupportedOperationException("OFOxmIcmpv4CodeMasked not supported in version 1.0");
+    }
+
+    public OFOxmIcmpv4Type.Builder buildIcmpv4Type() {
+        throw new UnsupportedOperationException("OFOxmIcmpv4Type not supported in version 1.0");
+    }
+    public OFOxmIcmpv4Type icmpv4Type(ICMPv4Type value) {
+        throw new UnsupportedOperationException("OFOxmIcmpv4Type not supported in version 1.0");
+    }
+
+    public OFOxmIcmpv4TypeMasked.Builder buildIcmpv4TypeMasked() {
+        throw new UnsupportedOperationException("OFOxmIcmpv4TypeMasked not supported in version 1.0");
+    }
+    public OFOxmIcmpv4TypeMasked icmpv4TypeMasked(ICMPv4Type value, ICMPv4Type mask) {
+        throw new UnsupportedOperationException("OFOxmIcmpv4TypeMasked not supported in version 1.0");
+    }
+
+    public OFOxmIcmpv6Code.Builder buildIcmpv6Code() {
+        throw new UnsupportedOperationException("OFOxmIcmpv6Code not supported in version 1.0");
+    }
+    public OFOxmIcmpv6Code icmpv6Code(U8 value) {
+        throw new UnsupportedOperationException("OFOxmIcmpv6Code not supported in version 1.0");
+    }
+
+    public OFOxmIcmpv6CodeMasked.Builder buildIcmpv6CodeMasked() {
+        throw new UnsupportedOperationException("OFOxmIcmpv6CodeMasked not supported in version 1.0");
+    }
+    public OFOxmIcmpv6CodeMasked icmpv6CodeMasked(U8 value, U8 mask) {
+        throw new UnsupportedOperationException("OFOxmIcmpv6CodeMasked not supported in version 1.0");
+    }
+
+    public OFOxmIcmpv6Type.Builder buildIcmpv6Type() {
+        throw new UnsupportedOperationException("OFOxmIcmpv6Type not supported in version 1.0");
+    }
+    public OFOxmIcmpv6Type icmpv6Type(U8 value) {
+        throw new UnsupportedOperationException("OFOxmIcmpv6Type not supported in version 1.0");
+    }
+
+    public OFOxmIcmpv6TypeMasked.Builder buildIcmpv6TypeMasked() {
+        throw new UnsupportedOperationException("OFOxmIcmpv6TypeMasked not supported in version 1.0");
+    }
+    public OFOxmIcmpv6TypeMasked icmpv6TypeMasked(U8 value, U8 mask) {
+        throw new UnsupportedOperationException("OFOxmIcmpv6TypeMasked not supported in version 1.0");
+    }
+
+    public OFOxmInPhyPort.Builder buildInPhyPort() {
+        throw new UnsupportedOperationException("OFOxmInPhyPort not supported in version 1.0");
+    }
+    public OFOxmInPhyPort inPhyPort(OFPort value) {
+        throw new UnsupportedOperationException("OFOxmInPhyPort not supported in version 1.0");
+    }
+
+    public OFOxmInPhyPortMasked.Builder buildInPhyPortMasked() {
+        throw new UnsupportedOperationException("OFOxmInPhyPortMasked not supported in version 1.0");
+    }
+    public OFOxmInPhyPortMasked inPhyPortMasked(OFPort value, OFPort mask) {
+        throw new UnsupportedOperationException("OFOxmInPhyPortMasked not supported in version 1.0");
+    }
+
+    public OFOxmInPort.Builder buildInPort() {
+        throw new UnsupportedOperationException("OFOxmInPort not supported in version 1.0");
+    }
+    public OFOxmInPort inPort(OFPort value) {
+        throw new UnsupportedOperationException("OFOxmInPort not supported in version 1.0");
+    }
+
+    public OFOxmInPortMasked.Builder buildInPortMasked() {
+        throw new UnsupportedOperationException("OFOxmInPortMasked not supported in version 1.0");
+    }
+    public OFOxmInPortMasked inPortMasked(OFPort value, OFPort mask) {
+        throw new UnsupportedOperationException("OFOxmInPortMasked not supported in version 1.0");
+    }
+
+    public OFOxmIpDscp.Builder buildIpDscp() {
+        throw new UnsupportedOperationException("OFOxmIpDscp not supported in version 1.0");
+    }
+    public OFOxmIpDscp ipDscp(IpDscp value) {
+        throw new UnsupportedOperationException("OFOxmIpDscp not supported in version 1.0");
+    }
+
+    public OFOxmIpDscpMasked.Builder buildIpDscpMasked() {
+        throw new UnsupportedOperationException("OFOxmIpDscpMasked not supported in version 1.0");
+    }
+    public OFOxmIpDscpMasked ipDscpMasked(IpDscp value, IpDscp mask) {
+        throw new UnsupportedOperationException("OFOxmIpDscpMasked not supported in version 1.0");
+    }
+
+    public OFOxmIpEcn.Builder buildIpEcn() {
+        throw new UnsupportedOperationException("OFOxmIpEcn not supported in version 1.0");
+    }
+    public OFOxmIpEcn ipEcn(IpEcn value) {
+        throw new UnsupportedOperationException("OFOxmIpEcn not supported in version 1.0");
+    }
+
+    public OFOxmIpEcnMasked.Builder buildIpEcnMasked() {
+        throw new UnsupportedOperationException("OFOxmIpEcnMasked not supported in version 1.0");
+    }
+    public OFOxmIpEcnMasked ipEcnMasked(IpEcn value, IpEcn mask) {
+        throw new UnsupportedOperationException("OFOxmIpEcnMasked not supported in version 1.0");
+    }
+
+    public OFOxmIpProto.Builder buildIpProto() {
+        throw new UnsupportedOperationException("OFOxmIpProto not supported in version 1.0");
+    }
+    public OFOxmIpProto ipProto(IpProtocol value) {
+        throw new UnsupportedOperationException("OFOxmIpProto not supported in version 1.0");
+    }
+
+    public OFOxmIpProtoMasked.Builder buildIpProtoMasked() {
+        throw new UnsupportedOperationException("OFOxmIpProtoMasked not supported in version 1.0");
+    }
+    public OFOxmIpProtoMasked ipProtoMasked(IpProtocol value, IpProtocol mask) {
+        throw new UnsupportedOperationException("OFOxmIpProtoMasked not supported in version 1.0");
+    }
+
+    public OFOxmIpv4Dst.Builder buildIpv4Dst() {
+        throw new UnsupportedOperationException("OFOxmIpv4Dst not supported in version 1.0");
+    }
+    public OFOxmIpv4Dst ipv4Dst(IPv4Address value) {
+        throw new UnsupportedOperationException("OFOxmIpv4Dst not supported in version 1.0");
+    }
+
+    public OFOxmIpv4DstMasked.Builder buildIpv4DstMasked() {
+        throw new UnsupportedOperationException("OFOxmIpv4DstMasked not supported in version 1.0");
+    }
+    public OFOxmIpv4DstMasked ipv4DstMasked(IPv4Address value, IPv4Address mask) {
+        throw new UnsupportedOperationException("OFOxmIpv4DstMasked not supported in version 1.0");
+    }
+
+    public OFOxmIpv4Src.Builder buildIpv4Src() {
+        throw new UnsupportedOperationException("OFOxmIpv4Src not supported in version 1.0");
+    }
+    public OFOxmIpv4Src ipv4Src(IPv4Address value) {
+        throw new UnsupportedOperationException("OFOxmIpv4Src not supported in version 1.0");
+    }
+
+    public OFOxmIpv4SrcMasked.Builder buildIpv4SrcMasked() {
+        throw new UnsupportedOperationException("OFOxmIpv4SrcMasked not supported in version 1.0");
+    }
+    public OFOxmIpv4SrcMasked ipv4SrcMasked(IPv4Address value, IPv4Address mask) {
+        throw new UnsupportedOperationException("OFOxmIpv4SrcMasked not supported in version 1.0");
+    }
+
+    public OFOxmIpv6Dst.Builder buildIpv6Dst() {
+        throw new UnsupportedOperationException("OFOxmIpv6Dst not supported in version 1.0");
+    }
+    public OFOxmIpv6Dst ipv6Dst(IPv6Address value) {
+        throw new UnsupportedOperationException("OFOxmIpv6Dst not supported in version 1.0");
+    }
+
+    public OFOxmIpv6DstMasked.Builder buildIpv6DstMasked() {
+        throw new UnsupportedOperationException("OFOxmIpv6DstMasked not supported in version 1.0");
+    }
+    public OFOxmIpv6DstMasked ipv6DstMasked(IPv6Address value, IPv6Address mask) {
+        throw new UnsupportedOperationException("OFOxmIpv6DstMasked not supported in version 1.0");
+    }
+
+    public OFOxmIpv6Flabel.Builder buildIpv6Flabel() {
+        throw new UnsupportedOperationException("OFOxmIpv6Flabel not supported in version 1.0");
+    }
+    public OFOxmIpv6Flabel ipv6Flabel(IPv6FlowLabel value) {
+        throw new UnsupportedOperationException("OFOxmIpv6Flabel not supported in version 1.0");
+    }
+
+    public OFOxmIpv6FlabelMasked.Builder buildIpv6FlabelMasked() {
+        throw new UnsupportedOperationException("OFOxmIpv6FlabelMasked not supported in version 1.0");
+    }
+    public OFOxmIpv6FlabelMasked ipv6FlabelMasked(IPv6FlowLabel value, IPv6FlowLabel mask) {
+        throw new UnsupportedOperationException("OFOxmIpv6FlabelMasked not supported in version 1.0");
+    }
+
+    public OFOxmIpv6NdSll.Builder buildIpv6NdSll() {
+        throw new UnsupportedOperationException("OFOxmIpv6NdSll not supported in version 1.0");
+    }
+    public OFOxmIpv6NdSll ipv6NdSll(MacAddress value) {
+        throw new UnsupportedOperationException("OFOxmIpv6NdSll not supported in version 1.0");
+    }
+
+    public OFOxmIpv6NdSllMasked.Builder buildIpv6NdSllMasked() {
+        throw new UnsupportedOperationException("OFOxmIpv6NdSllMasked not supported in version 1.0");
+    }
+    public OFOxmIpv6NdSllMasked ipv6NdSllMasked(MacAddress value, MacAddress mask) {
+        throw new UnsupportedOperationException("OFOxmIpv6NdSllMasked not supported in version 1.0");
+    }
+
+    public OFOxmIpv6NdTarget.Builder buildIpv6NdTarget() {
+        throw new UnsupportedOperationException("OFOxmIpv6NdTarget not supported in version 1.0");
+    }
+    public OFOxmIpv6NdTarget ipv6NdTarget(IPv6Address value) {
+        throw new UnsupportedOperationException("OFOxmIpv6NdTarget not supported in version 1.0");
+    }
+
+    public OFOxmIpv6NdTargetMasked.Builder buildIpv6NdTargetMasked() {
+        throw new UnsupportedOperationException("OFOxmIpv6NdTargetMasked not supported in version 1.0");
+    }
+    public OFOxmIpv6NdTargetMasked ipv6NdTargetMasked(IPv6Address value, IPv6Address mask) {
+        throw new UnsupportedOperationException("OFOxmIpv6NdTargetMasked not supported in version 1.0");
+    }
+
+    public OFOxmIpv6NdTll.Builder buildIpv6NdTll() {
+        throw new UnsupportedOperationException("OFOxmIpv6NdTll not supported in version 1.0");
+    }
+    public OFOxmIpv6NdTll ipv6NdTll(MacAddress value) {
+        throw new UnsupportedOperationException("OFOxmIpv6NdTll not supported in version 1.0");
+    }
+
+    public OFOxmIpv6NdTllMasked.Builder buildIpv6NdTllMasked() {
+        throw new UnsupportedOperationException("OFOxmIpv6NdTllMasked not supported in version 1.0");
+    }
+    public OFOxmIpv6NdTllMasked ipv6NdTllMasked(MacAddress value, MacAddress mask) {
+        throw new UnsupportedOperationException("OFOxmIpv6NdTllMasked not supported in version 1.0");
+    }
+
+    public OFOxmIpv6Src.Builder buildIpv6Src() {
+        throw new UnsupportedOperationException("OFOxmIpv6Src not supported in version 1.0");
+    }
+    public OFOxmIpv6Src ipv6Src(IPv6Address value) {
+        throw new UnsupportedOperationException("OFOxmIpv6Src not supported in version 1.0");
+    }
+
+    public OFOxmIpv6SrcMasked.Builder buildIpv6SrcMasked() {
+        throw new UnsupportedOperationException("OFOxmIpv6SrcMasked not supported in version 1.0");
+    }
+    public OFOxmIpv6SrcMasked ipv6SrcMasked(IPv6Address value, IPv6Address mask) {
+        throw new UnsupportedOperationException("OFOxmIpv6SrcMasked not supported in version 1.0");
+    }
+
+    public OFOxmMetadata.Builder buildMetadata() {
+        throw new UnsupportedOperationException("OFOxmMetadata not supported in version 1.0");
+    }
+    public OFOxmMetadata metadata(OFMetadata value) {
+        throw new UnsupportedOperationException("OFOxmMetadata not supported in version 1.0");
+    }
+
+    public OFOxmMetadataMasked.Builder buildMetadataMasked() {
+        throw new UnsupportedOperationException("OFOxmMetadataMasked not supported in version 1.0");
+    }
+    public OFOxmMetadataMasked metadataMasked(OFMetadata value, OFMetadata mask) {
+        throw new UnsupportedOperationException("OFOxmMetadataMasked not supported in version 1.0");
+    }
+
+    public OFOxmMplsLabel.Builder buildMplsLabel() {
+        throw new UnsupportedOperationException("OFOxmMplsLabel not supported in version 1.0");
+    }
+    public OFOxmMplsLabel mplsLabel(U32 value) {
+        throw new UnsupportedOperationException("OFOxmMplsLabel not supported in version 1.0");
+    }
+
+    public OFOxmMplsLabelMasked.Builder buildMplsLabelMasked() {
+        throw new UnsupportedOperationException("OFOxmMplsLabelMasked not supported in version 1.0");
+    }
+    public OFOxmMplsLabelMasked mplsLabelMasked(U32 value, U32 mask) {
+        throw new UnsupportedOperationException("OFOxmMplsLabelMasked not supported in version 1.0");
+    }
+
+    public OFOxmMplsTc.Builder buildMplsTc() {
+        throw new UnsupportedOperationException("OFOxmMplsTc not supported in version 1.0");
+    }
+    public OFOxmMplsTc mplsTc(U8 value) {
+        throw new UnsupportedOperationException("OFOxmMplsTc not supported in version 1.0");
+    }
+
+    public OFOxmMplsTcMasked.Builder buildMplsTcMasked() {
+        throw new UnsupportedOperationException("OFOxmMplsTcMasked not supported in version 1.0");
+    }
+    public OFOxmMplsTcMasked mplsTcMasked(U8 value, U8 mask) {
+        throw new UnsupportedOperationException("OFOxmMplsTcMasked not supported in version 1.0");
+    }
+
+    public OFOxmSctpDst.Builder buildSctpDst() {
+        throw new UnsupportedOperationException("OFOxmSctpDst not supported in version 1.0");
+    }
+    public OFOxmSctpDst sctpDst(TransportPort value) {
+        throw new UnsupportedOperationException("OFOxmSctpDst not supported in version 1.0");
+    }
+
+    public OFOxmSctpDstMasked.Builder buildSctpDstMasked() {
+        throw new UnsupportedOperationException("OFOxmSctpDstMasked not supported in version 1.0");
+    }
+    public OFOxmSctpDstMasked sctpDstMasked(TransportPort value, TransportPort mask) {
+        throw new UnsupportedOperationException("OFOxmSctpDstMasked not supported in version 1.0");
+    }
+
+    public OFOxmSctpSrc.Builder buildSctpSrc() {
+        throw new UnsupportedOperationException("OFOxmSctpSrc not supported in version 1.0");
+    }
+    public OFOxmSctpSrc sctpSrc(TransportPort value) {
+        throw new UnsupportedOperationException("OFOxmSctpSrc not supported in version 1.0");
+    }
+
+    public OFOxmSctpSrcMasked.Builder buildSctpSrcMasked() {
+        throw new UnsupportedOperationException("OFOxmSctpSrcMasked not supported in version 1.0");
+    }
+    public OFOxmSctpSrcMasked sctpSrcMasked(TransportPort value, TransportPort mask) {
+        throw new UnsupportedOperationException("OFOxmSctpSrcMasked not supported in version 1.0");
+    }
+
+    public OFOxmTcpDst.Builder buildTcpDst() {
+        throw new UnsupportedOperationException("OFOxmTcpDst not supported in version 1.0");
+    }
+    public OFOxmTcpDst tcpDst(TransportPort value) {
+        throw new UnsupportedOperationException("OFOxmTcpDst not supported in version 1.0");
+    }
+
+    public OFOxmTcpDstMasked.Builder buildTcpDstMasked() {
+        throw new UnsupportedOperationException("OFOxmTcpDstMasked not supported in version 1.0");
+    }
+    public OFOxmTcpDstMasked tcpDstMasked(TransportPort value, TransportPort mask) {
+        throw new UnsupportedOperationException("OFOxmTcpDstMasked not supported in version 1.0");
+    }
+
+    public OFOxmTcpSrc.Builder buildTcpSrc() {
+        throw new UnsupportedOperationException("OFOxmTcpSrc not supported in version 1.0");
+    }
+    public OFOxmTcpSrc tcpSrc(TransportPort value) {
+        throw new UnsupportedOperationException("OFOxmTcpSrc not supported in version 1.0");
+    }
+
+    public OFOxmTcpSrcMasked.Builder buildTcpSrcMasked() {
+        throw new UnsupportedOperationException("OFOxmTcpSrcMasked not supported in version 1.0");
+    }
+    public OFOxmTcpSrcMasked tcpSrcMasked(TransportPort value, TransportPort mask) {
+        throw new UnsupportedOperationException("OFOxmTcpSrcMasked not supported in version 1.0");
+    }
+
+    public OFOxmUdpDst.Builder buildUdpDst() {
+        throw new UnsupportedOperationException("OFOxmUdpDst not supported in version 1.0");
+    }
+    public OFOxmUdpDst udpDst(TransportPort value) {
+        throw new UnsupportedOperationException("OFOxmUdpDst not supported in version 1.0");
+    }
+
+    public OFOxmUdpDstMasked.Builder buildUdpDstMasked() {
+        throw new UnsupportedOperationException("OFOxmUdpDstMasked not supported in version 1.0");
+    }
+    public OFOxmUdpDstMasked udpDstMasked(TransportPort value, TransportPort mask) {
+        throw new UnsupportedOperationException("OFOxmUdpDstMasked not supported in version 1.0");
+    }
+
+    public OFOxmUdpSrc.Builder buildUdpSrc() {
+        throw new UnsupportedOperationException("OFOxmUdpSrc not supported in version 1.0");
+    }
+    public OFOxmUdpSrc udpSrc(TransportPort value) {
+        throw new UnsupportedOperationException("OFOxmUdpSrc not supported in version 1.0");
+    }
+
+    public OFOxmUdpSrcMasked.Builder buildUdpSrcMasked() {
+        throw new UnsupportedOperationException("OFOxmUdpSrcMasked not supported in version 1.0");
+    }
+    public OFOxmUdpSrcMasked udpSrcMasked(TransportPort value, TransportPort mask) {
+        throw new UnsupportedOperationException("OFOxmUdpSrcMasked not supported in version 1.0");
+    }
+
+    public OFOxmVlanPcp.Builder buildVlanPcp() {
+        throw new UnsupportedOperationException("OFOxmVlanPcp not supported in version 1.0");
+    }
+    public OFOxmVlanPcp vlanPcp(VlanPcp value) {
+        throw new UnsupportedOperationException("OFOxmVlanPcp not supported in version 1.0");
+    }
+
+    public OFOxmVlanPcpMasked.Builder buildVlanPcpMasked() {
+        throw new UnsupportedOperationException("OFOxmVlanPcpMasked not supported in version 1.0");
+    }
+    public OFOxmVlanPcpMasked vlanPcpMasked(VlanPcp value, VlanPcp mask) {
+        throw new UnsupportedOperationException("OFOxmVlanPcpMasked not supported in version 1.0");
+    }
+
+    public OFOxmVlanVid.Builder buildVlanVid() {
+        throw new UnsupportedOperationException("OFOxmVlanVid not supported in version 1.0");
+    }
+    public OFOxmVlanVid vlanVid(OFVlanVidMatch value) {
+        throw new UnsupportedOperationException("OFOxmVlanVid not supported in version 1.0");
+    }
+
+    public OFOxmVlanVidMasked.Builder buildVlanVidMasked() {
+        throw new UnsupportedOperationException("OFOxmVlanVidMasked not supported in version 1.0");
+    }
+    public OFOxmVlanVidMasked vlanVidMasked(OFVlanVidMatch value, OFVlanVidMatch mask) {
+        throw new UnsupportedOperationException("OFOxmVlanVidMasked not supported in version 1.0");
+    }
+
+    public OFOxmTunnelId.Builder buildTunnelId() {
+        throw new UnsupportedOperationException("OFOxmTunnelId not supported in version 1.0");
+    }
+    public OFOxmTunnelId tunnelId(U64 value) {
+        throw new UnsupportedOperationException("OFOxmTunnelId not supported in version 1.0");
+    }
+
+    public OFOxmTunnelIdMasked.Builder buildTunnelIdMasked() {
+        throw new UnsupportedOperationException("OFOxmTunnelIdMasked not supported in version 1.0");
+    }
+    public OFOxmTunnelIdMasked tunnelIdMasked(U64 value, U64 mask) {
+        throw new UnsupportedOperationException("OFOxmTunnelIdMasked not supported in version 1.0");
+    }
+
+    public OFMessageReader<OFOxm<?>> getReader() {
+        throw new UnsupportedOperationException("Reader<OFOxm<?>> not supported in version 1.0");
+    }
+
+    @SuppressWarnings("unchecked")
+    public <F extends OFValueType<F>> OFOxm<F> fromValue(F value, MatchField<F> field) {
+        switch (field.id) {
+            case ARP_OP:
+                return (OFOxm<F>)((Object)arpOp((ArpOpcode)((Object)value)));
+            case ARP_SHA:
+                return (OFOxm<F>)((Object)arpSha((MacAddress)((Object)value)));
+            case ARP_SPA:
+                return (OFOxm<F>)((Object)arpSpa((IPv4Address)((Object)value)));
+            case ARP_THA:
+                return (OFOxm<F>)((Object)arpTha((MacAddress)((Object)value)));
+            case ARP_TPA:
+                return (OFOxm<F>)((Object)arpTpa((IPv4Address)((Object)value)));
+            case BSN_EGR_PORT_GROUP_ID:
+                return (OFOxm<F>)((Object)bsnEgrPortGroupId((ClassId)((Object)value)));
+            case BSN_GLOBAL_VRF_ALLOWED:
+                return (OFOxm<F>)((Object)bsnGlobalVrfAllowed((OFBooleanValue)((Object)value)));
+            case BSN_IN_PORTS_128:
+                return (OFOxm<F>)((Object)bsnInPorts128((OFBitMask128)((Object)value)));
+            case BSN_L3_DST_CLASS_ID:
+                return (OFOxm<F>)((Object)bsnL3DstClassId((ClassId)((Object)value)));
+            case BSN_L3_INTERFACE_CLASS_ID:
+                return (OFOxm<F>)((Object)bsnL3InterfaceClassId((ClassId)((Object)value)));
+            case BSN_L3_SRC_CLASS_ID:
+                return (OFOxm<F>)((Object)bsnL3SrcClassId((ClassId)((Object)value)));
+            case BSN_LAG_ID:
+                return (OFOxm<F>)((Object)bsnLagId((LagId)((Object)value)));
+            case BSN_TCP_FLAGS:
+                return (OFOxm<F>)((Object)bsnTcpFlags((U16)((Object)value)));
+            case BSN_UDF0:
+                return (OFOxm<F>)((Object)bsnUdf0((UDF)((Object)value)));
+            case BSN_UDF1:
+                return (OFOxm<F>)((Object)bsnUdf1((UDF)((Object)value)));
+            case BSN_UDF2:
+                return (OFOxm<F>)((Object)bsnUdf2((UDF)((Object)value)));
+            case BSN_UDF3:
+                return (OFOxm<F>)((Object)bsnUdf3((UDF)((Object)value)));
+            case BSN_UDF4:
+                return (OFOxm<F>)((Object)bsnUdf4((UDF)((Object)value)));
+            case BSN_UDF5:
+                return (OFOxm<F>)((Object)bsnUdf5((UDF)((Object)value)));
+            case BSN_UDF6:
+                return (OFOxm<F>)((Object)bsnUdf6((UDF)((Object)value)));
+            case BSN_UDF7:
+                return (OFOxm<F>)((Object)bsnUdf7((UDF)((Object)value)));
+            case BSN_VLAN_XLATE_PORT_GROUP_ID:
+                return (OFOxm<F>)((Object)bsnVlanXlatePortGroupId((ClassId)((Object)value)));
+            case BSN_VRF:
+                return (OFOxm<F>)((Object)bsnVrf((VRF)((Object)value)));
+            case ETH_DST:
+                return (OFOxm<F>)((Object)ethDst((MacAddress)((Object)value)));
+            case ETH_SRC:
+                return (OFOxm<F>)((Object)ethSrc((MacAddress)((Object)value)));
+            case ETH_TYPE:
+                return (OFOxm<F>)((Object)ethType((EthType)((Object)value)));
+            case ICMPV4_CODE:
+                return (OFOxm<F>)((Object)icmpv4Code((ICMPv4Code)((Object)value)));
+            case ICMPV4_TYPE:
+                return (OFOxm<F>)((Object)icmpv4Type((ICMPv4Type)((Object)value)));
+            case ICMPV6_CODE:
+                return (OFOxm<F>)((Object)icmpv6Code((U8)((Object)value)));
+            case ICMPV6_TYPE:
+                return (OFOxm<F>)((Object)icmpv6Type((U8)((Object)value)));
+            case IN_PHY_PORT:
+                return (OFOxm<F>)((Object)inPhyPort((OFPort)((Object)value)));
+            case IN_PORT:
+                return (OFOxm<F>)((Object)inPort((OFPort)((Object)value)));
+            case IP_DSCP:
+                return (OFOxm<F>)((Object)ipDscp((IpDscp)((Object)value)));
+            case IP_ECN:
+                return (OFOxm<F>)((Object)ipEcn((IpEcn)((Object)value)));
+            case IP_PROTO:
+                return (OFOxm<F>)((Object)ipProto((IpProtocol)((Object)value)));
+            case IPV4_DST:
+                return (OFOxm<F>)((Object)ipv4Dst((IPv4Address)((Object)value)));
+            case IPV4_SRC:
+                return (OFOxm<F>)((Object)ipv4Src((IPv4Address)((Object)value)));
+            case IPV6_DST:
+                return (OFOxm<F>)((Object)ipv6Dst((IPv6Address)((Object)value)));
+            case IPV6_FLABEL:
+                return (OFOxm<F>)((Object)ipv6Flabel((IPv6FlowLabel)((Object)value)));
+            case IPV6_ND_SLL:
+                return (OFOxm<F>)((Object)ipv6NdSll((MacAddress)((Object)value)));
+            case IPV6_ND_TARGET:
+                return (OFOxm<F>)((Object)ipv6NdTarget((IPv6Address)((Object)value)));
+            case IPV6_ND_TLL:
+                return (OFOxm<F>)((Object)ipv6NdTll((MacAddress)((Object)value)));
+            case IPV6_SRC:
+                return (OFOxm<F>)((Object)ipv6Src((IPv6Address)((Object)value)));
+            case METADATA:
+                return (OFOxm<F>)((Object)metadata((OFMetadata)((Object)value)));
+            case MPLS_LABEL:
+                return (OFOxm<F>)((Object)mplsLabel((U32)((Object)value)));
+            case MPLS_TC:
+                return (OFOxm<F>)((Object)mplsTc((U8)((Object)value)));
+            case SCTP_DST:
+                return (OFOxm<F>)((Object)sctpDst((TransportPort)((Object)value)));
+            case SCTP_SRC:
+                return (OFOxm<F>)((Object)sctpSrc((TransportPort)((Object)value)));
+            case TCP_DST:
+                return (OFOxm<F>)((Object)tcpDst((TransportPort)((Object)value)));
+            case TCP_SRC:
+                return (OFOxm<F>)((Object)tcpSrc((TransportPort)((Object)value)));
+            case UDP_DST:
+                return (OFOxm<F>)((Object)udpDst((TransportPort)((Object)value)));
+            case UDP_SRC:
+                return (OFOxm<F>)((Object)udpSrc((TransportPort)((Object)value)));
+            case VLAN_PCP:
+                return (OFOxm<F>)((Object)vlanPcp((VlanPcp)((Object)value)));
+            case VLAN_VID:
+                return (OFOxm<F>)((Object)vlanVid((OFVlanVidMatch)((Object)value)));
+            case TUNNEL_ID:
+                return (OFOxm<F>)((Object)tunnelId((U64)((Object)value)));
+            default:
+                throw new IllegalArgumentException("No OXM known for match field " + field);
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    public <F extends OFValueType<F>> OFOxm<F> fromValueAndMask(F value, F mask, MatchField<F> field) {
+        switch (field.id) {
+            case ARP_OP:
+                return (OFOxm<F>)((Object)arpOpMasked((ArpOpcode)((Object)value), (ArpOpcode)((Object)mask)));
+            case ARP_SHA:
+                return (OFOxm<F>)((Object)arpShaMasked((MacAddress)((Object)value), (MacAddress)((Object)mask)));
+            case ARP_SPA:
+                return (OFOxm<F>)((Object)arpSpaMasked((IPv4Address)((Object)value), (IPv4Address)((Object)mask)));
+            case ARP_THA:
+                return (OFOxm<F>)((Object)arpThaMasked((MacAddress)((Object)value), (MacAddress)((Object)mask)));
+            case ARP_TPA:
+                return (OFOxm<F>)((Object)arpTpaMasked((IPv4Address)((Object)value), (IPv4Address)((Object)mask)));
+            case BSN_EGR_PORT_GROUP_ID:
+                return (OFOxm<F>)((Object)bsnEgrPortGroupIdMasked((ClassId)((Object)value), (ClassId)((Object)mask)));
+            case BSN_GLOBAL_VRF_ALLOWED:
+                return (OFOxm<F>)((Object)bsnGlobalVrfAllowedMasked((OFBooleanValue)((Object)value), (OFBooleanValue)((Object)mask)));
+            case BSN_IN_PORTS_128:
+                return (OFOxm<F>)((Object)bsnInPorts128Masked((OFBitMask128)((Object)value), (OFBitMask128)((Object)mask)));
+            case BSN_L3_DST_CLASS_ID:
+                return (OFOxm<F>)((Object)bsnL3DstClassIdMasked((ClassId)((Object)value), (ClassId)((Object)mask)));
+            case BSN_L3_INTERFACE_CLASS_ID:
+                return (OFOxm<F>)((Object)bsnL3InterfaceClassIdMasked((ClassId)((Object)value), (ClassId)((Object)mask)));
+            case BSN_L3_SRC_CLASS_ID:
+                return (OFOxm<F>)((Object)bsnL3SrcClassIdMasked((ClassId)((Object)value), (ClassId)((Object)mask)));
+            case BSN_LAG_ID:
+                return (OFOxm<F>)((Object)bsnLagIdMasked((LagId)((Object)value), (LagId)((Object)mask)));
+            case BSN_TCP_FLAGS:
+                return (OFOxm<F>)((Object)bsnTcpFlagsMasked((U16)((Object)value), (U16)((Object)mask)));
+            case BSN_UDF0:
+                return (OFOxm<F>)((Object)bsnUdf0Masked((UDF)((Object)value), (UDF)((Object)mask)));
+            case BSN_UDF1:
+                return (OFOxm<F>)((Object)bsnUdf1Masked((UDF)((Object)value), (UDF)((Object)mask)));
+            case BSN_UDF2:
+                return (OFOxm<F>)((Object)bsnUdf2Masked((UDF)((Object)value), (UDF)((Object)mask)));
+            case BSN_UDF3:
+                return (OFOxm<F>)((Object)bsnUdf3Masked((UDF)((Object)value), (UDF)((Object)mask)));
+            case BSN_UDF4:
+                return (OFOxm<F>)((Object)bsnUdf4Masked((UDF)((Object)value), (UDF)((Object)mask)));
+            case BSN_UDF5:
+                return (OFOxm<F>)((Object)bsnUdf5Masked((UDF)((Object)value), (UDF)((Object)mask)));
+            case BSN_UDF6:
+                return (OFOxm<F>)((Object)bsnUdf6Masked((UDF)((Object)value), (UDF)((Object)mask)));
+            case BSN_UDF7:
+                return (OFOxm<F>)((Object)bsnUdf7Masked((UDF)((Object)value), (UDF)((Object)mask)));
+            case BSN_VLAN_XLATE_PORT_GROUP_ID:
+                return (OFOxm<F>)((Object)bsnVlanXlatePortGroupIdMasked((ClassId)((Object)value), (ClassId)((Object)mask)));
+            case BSN_VRF:
+                return (OFOxm<F>)((Object)bsnVrfMasked((VRF)((Object)value), (VRF)((Object)mask)));
+            case ETH_DST:
+                return (OFOxm<F>)((Object)ethDstMasked((MacAddress)((Object)value), (MacAddress)((Object)mask)));
+            case ETH_SRC:
+                return (OFOxm<F>)((Object)ethSrcMasked((MacAddress)((Object)value), (MacAddress)((Object)mask)));
+            case ETH_TYPE:
+                return (OFOxm<F>)((Object)ethTypeMasked((EthType)((Object)value), (EthType)((Object)mask)));
+            case ICMPV4_CODE:
+                return (OFOxm<F>)((Object)icmpv4CodeMasked((ICMPv4Code)((Object)value), (ICMPv4Code)((Object)mask)));
+            case ICMPV4_TYPE:
+                return (OFOxm<F>)((Object)icmpv4TypeMasked((ICMPv4Type)((Object)value), (ICMPv4Type)((Object)mask)));
+            case ICMPV6_CODE:
+                return (OFOxm<F>)((Object)icmpv6CodeMasked((U8)((Object)value), (U8)((Object)mask)));
+            case ICMPV6_TYPE:
+                return (OFOxm<F>)((Object)icmpv6TypeMasked((U8)((Object)value), (U8)((Object)mask)));
+            case IN_PHY_PORT:
+                return (OFOxm<F>)((Object)inPhyPortMasked((OFPort)((Object)value), (OFPort)((Object)mask)));
+            case IN_PORT:
+                return (OFOxm<F>)((Object)inPortMasked((OFPort)((Object)value), (OFPort)((Object)mask)));
+            case IP_DSCP:
+                return (OFOxm<F>)((Object)ipDscpMasked((IpDscp)((Object)value), (IpDscp)((Object)mask)));
+            case IP_ECN:
+                return (OFOxm<F>)((Object)ipEcnMasked((IpEcn)((Object)value), (IpEcn)((Object)mask)));
+            case IP_PROTO:
+                return (OFOxm<F>)((Object)ipProtoMasked((IpProtocol)((Object)value), (IpProtocol)((Object)mask)));
+            case IPV4_DST:
+                return (OFOxm<F>)((Object)ipv4DstMasked((IPv4Address)((Object)value), (IPv4Address)((Object)mask)));
+            case IPV4_SRC:
+                return (OFOxm<F>)((Object)ipv4SrcMasked((IPv4Address)((Object)value), (IPv4Address)((Object)mask)));
+            case IPV6_DST:
+                return (OFOxm<F>)((Object)ipv6DstMasked((IPv6Address)((Object)value), (IPv6Address)((Object)mask)));
+            case IPV6_FLABEL:
+                return (OFOxm<F>)((Object)ipv6FlabelMasked((IPv6FlowLabel)((Object)value), (IPv6FlowLabel)((Object)mask)));
+            case IPV6_ND_SLL:
+                return (OFOxm<F>)((Object)ipv6NdSllMasked((MacAddress)((Object)value), (MacAddress)((Object)mask)));
+            case IPV6_ND_TARGET:
+                return (OFOxm<F>)((Object)ipv6NdTargetMasked((IPv6Address)((Object)value), (IPv6Address)((Object)mask)));
+            case IPV6_ND_TLL:
+                return (OFOxm<F>)((Object)ipv6NdTllMasked((MacAddress)((Object)value), (MacAddress)((Object)mask)));
+            case IPV6_SRC:
+                return (OFOxm<F>)((Object)ipv6SrcMasked((IPv6Address)((Object)value), (IPv6Address)((Object)mask)));
+            case METADATA:
+                return (OFOxm<F>)((Object)metadataMasked((OFMetadata)((Object)value), (OFMetadata)((Object)mask)));
+            case MPLS_LABEL:
+                return (OFOxm<F>)((Object)mplsLabelMasked((U32)((Object)value), (U32)((Object)mask)));
+            case MPLS_TC:
+                return (OFOxm<F>)((Object)mplsTcMasked((U8)((Object)value), (U8)((Object)mask)));
+            case SCTP_DST:
+                return (OFOxm<F>)((Object)sctpDstMasked((TransportPort)((Object)value), (TransportPort)((Object)mask)));
+            case SCTP_SRC:
+                return (OFOxm<F>)((Object)sctpSrcMasked((TransportPort)((Object)value), (TransportPort)((Object)mask)));
+            case TCP_DST:
+                return (OFOxm<F>)((Object)tcpDstMasked((TransportPort)((Object)value), (TransportPort)((Object)mask)));
+            case TCP_SRC:
+                return (OFOxm<F>)((Object)tcpSrcMasked((TransportPort)((Object)value), (TransportPort)((Object)mask)));
+            case UDP_DST:
+                return (OFOxm<F>)((Object)udpDstMasked((TransportPort)((Object)value), (TransportPort)((Object)mask)));
+            case UDP_SRC:
+                return (OFOxm<F>)((Object)udpSrcMasked((TransportPort)((Object)value), (TransportPort)((Object)mask)));
+            case VLAN_PCP:
+                return (OFOxm<F>)((Object)vlanPcpMasked((VlanPcp)((Object)value), (VlanPcp)((Object)mask)));
+            case VLAN_VID:
+                return (OFOxm<F>)((Object)vlanVidMasked((OFVlanVidMatch)((Object)value), (OFVlanVidMatch)((Object)mask)));
+            case TUNNEL_ID:
+                return (OFOxm<F>)((Object)tunnelIdMasked((U64)((Object)value), (U64)((Object)mask)));
+            default:
+                throw new IllegalArgumentException("No OXM known for match field " + field);
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    public <F extends OFValueType<F>> OFOxm<F> fromMasked(Masked<F> masked, MatchField<F> field) {
+        switch (field.id) {
+            case ARP_OP:
+                return (OFOxm<F>)((Object)arpOpMasked((ArpOpcode)((Object)(masked.getValue())), (ArpOpcode)((Object)(masked.getMask()))));
+            case ARP_SHA:
+                return (OFOxm<F>)((Object)arpShaMasked((MacAddress)((Object)(masked.getValue())), (MacAddress)((Object)(masked.getMask()))));
+            case ARP_SPA:
+                return (OFOxm<F>)((Object)arpSpaMasked((IPv4Address)((Object)(masked.getValue())), (IPv4Address)((Object)(masked.getMask()))));
+            case ARP_THA:
+                return (OFOxm<F>)((Object)arpThaMasked((MacAddress)((Object)(masked.getValue())), (MacAddress)((Object)(masked.getMask()))));
+            case ARP_TPA:
+                return (OFOxm<F>)((Object)arpTpaMasked((IPv4Address)((Object)(masked.getValue())), (IPv4Address)((Object)(masked.getMask()))));
+            case BSN_EGR_PORT_GROUP_ID:
+                return (OFOxm<F>)((Object)bsnEgrPortGroupIdMasked((ClassId)((Object)(masked.getValue())), (ClassId)((Object)(masked.getMask()))));
+            case BSN_GLOBAL_VRF_ALLOWED:
+                return (OFOxm<F>)((Object)bsnGlobalVrfAllowedMasked((OFBooleanValue)((Object)(masked.getValue())), (OFBooleanValue)((Object)(masked.getMask()))));
+            case BSN_IN_PORTS_128:
+                return (OFOxm<F>)((Object)bsnInPorts128Masked((OFBitMask128)((Object)(masked.getValue())), (OFBitMask128)((Object)(masked.getMask()))));
+            case BSN_L3_DST_CLASS_ID:
+                return (OFOxm<F>)((Object)bsnL3DstClassIdMasked((ClassId)((Object)(masked.getValue())), (ClassId)((Object)(masked.getMask()))));
+            case BSN_L3_INTERFACE_CLASS_ID:
+                return (OFOxm<F>)((Object)bsnL3InterfaceClassIdMasked((ClassId)((Object)(masked.getValue())), (ClassId)((Object)(masked.getMask()))));
+            case BSN_L3_SRC_CLASS_ID:
+                return (OFOxm<F>)((Object)bsnL3SrcClassIdMasked((ClassId)((Object)(masked.getValue())), (ClassId)((Object)(masked.getMask()))));
+            case BSN_LAG_ID:
+                return (OFOxm<F>)((Object)bsnLagIdMasked((LagId)((Object)(masked.getValue())), (LagId)((Object)(masked.getMask()))));
+            case BSN_TCP_FLAGS:
+                return (OFOxm<F>)((Object)bsnTcpFlagsMasked((U16)((Object)(masked.getValue())), (U16)((Object)(masked.getMask()))));
+            case BSN_UDF0:
+                return (OFOxm<F>)((Object)bsnUdf0Masked((UDF)((Object)(masked.getValue())), (UDF)((Object)(masked.getMask()))));
+            case BSN_UDF1:
+                return (OFOxm<F>)((Object)bsnUdf1Masked((UDF)((Object)(masked.getValue())), (UDF)((Object)(masked.getMask()))));
+            case BSN_UDF2:
+                return (OFOxm<F>)((Object)bsnUdf2Masked((UDF)((Object)(masked.getValue())), (UDF)((Object)(masked.getMask()))));
+            case BSN_UDF3:
+                return (OFOxm<F>)((Object)bsnUdf3Masked((UDF)((Object)(masked.getValue())), (UDF)((Object)(masked.getMask()))));
+            case BSN_UDF4:
+                return (OFOxm<F>)((Object)bsnUdf4Masked((UDF)((Object)(masked.getValue())), (UDF)((Object)(masked.getMask()))));
+            case BSN_UDF5:
+                return (OFOxm<F>)((Object)bsnUdf5Masked((UDF)((Object)(masked.getValue())), (UDF)((Object)(masked.getMask()))));
+            case BSN_UDF6:
+                return (OFOxm<F>)((Object)bsnUdf6Masked((UDF)((Object)(masked.getValue())), (UDF)((Object)(masked.getMask()))));
+            case BSN_UDF7:
+                return (OFOxm<F>)((Object)bsnUdf7Masked((UDF)((Object)(masked.getValue())), (UDF)((Object)(masked.getMask()))));
+            case BSN_VLAN_XLATE_PORT_GROUP_ID:
+                return (OFOxm<F>)((Object)bsnVlanXlatePortGroupIdMasked((ClassId)((Object)(masked.getValue())), (ClassId)((Object)(masked.getMask()))));
+            case BSN_VRF:
+                return (OFOxm<F>)((Object)bsnVrfMasked((VRF)((Object)(masked.getValue())), (VRF)((Object)(masked.getMask()))));
+            case ETH_DST:
+                return (OFOxm<F>)((Object)ethDstMasked((MacAddress)((Object)(masked.getValue())), (MacAddress)((Object)(masked.getMask()))));
+            case ETH_SRC:
+                return (OFOxm<F>)((Object)ethSrcMasked((MacAddress)((Object)(masked.getValue())), (MacAddress)((Object)(masked.getMask()))));
+            case ETH_TYPE:
+                return (OFOxm<F>)((Object)ethTypeMasked((EthType)((Object)(masked.getValue())), (EthType)((Object)(masked.getMask()))));
+            case ICMPV4_CODE:
+                return (OFOxm<F>)((Object)icmpv4CodeMasked((ICMPv4Code)((Object)(masked.getValue())), (ICMPv4Code)((Object)(masked.getMask()))));
+            case ICMPV4_TYPE:
+                return (OFOxm<F>)((Object)icmpv4TypeMasked((ICMPv4Type)((Object)(masked.getValue())), (ICMPv4Type)((Object)(masked.getMask()))));
+            case ICMPV6_CODE:
+                return (OFOxm<F>)((Object)icmpv6CodeMasked((U8)((Object)(masked.getValue())), (U8)((Object)(masked.getMask()))));
+            case ICMPV6_TYPE:
+                return (OFOxm<F>)((Object)icmpv6TypeMasked((U8)((Object)(masked.getValue())), (U8)((Object)(masked.getMask()))));
+            case IN_PHY_PORT:
+                return (OFOxm<F>)((Object)inPhyPortMasked((OFPort)((Object)(masked.getValue())), (OFPort)((Object)(masked.getMask()))));
+            case IN_PORT:
+                return (OFOxm<F>)((Object)inPortMasked((OFPort)((Object)(masked.getValue())), (OFPort)((Object)(masked.getMask()))));
+            case IP_DSCP:
+                return (OFOxm<F>)((Object)ipDscpMasked((IpDscp)((Object)(masked.getValue())), (IpDscp)((Object)(masked.getMask()))));
+            case IP_ECN:
+                return (OFOxm<F>)((Object)ipEcnMasked((IpEcn)((Object)(masked.getValue())), (IpEcn)((Object)(masked.getMask()))));
+            case IP_PROTO:
+                return (OFOxm<F>)((Object)ipProtoMasked((IpProtocol)((Object)(masked.getValue())), (IpProtocol)((Object)(masked.getMask()))));
+            case IPV4_DST:
+                return (OFOxm<F>)((Object)ipv4DstMasked((IPv4Address)((Object)(masked.getValue())), (IPv4Address)((Object)(masked.getMask()))));
+            case IPV4_SRC:
+                return (OFOxm<F>)((Object)ipv4SrcMasked((IPv4Address)((Object)(masked.getValue())), (IPv4Address)((Object)(masked.getMask()))));
+            case IPV6_DST:
+                return (OFOxm<F>)((Object)ipv6DstMasked((IPv6Address)((Object)(masked.getValue())), (IPv6Address)((Object)(masked.getMask()))));
+            case IPV6_FLABEL:
+                return (OFOxm<F>)((Object)ipv6FlabelMasked((IPv6FlowLabel)((Object)(masked.getValue())), (IPv6FlowLabel)((Object)(masked.getMask()))));
+            case IPV6_ND_SLL:
+                return (OFOxm<F>)((Object)ipv6NdSllMasked((MacAddress)((Object)(masked.getValue())), (MacAddress)((Object)(masked.getMask()))));
+            case IPV6_ND_TARGET:
+                return (OFOxm<F>)((Object)ipv6NdTargetMasked((IPv6Address)((Object)(masked.getValue())), (IPv6Address)((Object)(masked.getMask()))));
+            case IPV6_ND_TLL:
+                return (OFOxm<F>)((Object)ipv6NdTllMasked((MacAddress)((Object)(masked.getValue())), (MacAddress)((Object)(masked.getMask()))));
+            case IPV6_SRC:
+                return (OFOxm<F>)((Object)ipv6SrcMasked((IPv6Address)((Object)(masked.getValue())), (IPv6Address)((Object)(masked.getMask()))));
+            case METADATA:
+                return (OFOxm<F>)((Object)metadataMasked((OFMetadata)((Object)(masked.getValue())), (OFMetadata)((Object)(masked.getMask()))));
+            case MPLS_LABEL:
+                return (OFOxm<F>)((Object)mplsLabelMasked((U32)((Object)(masked.getValue())), (U32)((Object)(masked.getMask()))));
+            case MPLS_TC:
+                return (OFOxm<F>)((Object)mplsTcMasked((U8)((Object)(masked.getValue())), (U8)((Object)(masked.getMask()))));
+            case SCTP_DST:
+                return (OFOxm<F>)((Object)sctpDstMasked((TransportPort)((Object)(masked.getValue())), (TransportPort)((Object)(masked.getMask()))));
+            case SCTP_SRC:
+                return (OFOxm<F>)((Object)sctpSrcMasked((TransportPort)((Object)(masked.getValue())), (TransportPort)((Object)(masked.getMask()))));
+            case TCP_DST:
+                return (OFOxm<F>)((Object)tcpDstMasked((TransportPort)((Object)(masked.getValue())), (TransportPort)((Object)(masked.getMask()))));
+            case TCP_SRC:
+                return (OFOxm<F>)((Object)tcpSrcMasked((TransportPort)((Object)(masked.getValue())), (TransportPort)((Object)(masked.getMask()))));
+            case UDP_DST:
+                return (OFOxm<F>)((Object)udpDstMasked((TransportPort)((Object)(masked.getValue())), (TransportPort)((Object)(masked.getMask()))));
+            case UDP_SRC:
+                return (OFOxm<F>)((Object)udpSrcMasked((TransportPort)((Object)(masked.getValue())), (TransportPort)((Object)(masked.getMask()))));
+            case VLAN_PCP:
+                return (OFOxm<F>)((Object)vlanPcpMasked((VlanPcp)((Object)(masked.getValue())), (VlanPcp)((Object)(masked.getMask()))));
+            case VLAN_VID:
+                return (OFOxm<F>)((Object)vlanVidMasked((OFVlanVidMatch)((Object)(masked.getValue())), (OFVlanVidMatch)((Object)(masked.getMask()))));
+            case TUNNEL_ID:
+                return (OFOxm<F>)((Object)tunnelIdMasked((U64)((Object)(masked.getValue())), (U64)((Object)(masked.getMask()))));
+            default:
+                return null;
+        }
+    }
+
+    public OFVersion getVersion() {
+            return OFVersion.OF_10;
+    }
+}
