summaryrefslogtreecommitdiffstats
path: root/core/java/android/net/netlink
diff options
context:
space:
mode:
authorErik Kline <ek@google.com>2015-05-19 14:17:11 +0900
committerErik Kline <ek@google.com>2015-05-20 16:46:30 +0900
commitcef7bc939fbc3baae5ccf78dcef63fc60e07ae21 (patch)
tree9c0d89270ac8c08567ead6bf6fe12f91e4bfe178 /core/java/android/net/netlink
parent77b01b887670b01f543558cd5cfd7d5d228d6c21 (diff)
downloadframeworks_base-cef7bc939fbc3baae5ccf78dcef63fc60e07ae21.zip
frameworks_base-cef7bc939fbc3baae5ccf78dcef63fc60e07ae21.tar.gz
frameworks_base-cef7bc939fbc3baae5ccf78dcef63fc60e07ae21.tar.bz2
Set NLM_F_ACK in our RTM_NEWNEIGH requests
With NLM_F_ACK set in RTM_NEWNEIGH requests we get some response from the kernel, whether there was an error or not. Additionally: [1] add IpReachabilityMonitor#probeNeighbor() as a public static method, since it actually depends very little on the class internals and might be of larger use. [2] add a unittest for parsing NetlinkErrorMessages. Bug: 18581716 Change-Id: I5d62e7a9972c7440f0483c38c77677436d3a1a25
Diffstat (limited to 'core/java/android/net/netlink')
-rw-r--r--core/java/android/net/netlink/NetlinkErrorMessage.java1
-rw-r--r--core/java/android/net/netlink/NetlinkMessage.java2
-rw-r--r--core/java/android/net/netlink/RtNetlinkNeighborMessage.java9
-rw-r--r--core/java/android/net/netlink/StructNlMsgErr.java5
4 files changed, 8 insertions, 9 deletions
diff --git a/core/java/android/net/netlink/NetlinkErrorMessage.java b/core/java/android/net/netlink/NetlinkErrorMessage.java
index dbc10d6..e275574 100644
--- a/core/java/android/net/netlink/NetlinkErrorMessage.java
+++ b/core/java/android/net/netlink/NetlinkErrorMessage.java
@@ -18,7 +18,6 @@ package android.net.netlink;
import android.net.netlink.StructNlMsgHdr;
import android.net.netlink.NetlinkMessage;
-import android.util.Log;
import java.nio.ByteBuffer;
diff --git a/core/java/android/net/netlink/NetlinkMessage.java b/core/java/android/net/netlink/NetlinkMessage.java
index bc04a16..3bf75ca 100644
--- a/core/java/android/net/netlink/NetlinkMessage.java
+++ b/core/java/android/net/netlink/NetlinkMessage.java
@@ -60,7 +60,7 @@ public class NetlinkMessage {
switch (nlmsghdr.nlmsg_type) {
//case NetlinkConstants.NLMSG_NOOP:
case NetlinkConstants.NLMSG_ERROR:
- return (NetlinkMessage) NetlinkErrorMessage.parse(byteBuffer);
+ return (NetlinkMessage) NetlinkErrorMessage.parse(nlmsghdr, byteBuffer);
case NetlinkConstants.NLMSG_DONE:
byteBuffer.position(byteBuffer.position() + payloadLength);
return new NetlinkMessage(nlmsghdr);
diff --git a/core/java/android/net/netlink/RtNetlinkNeighborMessage.java b/core/java/android/net/netlink/RtNetlinkNeighborMessage.java
index b5f5817..02df131 100644
--- a/core/java/android/net/netlink/RtNetlinkNeighborMessage.java
+++ b/core/java/android/net/netlink/RtNetlinkNeighborMessage.java
@@ -16,6 +16,11 @@
package android.net.netlink;
+import static android.net.netlink.StructNlMsgHdr.NLM_F_ACK;
+import static android.net.netlink.StructNlMsgHdr.NLM_F_DUMP;
+import static android.net.netlink.StructNlMsgHdr.NLM_F_REPLACE;
+import static android.net.netlink.StructNlMsgHdr.NLM_F_REQUEST;
+
import android.net.netlink.StructNdaCacheInfo;
import android.net.netlink.StructNdMsg;
import android.net.netlink.StructNlAttr;
@@ -123,7 +128,7 @@ public class RtNetlinkNeighborMessage extends NetlinkMessage {
final StructNlMsgHdr nlmsghdr = new StructNlMsgHdr();
nlmsghdr.nlmsg_len = length;
nlmsghdr.nlmsg_type = NetlinkConstants.RTM_GETNEIGH;
- nlmsghdr.nlmsg_flags = StructNlMsgHdr.NLM_F_REQUEST|StructNlMsgHdr.NLM_F_DUMP;
+ nlmsghdr.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP;
nlmsghdr.nlmsg_seq = seqNo;
nlmsghdr.pack(byteBuffer);
@@ -141,7 +146,7 @@ public class RtNetlinkNeighborMessage extends NetlinkMessage {
int seqNo, InetAddress ip, short nudState, int ifIndex, byte[] llAddr) {
final StructNlMsgHdr nlmsghdr = new StructNlMsgHdr();
nlmsghdr.nlmsg_type = NetlinkConstants.RTM_NEWNEIGH;
- nlmsghdr.nlmsg_flags = StructNlMsgHdr.NLM_F_REQUEST | StructNlMsgHdr.NLM_F_REPLACE;
+ nlmsghdr.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK | NLM_F_REPLACE;
nlmsghdr.nlmsg_seq = seqNo;
final RtNetlinkNeighborMessage msg = new RtNetlinkNeighborMessage(nlmsghdr);
diff --git a/core/java/android/net/netlink/StructNlMsgErr.java b/core/java/android/net/netlink/StructNlMsgErr.java
index 6b02650..f095af4 100644
--- a/core/java/android/net/netlink/StructNlMsgErr.java
+++ b/core/java/android/net/netlink/StructNlMsgErr.java
@@ -52,11 +52,6 @@ public class StructNlMsgErr {
public int error;
public StructNlMsgHdr msg;
- public StructNlMsgErr() {
- error = 0;
- msg = null;
- }
-
public void pack(ByteBuffer byteBuffer) {
// The ByteOrder must have already been set by the caller. In most
// cases ByteOrder.nativeOrder() is correct, with the possible