Updated Java types according to new design
diff --git a/java_gen/pre-written/src/main/java/org/openflow/types/EthType.java b/java_gen/pre-written/src/main/java/org/openflow/types/EthType.java
index d319e57..b86a38f 100644
--- a/java_gen/pre-written/src/main/java/org/openflow/types/EthType.java
+++ b/java_gen/pre-written/src/main/java/org/openflow/types/EthType.java
@@ -1,5 +1,266 @@
 package org.openflow.types;
 
-public class EthType {
+import org.jboss.netty.buffer.ChannelBuffer;
+import org.openflow.exceptions.OFParseError;
+
+/**
+ * EtherType field representation.
+ * 
+ * @author Yotam Harchol (yotam.harchol@bigswitch.com)
+ */
+public class EthType implements OFValueType {
+    static final int LENGTH = 2;
+
+    private final int rawValue;
+
+    static final int ETH_TYPE_VAL_IPv4              = 0x0800; // Internet Protocol version 4 (IPv4)
+    static final int ETH_TYPE_VAL_ARP               = 0x0806; // Address Resolution Protocol (ARP)
+    static final int ETH_TYPE_VAL_WAKE_ON_LAN       = 0x0842; // Wake-on-LAN[3]
+    static final int ETH_TYPE_VAL_TRILL             = 0x22F3; // IETF TRILL Protocol
+    static final int ETH_TYPE_VAL_DECNET_IV         = 0x6003; // DECnet Phase IV
+    static final int ETH_TYPE_VAL_REV_ARP           = 0x8035; // Reverse Address Resolution Protocol
+    static final int ETH_TYPE_VAL_APPLE_TALK        = 0x809B; // AppleTalk (Ethertalk)
+    static final int ETH_TYPE_VAL_APPLE_TALK_ARP    = 0x80F3; // AppleTalk Address Resolution Protocol (AARP)
+    static final int ETH_TYPE_VAL_VLAN_FRAME        = 0x8100; // VLAN-tagged frame (IEEE 802.1Q) & Shortest Path Bridging IEEE 802.1aq[4]
+    static final int ETH_TYPE_VAL_IPX_8137          = 0x8137; // IPX
+    static final int ETH_TYPE_VAL_IPX_8138          = 0x8138; // IPX
+    static final int ETH_TYPE_VAL_QNX               = 0x8204; // QNX Qnet
+    static final int ETH_TYPE_VAL_IPv6              = 0x86DD; // Internet Protocol Version 6 (IPv6)
+    static final int ETH_TYPE_VAL_ETH_FLOW          = 0x8808; // Ethernet flow control
+    static final int ETH_TYPE_VAL_SLOW_PROTOCOLS    = 0x8809; // Slow Protocols (IEEE 802.3)
+    static final int ETH_TYPE_VAL_COBRANET          = 0x8819; // CobraNet
+    static final int ETH_TYPE_VAL_MPLS_UNICAST      = 0x8847; // MPLS unicast
+    static final int ETH_TYPE_VAL_MPLS_MULTICAST    = 0x8848; // MPLS multicast
+    static final int ETH_TYPE_VAL_PPPoE_DISCOVERY   = 0x8863; // PPPoE Discovery Stage
+    static final int ETH_TYPE_VAL_PPPoE_SESSION     = 0x8864; // PPPoE Session Stage
+    static final int ETH_TYPE_VAL_JUMBO_FRAMES      = 0x8870; // Jumbo Frames
+    static final int ETH_TYPE_VAL_HOMEPLUG_10       = 0x887B; // HomePlug 1.0 MME
+    static final int ETH_TYPE_VAL_EAP_OVER_LAN      = 0x888E; // EAP over LAN (IEEE 802.1X)
+    static final int ETH_TYPE_VAL_PROFINET          = 0x8892; // PROFINET Protocol
+    static final int ETH_TYPE_VAL_HYPERSCSI         = 0x889A; // HyperSCSI (SCSI over Ethernet)
+    static final int ETH_TYPE_VAL_ATA_OVER_ETH      = 0x88A2; // ATA over Ethernet
+    static final int ETH_TYPE_VAL_ETHERCAT          = 0x88A4; // EtherCAT Protocol
+    static final int ETH_TYPE_VAL_BRIDGING          = 0x88A8; // Provider Bridging (IEEE 802.1ad) & Shortest Path Bridging IEEE 802.1aq[5]
+    static final int ETH_TYPE_VAL_POWERLINK         = 0x88AB; // Ethernet Powerlink[citation needed]
+    static final int ETH_TYPE_VAL_LLDP              = 0x88CC; // Link Layer Discovery Protocol (LLDP)
+    static final int ETH_TYPE_VAL_SERCOS            = 0x88CD; // SERCOS III
+    static final int ETH_TYPE_VAL_HOMEPLUG_AV       = 0x88E1; // HomePlug AV MME[citation needed]
+    static final int ETH_TYPE_VAL_MRP               = 0x88E3; // Media Redundancy Protocol (IEC62439-2)
+    static final int ETH_TYPE_VAL_MAC_SEC           = 0x88E5; // MAC security (IEEE 802.1AE)
+    static final int ETH_TYPE_VAL_PTP               = 0x88F7; // Precision Time Protocol (IEEE 1588)
+    static final int ETH_TYPE_VAL_CFM               = 0x8902; // IEEE 802.1ag Connectivity Fault Management (CFM) Protocol / ITU-T Recommendation Y.1731 (OAM)
+    static final int ETH_TYPE_VAL_FCoE              = 0x8906; // Fibre Channel over Ethernet (FCoE)
+    static final int ETH_TYPE_VAL_FCoE_INIT         = 0x8914; // FCoE Initialization Protocol
+    static final int ETH_TYPE_VAL_RoCE              = 0x8915; // RDMA over Converged Ethernet (RoCE)
+    static final int ETH_TYPE_VAL_HSR               = 0x892F; // High-availability Seamless Redundancy (HSR)
+    static final int ETH_TYPE_VAL_CONF_TEST         = 0x9000; // Ethernet Configuration Testing Protocol[6]
+    static final int ETH_TYPE_VAL_Q_IN_Q            = 0x9100; // Q-in-Q
+    static final int ETH_TYPE_VAL_LLT               = 0xCAFE; // Veritas Low Latency Transport (LLT)[7] for Veritas Cluster Server
+
+    public static final EthType ETH_TYPE_IPv4               = new EthType(ETH_TYPE_VAL_IPv4);
+    public static final EthType ETH_TYPE_ARP                = new EthType(ETH_TYPE_VAL_ARP);
+    public static final EthType ETH_TYPE_WAKE_ON_LAN        = new EthType(ETH_TYPE_VAL_WAKE_ON_LAN);
+    public static final EthType ETH_TYPE_TRILL              = new EthType(ETH_TYPE_VAL_TRILL);
+    public static final EthType ETH_TYPE_DECNET_IV          = new EthType(ETH_TYPE_VAL_DECNET_IV); 
+    public static final EthType ETH_TYPE_REV_ARP            = new EthType(ETH_TYPE_VAL_REV_ARP );
+    public static final EthType ETH_TYPE_APPLE_TALK         = new EthType(ETH_TYPE_VAL_APPLE_TALK); 
+    public static final EthType ETH_TYPE_APPLE_TALK_ARP     = new EthType(ETH_TYPE_VAL_APPLE_TALK_ARP); 
+    public static final EthType ETH_TYPE_VLAN_FRAME         = new EthType(ETH_TYPE_VAL_VLAN_FRAME );
+    public static final EthType ETH_TYPE_IPX_8137           = new EthType(ETH_TYPE_VAL_IPX_8137 );
+    public static final EthType ETH_TYPE_IPX_8138           = new EthType(ETH_TYPE_VAL_IPX_8138 );
+    public static final EthType ETH_TYPE_QNX                = new EthType(ETH_TYPE_VAL_QNX );
+    public static final EthType ETH_TYPE_IPv6               = new EthType(ETH_TYPE_VAL_IPv6 );
+    public static final EthType ETH_TYPE_ETH_FLOW           = new EthType(ETH_TYPE_VAL_ETH_FLOW); 
+    public static final EthType ETH_TYPE_SLOW_PROTOCOLS     = new EthType(ETH_TYPE_VAL_SLOW_PROTOCOLS );
+    public static final EthType ETH_TYPE_COBRANET           = new EthType(ETH_TYPE_VAL_COBRANET );
+    public static final EthType ETH_TYPE_MPLS_UNICAST       = new EthType(ETH_TYPE_VAL_MPLS_UNICAST );
+    public static final EthType ETH_TYPE_MPLS_MULTICAST     = new EthType(ETH_TYPE_VAL_MPLS_MULTICAST );
+    public static final EthType ETH_TYPE_PPPoE_DISCOVERY    = new EthType(ETH_TYPE_VAL_PPPoE_DISCOVERY);
+    public static final EthType ETH_TYPE_PPPoE_SESSION      = new EthType(ETH_TYPE_VAL_PPPoE_SESSION );
+    public static final EthType ETH_TYPE_JUMBO_FRAMES       = new EthType(ETH_TYPE_VAL_JUMBO_FRAMES );
+    public static final EthType ETH_TYPE_HOMEPLUG_10        = new EthType(ETH_TYPE_VAL_HOMEPLUG_10 );
+    public static final EthType ETH_TYPE_EAP_OVER_LAN       = new EthType(ETH_TYPE_VAL_EAP_OVER_LAN );
+    public static final EthType ETH_TYPE_PROFINET           = new EthType(ETH_TYPE_VAL_PROFINET );
+    public static final EthType ETH_TYPE_HYPERSCSI          = new EthType(ETH_TYPE_VAL_HYPERSCSI );
+    public static final EthType ETH_TYPE_ATA_OVER_ETH       = new EthType(ETH_TYPE_VAL_ATA_OVER_ETH); 
+    public static final EthType ETH_TYPE_ETHERCAT           = new EthType(ETH_TYPE_VAL_ETHERCAT );
+    public static final EthType ETH_TYPE_BRIDGING           = new EthType(ETH_TYPE_VAL_BRIDGING );
+    public static final EthType ETH_TYPE_POWERLINK          = new EthType(ETH_TYPE_VAL_POWERLINK );
+    public static final EthType ETH_TYPE_LLDP               = new EthType(ETH_TYPE_VAL_LLDP );
+    public static final EthType ETH_TYPE_SERCOS             = new EthType(ETH_TYPE_VAL_SERCOS );
+    public static final EthType ETH_TYPE_HOMEPLUG_AV        = new EthType(ETH_TYPE_VAL_HOMEPLUG_AV );
+    public static final EthType ETH_TYPE_MRP                = new EthType(ETH_TYPE_VAL_MRP );
+    public static final EthType ETH_TYPE_MAC_SEC            = new EthType(ETH_TYPE_VAL_MAC_SEC); 
+    public static final EthType ETH_TYPE_PTP                = new EthType(ETH_TYPE_VAL_PTP );
+    public static final EthType ETH_TYPE_CFM                = new EthType(ETH_TYPE_VAL_CFM );
+    public static final EthType ETH_TYPE_FCoE               = new EthType(ETH_TYPE_VAL_FCoE );
+    public static final EthType ETH_TYPE_FCoE_INIT          = new EthType(ETH_TYPE_VAL_FCoE_INIT );
+    public static final EthType ETH_TYPE_RoCE               = new EthType(ETH_TYPE_VAL_RoCE );
+    public static final EthType ETH_TYPE_HSR                = new EthType(ETH_TYPE_VAL_HSR );
+    public static final EthType ETH_TYPE_CONF_TEST          = new EthType(ETH_TYPE_VAL_CONF_TEST );
+    public static final EthType ETH_TYPE_Q_IN_Q             = new EthType(ETH_TYPE_VAL_Q_IN_Q );
+    public static final EthType ETH_TYPE_LLT                = new EthType(ETH_TYPE_VAL_LLT );
+
+    private EthType(int type) {
+        this.rawValue = type;
+    }
+
+    @Override
+    public int getLength() {
+        return LENGTH;
+    }
+
+    volatile byte[] bytesCache = null;
+
+    @Override
+    public byte[] getBytes() {
+        if (bytesCache == null) {
+            synchronized (this) {
+                if (bytesCache == null) {
+                    bytesCache = new byte[] {
+                                             (byte) ((rawValue >>> 8) & 0xFF),
+                                             (byte) ((rawValue >>> 0) & 0xFF)
+                    };
+                }
+            }
+        }
+        return bytesCache;
+    }
+
+    public static EthType of(int type) {
+        switch (type) {
+            case ETH_TYPE_VAL_IPv4:
+                return ETH_TYPE_IPv4;
+            case ETH_TYPE_VAL_ARP:
+                return ETH_TYPE_ARP;
+            case ETH_TYPE_VAL_WAKE_ON_LAN:
+                return ETH_TYPE_WAKE_ON_LAN;
+            case ETH_TYPE_VAL_TRILL:
+                return ETH_TYPE_TRILL;
+            case ETH_TYPE_VAL_DECNET_IV:
+                return ETH_TYPE_DECNET_IV;
+            case ETH_TYPE_VAL_REV_ARP:
+                return ETH_TYPE_REV_ARP;
+            case ETH_TYPE_VAL_APPLE_TALK:
+                return ETH_TYPE_APPLE_TALK;
+            case ETH_TYPE_VAL_APPLE_TALK_ARP:
+                return ETH_TYPE_APPLE_TALK_ARP;
+            case ETH_TYPE_VAL_VLAN_FRAME:
+                return ETH_TYPE_VLAN_FRAME;
+            case ETH_TYPE_VAL_IPX_8137:
+                return ETH_TYPE_IPX_8137;
+            case ETH_TYPE_VAL_IPX_8138:
+                return ETH_TYPE_IPX_8138;
+            case ETH_TYPE_VAL_QNX:
+                return ETH_TYPE_QNX;
+            case ETH_TYPE_VAL_IPv6:
+                return ETH_TYPE_IPv6;
+            case ETH_TYPE_VAL_ETH_FLOW:
+                return ETH_TYPE_ETH_FLOW;
+            case ETH_TYPE_VAL_SLOW_PROTOCOLS:
+                return ETH_TYPE_SLOW_PROTOCOLS;
+            case ETH_TYPE_VAL_COBRANET:
+                return ETH_TYPE_COBRANET;
+            case ETH_TYPE_VAL_MPLS_UNICAST:
+                return ETH_TYPE_MPLS_UNICAST;
+            case ETH_TYPE_VAL_MPLS_MULTICAST:
+                return ETH_TYPE_MPLS_MULTICAST;
+            case ETH_TYPE_VAL_PPPoE_DISCOVERY:
+                return ETH_TYPE_PPPoE_DISCOVERY;
+            case ETH_TYPE_VAL_PPPoE_SESSION:
+                return ETH_TYPE_PPPoE_SESSION;
+            case ETH_TYPE_VAL_JUMBO_FRAMES:
+                return ETH_TYPE_JUMBO_FRAMES;
+            case ETH_TYPE_VAL_HOMEPLUG_10:
+                return ETH_TYPE_HOMEPLUG_10;
+            case ETH_TYPE_VAL_EAP_OVER_LAN:
+                return ETH_TYPE_EAP_OVER_LAN;
+            case ETH_TYPE_VAL_PROFINET:
+                return ETH_TYPE_PROFINET;
+            case ETH_TYPE_VAL_HYPERSCSI:
+                return ETH_TYPE_HYPERSCSI;
+            case ETH_TYPE_VAL_ATA_OVER_ETH:
+                return ETH_TYPE_ATA_OVER_ETH;
+            case ETH_TYPE_VAL_ETHERCAT:
+                return ETH_TYPE_ETHERCAT;
+            case ETH_TYPE_VAL_BRIDGING:
+                return ETH_TYPE_BRIDGING;
+            case ETH_TYPE_VAL_POWERLINK:
+                return ETH_TYPE_POWERLINK;
+            case ETH_TYPE_VAL_LLDP:
+                return ETH_TYPE_LLDP;
+            case ETH_TYPE_VAL_SERCOS:
+                return ETH_TYPE_SERCOS;
+            case ETH_TYPE_VAL_HOMEPLUG_AV:
+                return ETH_TYPE_HOMEPLUG_AV;
+            case ETH_TYPE_VAL_MRP:
+                return ETH_TYPE_MRP;
+            case ETH_TYPE_VAL_MAC_SEC:
+                return ETH_TYPE_MAC_SEC;
+            case ETH_TYPE_VAL_PTP:
+                return ETH_TYPE_PTP;
+            case ETH_TYPE_VAL_CFM:
+                return ETH_TYPE_CFM;
+            case ETH_TYPE_VAL_FCoE:
+                return ETH_TYPE_FCoE;
+            case ETH_TYPE_VAL_FCoE_INIT:
+                return ETH_TYPE_FCoE_INIT;
+            case ETH_TYPE_VAL_RoCE:
+                return ETH_TYPE_RoCE;
+            case ETH_TYPE_VAL_HSR:
+                return ETH_TYPE_HSR;
+            case ETH_TYPE_VAL_CONF_TEST:
+                return ETH_TYPE_CONF_TEST;
+            case ETH_TYPE_VAL_Q_IN_Q:
+                return ETH_TYPE_Q_IN_Q;
+            case ETH_TYPE_VAL_LLT:
+                return ETH_TYPE_LLT;
+            default:
+                // TODO: What's here?
+                return new EthType(type);
+        }
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof EthType))
+            return false;
+        EthType o = (EthType)obj;
+        if (o.rawValue != this.rawValue)
+            return false;
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 37;
+        int result = 1;
+        result = prime * result + rawValue;
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        return Integer.toHexString(rawValue);
+    }
+
+    public static final Serializer<EthType> SERIALIZER_V10 = new SerializerV10();
+    public static final Serializer<EthType> SERIALIZER_V11 = SERIALIZER_V10;
+    public static final Serializer<EthType> SERIALIZER_V12 = SERIALIZER_V10;
+    public static final Serializer<EthType> SERIALIZER_V13 = SERIALIZER_V10;
+
+    private static class SerializerV10 implements OFValueType.Serializer<EthType> {
+
+        @Override
+        public void writeTo(EthType value, ChannelBuffer c) {
+            c.writeShort(value.rawValue);
+        }
+
+        @Override
+        public EthType readFrom(ChannelBuffer c) throws OFParseError {
+            return EthType.of(c.readUnsignedShort());
+        }
+
+    }
 
 }