Search in sources :

Example 16 with StructNlMsgHdr

use of android.net.netlink.StructNlMsgHdr in project platform_frameworks_base by android.

the class RtNetlinkNeighborMessage method newGetNeighborsRequest.

/**
     * A convenience method to create an RTM_GETNEIGH request message.
     */
public static byte[] newGetNeighborsRequest(int seqNo) {
    final int length = StructNlMsgHdr.STRUCT_SIZE + StructNdMsg.STRUCT_SIZE;
    final byte[] bytes = new byte[length];
    final ByteBuffer byteBuffer = ByteBuffer.wrap(bytes);
    byteBuffer.order(ByteOrder.nativeOrder());
    final StructNlMsgHdr nlmsghdr = new StructNlMsgHdr();
    nlmsghdr.nlmsg_len = length;
    nlmsghdr.nlmsg_type = NetlinkConstants.RTM_GETNEIGH;
    nlmsghdr.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP;
    nlmsghdr.nlmsg_seq = seqNo;
    nlmsghdr.pack(byteBuffer);
    final StructNdMsg ndmsg = new StructNdMsg();
    ndmsg.pack(byteBuffer);
    return bytes;
}
Also used : StructNlMsgHdr(android.net.netlink.StructNlMsgHdr) StructNdMsg(android.net.netlink.StructNdMsg) ByteBuffer(java.nio.ByteBuffer)

Example 17 with StructNlMsgHdr

use of android.net.netlink.StructNlMsgHdr in project android_frameworks_base by DirtyUnicorns.

the class RtNetlinkNeighborMessageTest method testParseRtmNewNeigh.

public void testParseRtmNewNeigh() {
    final ByteBuffer byteBuffer = ByteBuffer.wrap(RTM_NEWNEIGH);
    // For testing.
    byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
    final NetlinkMessage msg = NetlinkMessage.parse(byteBuffer);
    assertNotNull(msg);
    assertTrue(msg instanceof RtNetlinkNeighborMessage);
    final RtNetlinkNeighborMessage neighMsg = (RtNetlinkNeighborMessage) msg;
    final StructNlMsgHdr hdr = neighMsg.getHeader();
    assertNotNull(hdr);
    assertEquals(88, hdr.nlmsg_len);
    assertEquals(NetlinkConstants.RTM_NEWNEIGH, hdr.nlmsg_type);
    assertEquals(0, hdr.nlmsg_flags);
    assertEquals(0, hdr.nlmsg_seq);
    assertEquals(0, hdr.nlmsg_pid);
    final StructNdMsg ndmsgHdr = neighMsg.getNdHeader();
    assertNotNull(ndmsgHdr);
    assertEquals((byte) OsConstants.AF_INET6, ndmsgHdr.ndm_family);
    assertEquals(21, ndmsgHdr.ndm_ifindex);
    assertEquals(StructNdMsg.NUD_STALE, ndmsgHdr.ndm_state);
    final InetAddress destination = neighMsg.getDestination();
    assertNotNull(destination);
    assertEquals(InetAddress.parseNumericAddress("fe80::86c9:b2ff:fe6a:ed4b"), destination);
}
Also used : StructNlMsgHdr(android.net.netlink.StructNlMsgHdr) StructNdMsg(android.net.netlink.StructNdMsg) NetlinkMessage(android.net.netlink.NetlinkMessage) ByteBuffer(java.nio.ByteBuffer) InetAddress(java.net.InetAddress) RtNetlinkNeighborMessage(android.net.netlink.RtNetlinkNeighborMessage)

Example 18 with StructNlMsgHdr

use of android.net.netlink.StructNlMsgHdr in project android_frameworks_base by DirtyUnicorns.

the class RtNetlinkNeighborMessage method newGetNeighborsRequest.

/**
     * A convenience method to create an RTM_GETNEIGH request message.
     */
public static byte[] newGetNeighborsRequest(int seqNo) {
    final int length = StructNlMsgHdr.STRUCT_SIZE + StructNdMsg.STRUCT_SIZE;
    final byte[] bytes = new byte[length];
    final ByteBuffer byteBuffer = ByteBuffer.wrap(bytes);
    byteBuffer.order(ByteOrder.nativeOrder());
    final StructNlMsgHdr nlmsghdr = new StructNlMsgHdr();
    nlmsghdr.nlmsg_len = length;
    nlmsghdr.nlmsg_type = NetlinkConstants.RTM_GETNEIGH;
    nlmsghdr.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP;
    nlmsghdr.nlmsg_seq = seqNo;
    nlmsghdr.pack(byteBuffer);
    final StructNdMsg ndmsg = new StructNdMsg();
    ndmsg.pack(byteBuffer);
    return bytes;
}
Also used : StructNlMsgHdr(android.net.netlink.StructNlMsgHdr) StructNdMsg(android.net.netlink.StructNdMsg) ByteBuffer(java.nio.ByteBuffer)

Example 19 with StructNlMsgHdr

use of android.net.netlink.StructNlMsgHdr in project android_frameworks_base by DirtyUnicorns.

the class RtNetlinkNeighborMessage method newNewNeighborMessage.

/**
     * A convenience method to create an RTM_NEWNEIGH message, to modify
     * the kernel's state information for a specific neighbor.
     */
public static byte[] newNewNeighborMessage(int seqNo, InetAddress ip, short nudState, int ifIndex, byte[] llAddr) {
    final StructNlMsgHdr nlmsghdr = new StructNlMsgHdr();
    nlmsghdr.nlmsg_type = NetlinkConstants.RTM_NEWNEIGH;
    nlmsghdr.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK | NLM_F_REPLACE;
    nlmsghdr.nlmsg_seq = seqNo;
    final RtNetlinkNeighborMessage msg = new RtNetlinkNeighborMessage(nlmsghdr);
    msg.mNdmsg = new StructNdMsg();
    msg.mNdmsg.ndm_family = (byte) ((ip instanceof Inet6Address) ? OsConstants.AF_INET6 : OsConstants.AF_INET);
    msg.mNdmsg.ndm_ifindex = ifIndex;
    msg.mNdmsg.ndm_state = nudState;
    msg.mDestination = ip;
    // might be null
    msg.mLinkLayerAddr = llAddr;
    final byte[] bytes = new byte[msg.getRequiredSpace()];
    nlmsghdr.nlmsg_len = bytes.length;
    final ByteBuffer byteBuffer = ByteBuffer.wrap(bytes);
    byteBuffer.order(ByteOrder.nativeOrder());
    msg.pack(byteBuffer);
    return bytes;
}
Also used : StructNlMsgHdr(android.net.netlink.StructNlMsgHdr) StructNdMsg(android.net.netlink.StructNdMsg) Inet6Address(java.net.Inet6Address) ByteBuffer(java.nio.ByteBuffer)

Example 20 with StructNlMsgHdr

use of android.net.netlink.StructNlMsgHdr in project android_frameworks_base by ResurrectionRemix.

the class RtNetlinkNeighborMessageTest method testParseRtmGetNeighResponse.

public void testParseRtmGetNeighResponse() {
    final ByteBuffer byteBuffer = ByteBuffer.wrap(RTM_GETNEIGH_RESPONSE);
    // For testing.
    byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
    int messageCount = 0;
    while (byteBuffer.remaining() > 0) {
        final NetlinkMessage msg = NetlinkMessage.parse(byteBuffer);
        assertNotNull(msg);
        assertTrue(msg instanceof RtNetlinkNeighborMessage);
        final RtNetlinkNeighborMessage neighMsg = (RtNetlinkNeighborMessage) msg;
        final StructNlMsgHdr hdr = neighMsg.getHeader();
        assertNotNull(hdr);
        assertEquals(NetlinkConstants.RTM_NEWNEIGH, hdr.nlmsg_type);
        assertEquals(StructNlMsgHdr.NLM_F_MULTI, hdr.nlmsg_flags);
        assertEquals(0, hdr.nlmsg_seq);
        assertEquals(11070, hdr.nlmsg_pid);
        messageCount++;
    }
    // TODO: add more detailed spot checks.
    assertEquals(14, messageCount);
}
Also used : StructNlMsgHdr(android.net.netlink.StructNlMsgHdr) NetlinkMessage(android.net.netlink.NetlinkMessage) ByteBuffer(java.nio.ByteBuffer) RtNetlinkNeighborMessage(android.net.netlink.RtNetlinkNeighborMessage)

Aggregations

StructNlMsgHdr (android.net.netlink.StructNlMsgHdr)28 ByteBuffer (java.nio.ByteBuffer)24 RtNetlinkNeighborMessage (android.net.netlink.RtNetlinkNeighborMessage)16 StructNdMsg (android.net.netlink.StructNdMsg)16 NetlinkMessage (android.net.netlink.NetlinkMessage)12 InetAddress (java.net.InetAddress)8 NetlinkSocket (android.net.netlink.NetlinkSocket)4 NetlinkSocketAddress (android.system.NetlinkSocketAddress)4 SmallTest (android.test.suitebuilder.annotation.SmallTest)4 Inet6Address (java.net.Inet6Address)4