Add support for NLM_F_DUMP request in StructNLMsgHdr
Test: atest NetworkStaticLibTests:com.android.net.moduletests.util.netlink.StructNlMsgHdrTest Change-Id: I395560fb1edfb1c806b2ed4c74a7a3081c7b2515
This commit is contained in:
parent
d5c0276b34
commit
9ea3be13fc
3 changed files with 46 additions and 4 deletions
|
|
@ -142,6 +142,7 @@ public class NetlinkMessage {
|
|||
return (NetlinkMessage) RtNetlinkAddressMessage.parse(nlmsghdr, byteBuffer);
|
||||
case NetlinkConstants.RTM_NEWROUTE:
|
||||
case NetlinkConstants.RTM_DELROUTE:
|
||||
case NetlinkConstants.RTM_GETROUTE:
|
||||
return (NetlinkMessage) RtNetlinkRouteMessage.parse(nlmsghdr, byteBuffer);
|
||||
case NetlinkConstants.RTM_NEWNEIGH:
|
||||
case NetlinkConstants.RTM_DELNEIGH:
|
||||
|
|
|
|||
|
|
@ -71,13 +71,17 @@ public class StructNlMsgHdr {
|
|||
}
|
||||
sb.append("NLM_F_ECHO");
|
||||
}
|
||||
if ((flags & NLM_F_ROOT) != 0) {
|
||||
if ((flags & NLM_F_DUMP) == NLM_F_DUMP) {
|
||||
if (sb.length() > 0) {
|
||||
sb.append("|");
|
||||
}
|
||||
sb.append("NLM_F_DUMP");
|
||||
} else if ((flags & NLM_F_ROOT) != 0) { // NLM_F_DUMP = NLM_F_ROOT | NLM_F_MATCH
|
||||
if (sb.length() > 0) {
|
||||
sb.append("|");
|
||||
}
|
||||
sb.append("NLM_F_ROOT");
|
||||
}
|
||||
if ((flags & NLM_F_MATCH) != 0) {
|
||||
} else if ((flags & NLM_F_MATCH) != 0) {
|
||||
if (sb.length() > 0) {
|
||||
sb.append("|");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
package com.android.net.module.util.netlink;
|
||||
|
||||
import static com.android.net.module.util.netlink.StructNlMsgHdr.NLM_F_DUMP;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import android.system.OsConstants;
|
||||
|
|
@ -48,10 +49,14 @@ public class StructNlMsgHdrTest {
|
|||
public static final String TEST_NLMSG_PID_STR = "nlmsg_pid{5678}";
|
||||
|
||||
private StructNlMsgHdr makeStructNlMsgHdr(short type) {
|
||||
return makeStructNlMsgHdr(type, TEST_NLMSG_FLAGS);
|
||||
}
|
||||
|
||||
private StructNlMsgHdr makeStructNlMsgHdr(short type, short flags) {
|
||||
final StructNlMsgHdr struct = new StructNlMsgHdr();
|
||||
struct.nlmsg_len = TEST_NLMSG_LEN;
|
||||
struct.nlmsg_type = type;
|
||||
struct.nlmsg_flags = TEST_NLMSG_FLAGS;
|
||||
struct.nlmsg_flags = flags;
|
||||
struct.nlmsg_seq = TEST_NLMSG_SEQ;
|
||||
struct.nlmsg_pid = TEST_NLMSG_PID;
|
||||
return struct;
|
||||
|
|
@ -62,6 +67,11 @@ public class StructNlMsgHdrTest {
|
|||
fail("\"" + actualValue + "\" does not contain \"" + expectedSubstring + "\"");
|
||||
}
|
||||
|
||||
private static void assertNotContains(String actualValue, String unexpectedSubstring) {
|
||||
if (!actualValue.contains(unexpectedSubstring)) return;
|
||||
fail("\"" + actualValue + "\" contains \"" + unexpectedSubstring + "\"");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testToString() {
|
||||
StructNlMsgHdr struct = makeStructNlMsgHdr(NetlinkConstants.RTM_NEWADDR);
|
||||
|
|
@ -99,4 +109,31 @@ public class StructNlMsgHdrTest {
|
|||
assertContains(s, TEST_NLMSG_PID_STR);
|
||||
assertContains(s, "nlmsg_type{20(SOCK_DIAG_BY_FAMILY)}");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testToString_flags_dumpRequest() {
|
||||
final short flags = StructNlMsgHdr.NLM_F_REQUEST | StructNlMsgHdr.NLM_F_DUMP;
|
||||
StructNlMsgHdr struct = makeStructNlMsgHdr(NetlinkConstants.RTM_GETROUTE, flags);
|
||||
|
||||
String s = struct.toString(OsConstants.NETLINK_ROUTE);
|
||||
|
||||
assertContains(s, "RTM_GETROUTE");
|
||||
assertContains(s, "NLM_F_REQUEST");
|
||||
assertContains(s, "NLM_F_DUMP");
|
||||
// NLM_F_DUMP = NLM_F_ROOT | NLM_F_MATCH;
|
||||
assertNotContains(s, "NLM_F_MATCH");
|
||||
assertNotContains(s, "NLM_F_ROOT");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testToString_flags_root() {
|
||||
final short flags = StructNlMsgHdr.NLM_F_ROOT;
|
||||
StructNlMsgHdr struct = makeStructNlMsgHdr(NetlinkConstants.RTM_GETROUTE, flags);
|
||||
|
||||
String s = struct.toString(OsConstants.NETLINK_ROUTE);
|
||||
|
||||
assertContains(s, "NLM_F_ROOT");
|
||||
// NLM_F_DUMP = NLM_F_ROOT | NLM_F_MATCH;
|
||||
assertNotContains(s, "NLM_F_DUMP");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue