IEEE 802.1x EAPOL-MKA packet support.

Change-Id: I61bc45226d5b84445d4fafa969150c4a707ab3bc
(cherry picked from commit 7cd5ff66764505e9c8688af8cb96fa4f089dcf3e)
diff --git a/utils/misc/src/main/java/org/onlab/packet/EAPOL.java b/utils/misc/src/main/java/org/onlab/packet/EAPOL.java
index 741d302..3d7d7c4 100644
--- a/utils/misc/src/main/java/org/onlab/packet/EAPOL.java
+++ b/utils/misc/src/main/java/org/onlab/packet/EAPOL.java
@@ -29,7 +29,8 @@
  */
 public class EAPOL extends BasePacket {
 
-    private byte version = 0x01;
+    // private byte version = 0x01;
+    private byte version = 0x03;
     private byte eapolType;
     private short packetLength;
 
@@ -37,12 +38,13 @@
 
     // EAPOL Packet Type
     public static final byte EAPOL_PACKET = 0x0;
-    public static final byte EAPOL_START  = 0x1;
+    public static final byte EAPOL_START = 0x1;
     public static final byte EAPOL_LOGOFF = 0x2;
-    public static final byte EAPOL_KEY    = 0x3;
-    public static final byte EAPOL_ASF    = 0x4;
+    public static final byte EAPOL_KEY = 0x3;
+    public static final byte EAPOL_ASF = 0x4;
+    public static final byte EAPOL_MKA = 0X5;
 
-    public static final MacAddress PAE_GROUP_ADDR = MacAddress.valueOf(new byte[] {
+    public static final MacAddress PAE_GROUP_ADDR = MacAddress.valueOf(new byte[]{
             (byte) 0x01, (byte) 0x80, (byte) 0xc2, (byte) 0x00, (byte) 0x00, (byte) 0x03
     });
 
@@ -187,13 +189,16 @@
 
             if (eapol.packetLength > 0) {
                 checkHeaderLength(length, HEADER_LENGTH + eapol.packetLength);
-                // deserialize the EAP Payload
-                eapol.payload = EAP.deserializer().deserialize(data,
-                        bb.position(), bb.limit() - bb.position());
-
+                if (eapol.getEapolType() == EAPOL_MKA) {
+                    eapol.payload = EAPOLMkpdu.deserializer().deserialize(data,
+                            bb.position(), bb.limit() - bb.position());
+                } else {
+                    // deserialize the EAP Payload
+                    eapol.payload = EAP.deserializer().deserialize(data,
+                            bb.position(), bb.limit() - bb.position());
+                }
                 eapol.payload.setParent(eapol);
             }
-
             return eapol;
         };
     }