Implements ICMPEcho packet type.

- For echo request and reply purpose
- STC fast test passed

Change-Id: Ib8ff062718f1747ecf6fcf0fbe06935df28f0e71
diff --git a/utils/misc/src/main/java/org/onlab/packet/ICMP.java b/utils/misc/src/main/java/org/onlab/packet/ICMP.java
index 68fddcb..f503667 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ICMP.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ICMP.java
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-
 package org.onlab.packet;
 
 import java.nio.ByteBuffer;
@@ -32,8 +31,13 @@
 
     public static final byte TYPE_ECHO_REQUEST = 0x08;
     public static final byte TYPE_ECHO_REPLY = 0x00;
+    //Uses CODE_ECHO_REPLY instead.
+    @Deprecated
     public static final byte SUBTYPE_ECHO_REPLY = 0x00;
 
+    public static final byte CODE_ECHO_REPLY = 0x00;
+    public static final byte CODE_ECHO_REQEUST = 0x00;
+
     public static final short ICMP_HEADER_LENGTH = 4;
 
     /**
@@ -194,9 +198,27 @@
             icmp.icmpCode = bb.get();
             icmp.checksum = bb.getShort();
 
-            icmp.payload = Data.deserializer()
-                    .deserialize(data, bb.position(), bb.limit()
-                            - bb.position());
+            switch (icmp.icmpType) {
+                case ICMP.TYPE_ECHO_REQUEST:
+                case ICMP.TYPE_ECHO_REPLY:
+                    Deserializer<ICMPEcho> deserializer = ICMPEcho.deserializer();
+                    icmp.payload = deserializer.deserialize(data, bb.position(), ICMPEcho.ICMP_ECHO_HEADER_LENGTH);
+                    bb.position(bb.position() + ICMPEcho.ICMP_ECHO_HEADER_LENGTH);
+                    icmp.payload.setPayload(Data.deserializer().deserialize(
+                            data,
+                            bb.position(),
+                            bb.limit()
+                                    - bb.position()
+                    ));
+                    break;
+                default:
+                    icmp.payload = Data.deserializer()
+                            .deserialize(data, bb.position(), bb.limit()
+                                    - bb.position());
+                    break;
+            }
+
+
             icmp.payload.setParent(icmp);
             return icmp;
         };