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;
};