diff options
author | Erik Kline <ek@google.com> | 2015-05-19 14:17:11 +0900 |
---|---|---|
committer | Erik Kline <ek@google.com> | 2015-05-20 16:46:30 +0900 |
commit | cef7bc939fbc3baae5ccf78dcef63fc60e07ae21 (patch) | |
tree | 9c0d89270ac8c08567ead6bf6fe12f91e4bfe178 /core/java/android/net/netlink | |
parent | 77b01b887670b01f543558cd5cfd7d5d228d6c21 (diff) | |
download | frameworks_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')
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 |