Merge "Add test coverage for ICMP echo constants."
This commit is contained in:
@@ -16,6 +16,11 @@
|
|||||||
|
|
||||||
package com.android.cts.net.hostside;
|
package com.android.cts.net.hostside;
|
||||||
|
|
||||||
|
import static android.system.OsConstants.ICMP6_ECHO_REPLY;
|
||||||
|
import static android.system.OsConstants.ICMP6_ECHO_REQUEST;
|
||||||
|
import static android.system.OsConstants.ICMP_ECHO;
|
||||||
|
import static android.system.OsConstants.ICMP_ECHOREPLY;
|
||||||
|
|
||||||
import android.system.ErrnoException;
|
import android.system.ErrnoException;
|
||||||
import android.system.Os;
|
import android.system.Os;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -47,8 +52,6 @@ public class PacketReflector extends Thread {
|
|||||||
|
|
||||||
private static final byte ICMP_ECHO = 8;
|
private static final byte ICMP_ECHO = 8;
|
||||||
private static final byte ICMP_ECHOREPLY = 0;
|
private static final byte ICMP_ECHOREPLY = 0;
|
||||||
private static final byte ICMPV6_ECHO_REQUEST = (byte) 128;
|
|
||||||
private static final byte ICMPV6_ECHO_REPLY = (byte) 129;
|
|
||||||
|
|
||||||
private static String TAG = "PacketReflector";
|
private static String TAG = "PacketReflector";
|
||||||
|
|
||||||
@@ -125,7 +128,7 @@ public class PacketReflector extends Thread {
|
|||||||
|
|
||||||
byte type = buf[hdrLen];
|
byte type = buf[hdrLen];
|
||||||
if (!(version == 4 && type == ICMP_ECHO) &&
|
if (!(version == 4 && type == ICMP_ECHO) &&
|
||||||
!(version == 6 && type == ICMPV6_ECHO_REQUEST)) {
|
!(version == 6 && type == (byte) ICMP6_ECHO_REQUEST)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,10 +148,18 @@ public class PacketReflector extends Thread {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
byte replyType = buf[hdrLen];
|
||||||
|
if ((type == ICMP_ECHO && replyType != ICMP_ECHOREPLY)
|
||||||
|
|| (type == (byte) ICMP6_ECHO_REQUEST && replyType != (byte) ICMP6_ECHO_REPLY)) {
|
||||||
|
Log.i(TAG, "Received unexpected ICMP reply: original " + type
|
||||||
|
+ ", reply " + replyType);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Compare the response we got with the original packet.
|
// Compare the response we got with the original packet.
|
||||||
// The only thing that should have changed are addresses, type and checksum.
|
// The only thing that should have changed are addresses, type and checksum.
|
||||||
// Overwrite them with the received bytes and see if the packet is otherwise identical.
|
// Overwrite them with the received bytes and see if the packet is otherwise identical.
|
||||||
request[hdrLen] = buf[hdrLen]; // Type.
|
request[hdrLen] = buf[hdrLen]; // Type
|
||||||
request[hdrLen + 2] = buf[hdrLen + 2]; // Checksum byte 1.
|
request[hdrLen + 2] = buf[hdrLen + 2]; // Checksum byte 1.
|
||||||
request[hdrLen + 3] = buf[hdrLen + 3]; // Checksum byte 2.
|
request[hdrLen + 3] = buf[hdrLen + 3]; // Checksum byte 2.
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ public class PingTest extends AndroidTestCase {
|
|||||||
|
|
||||||
/** The beginning of an ICMPv6 echo request: type, code, and uninitialized checksum. */
|
/** The beginning of an ICMPv6 echo request: type, code, and uninitialized checksum. */
|
||||||
private static final byte[] PING_HEADER = new byte[] {
|
private static final byte[] PING_HEADER = new byte[] {
|
||||||
(byte) 0x80, (byte) 0x00, (byte) 0x00, (byte) 0x00
|
(byte) ICMP6_ECHO_REQUEST, (byte) 0x00, (byte) 0x00, (byte) 0x00
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -135,7 +135,7 @@ public class PingTest extends AndroidTestCase {
|
|||||||
byte[] response = new byte[bytesRead];
|
byte[] response = new byte[bytesRead];
|
||||||
responseBuffer.flip();
|
responseBuffer.flip();
|
||||||
responseBuffer.get(response, 0, bytesRead);
|
responseBuffer.get(response, 0, bytesRead);
|
||||||
assertEquals((byte) 0x81, response[0]);
|
assertEquals((byte) ICMP6_ECHO_REPLY, response[0]);
|
||||||
|
|
||||||
// Find out what ICMP ID was used in the packet that was sent.
|
// Find out what ICMP ID was used in the packet that was sent.
|
||||||
int id = ((InetSocketAddress) Os.getsockname(s)).getPort();
|
int id = ((InetSocketAddress) Os.getsockname(s)).getPort();
|
||||||
|
|||||||
Reference in New Issue
Block a user