summaryrefslogtreecommitdiff
path: root/common/device/com/android/net/module/util/netlink/NetlinkConstants.java
diff options
context:
space:
mode:
Diffstat (limited to 'common/device/com/android/net/module/util/netlink/NetlinkConstants.java')
-rw-r--r--common/device/com/android/net/module/util/netlink/NetlinkConstants.java283
1 files changed, 0 insertions, 283 deletions
diff --git a/common/device/com/android/net/module/util/netlink/NetlinkConstants.java b/common/device/com/android/net/module/util/netlink/NetlinkConstants.java
deleted file mode 100644
index 44c51d8a..00000000
--- a/common/device/com/android/net/module/util/netlink/NetlinkConstants.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.net.module.util.netlink;
-
-import android.system.OsConstants;
-
-import androidx.annotation.NonNull;
-
-import java.nio.ByteBuffer;
-
-/**
- * Various constants and static helper methods for netlink communications.
- *
- * Values taken from:
- *
- * include/uapi/linux/netfilter/nfnetlink.h
- * include/uapi/linux/netfilter/nfnetlink_conntrack.h
- * include/uapi/linux/netlink.h
- * include/uapi/linux/rtnetlink.h
- *
- * @hide
- */
-public class NetlinkConstants {
- private NetlinkConstants() {}
-
- public static final int NLA_ALIGNTO = 4;
- /**
- * Flag for dumping struct tcp_info.
- * Corresponding to enum definition in external/strace/linux/inet_diag.h.
- */
- public static final int INET_DIAG_MEMINFO = 1;
-
- public static final int SOCKDIAG_MSG_HEADER_SIZE =
- StructNlMsgHdr.STRUCT_SIZE + StructInetDiagMsg.STRUCT_SIZE;
-
- /**
- * Get the aligned length based on a Short type number.
- */
- public static final int alignedLengthOf(short length) {
- final int intLength = (int) length & 0xffff;
- return alignedLengthOf(intLength);
- }
-
- /**
- * Get the aligned length based on a Integer type number.
- */
- public static final int alignedLengthOf(int length) {
- if (length <= 0) return 0;
- return (((length + NLA_ALIGNTO - 1) / NLA_ALIGNTO) * NLA_ALIGNTO);
- }
-
- /**
- * Convert a address family type to a string.
- */
- public static String stringForAddressFamily(int family) {
- if (family == OsConstants.AF_INET) return "AF_INET";
- if (family == OsConstants.AF_INET6) return "AF_INET6";
- if (family == OsConstants.AF_NETLINK) return "AF_NETLINK";
- if (family == OsConstants.AF_UNSPEC) return "AF_UNSPEC";
- return String.valueOf(family);
- }
-
- /**
- * Convert a protocol type to a string.
- */
- public static String stringForProtocol(int protocol) {
- if (protocol == OsConstants.IPPROTO_TCP) return "IPPROTO_TCP";
- if (protocol == OsConstants.IPPROTO_UDP) return "IPPROTO_UDP";
- return String.valueOf(protocol);
- }
-
- /**
- * Convert a byte array to a hexadecimal string.
- */
- public static String hexify(byte[] bytes) {
- if (bytes == null) return "(null)";
- return toHexString(bytes, 0, bytes.length);
- }
-
- /**
- * Convert a {@link ByteBuffer} to a hexadecimal string.
- */
- public static String hexify(ByteBuffer buffer) {
- if (buffer == null) return "(null)";
- return toHexString(
- buffer.array(), buffer.position(), buffer.remaining());
- }
-
- // Known values for struct nlmsghdr nlm_type.
- public static final short NLMSG_NOOP = 1; // Nothing
- public static final short NLMSG_ERROR = 2; // Error
- public static final short NLMSG_DONE = 3; // End of a dump
- public static final short NLMSG_OVERRUN = 4; // Data lost
- public static final short NLMSG_MAX_RESERVED = 15; // Max reserved value
-
- public static final short RTM_NEWLINK = 16;
- public static final short RTM_DELLINK = 17;
- public static final short RTM_GETLINK = 18;
- public static final short RTM_SETLINK = 19;
- public static final short RTM_NEWADDR = 20;
- public static final short RTM_DELADDR = 21;
- public static final short RTM_GETADDR = 22;
- public static final short RTM_NEWROUTE = 24;
- public static final short RTM_DELROUTE = 25;
- public static final short RTM_GETROUTE = 26;
- public static final short RTM_NEWNEIGH = 28;
- public static final short RTM_DELNEIGH = 29;
- public static final short RTM_GETNEIGH = 30;
- public static final short RTM_NEWRULE = 32;
- public static final short RTM_DELRULE = 33;
- public static final short RTM_GETRULE = 34;
- public static final short RTM_NEWNDUSEROPT = 68;
-
- // Netfilter netlink message types are presented by two bytes: high byte subsystem and
- // low byte operation. See the macro NFNL_SUBSYS_ID and NFNL_MSG_TYPE in
- // include/uapi/linux/netfilter/nfnetlink.h
- public static final short NFNL_SUBSYS_CTNETLINK = 1;
-
- public static final short IPCTNL_MSG_CT_NEW = 0;
- public static final short IPCTNL_MSG_CT_GET = 1;
- public static final short IPCTNL_MSG_CT_DELETE = 2;
- public static final short IPCTNL_MSG_CT_GET_CTRZERO = 3;
- public static final short IPCTNL_MSG_CT_GET_STATS_CPU = 4;
- public static final short IPCTNL_MSG_CT_GET_STATS = 5;
- public static final short IPCTNL_MSG_CT_GET_DYING = 6;
- public static final short IPCTNL_MSG_CT_GET_UNCONFIRMED = 7;
-
- /* see include/uapi/linux/sock_diag.h */
- public static final short SOCK_DIAG_BY_FAMILY = 20;
- public static final short SOCK_DESTROY = 21;
-
- // Netlink groups.
- public static final int RTMGRP_LINK = 1;
- public static final int RTMGRP_IPV4_IFADDR = 0x10;
- public static final int RTMGRP_IPV6_IFADDR = 0x100;
- public static final int RTMGRP_IPV6_ROUTE = 0x400;
- public static final int RTNLGRP_ND_USEROPT = 20;
- public static final int RTMGRP_ND_USEROPT = 1 << (RTNLGRP_ND_USEROPT - 1);
-
- // Device flags.
- public static final int IFF_UP = 1 << 0;
- public static final int IFF_LOWER_UP = 1 << 16;
-
- // Known values for struct rtmsg rtm_protocol.
- public static final short RTPROT_KERNEL = 2;
- public static final short RTPROT_RA = 9;
-
- // Known values for struct rtmsg rtm_scope.
- public static final short RT_SCOPE_UNIVERSE = 0;
-
- // Known values for struct rtmsg rtm_type.
- public static final short RTN_UNICAST = 1;
-
- // Known values for struct rtmsg rtm_flags.
- public static final int RTM_F_CLONED = 0x200;
-
- /**
- * Convert a netlink message type to a string for control message.
- */
- @NonNull
- private static String stringForCtlMsgType(short nlmType) {
- switch (nlmType) {
- case NLMSG_NOOP: return "NLMSG_NOOP";
- case NLMSG_ERROR: return "NLMSG_ERROR";
- case NLMSG_DONE: return "NLMSG_DONE";
- case NLMSG_OVERRUN: return "NLMSG_OVERRUN";
- default: return "unknown control message type: " + String.valueOf(nlmType);
- }
- }
-
- /**
- * Convert a netlink message type to a string for NETLINK_ROUTE.
- */
- @NonNull
- private static String stringForRtMsgType(short nlmType) {
- switch (nlmType) {
- case RTM_NEWLINK: return "RTM_NEWLINK";
- case RTM_DELLINK: return "RTM_DELLINK";
- case RTM_GETLINK: return "RTM_GETLINK";
- case RTM_SETLINK: return "RTM_SETLINK";
- case RTM_NEWADDR: return "RTM_NEWADDR";
- case RTM_DELADDR: return "RTM_DELADDR";
- case RTM_GETADDR: return "RTM_GETADDR";
- case RTM_NEWROUTE: return "RTM_NEWROUTE";
- case RTM_DELROUTE: return "RTM_DELROUTE";
- case RTM_GETROUTE: return "RTM_GETROUTE";
- case RTM_NEWNEIGH: return "RTM_NEWNEIGH";
- case RTM_DELNEIGH: return "RTM_DELNEIGH";
- case RTM_GETNEIGH: return "RTM_GETNEIGH";
- case RTM_NEWRULE: return "RTM_NEWRULE";
- case RTM_DELRULE: return "RTM_DELRULE";
- case RTM_GETRULE: return "RTM_GETRULE";
- case RTM_NEWNDUSEROPT: return "RTM_NEWNDUSEROPT";
- default: return "unknown RTM type: " + String.valueOf(nlmType);
- }
- }
-
- /**
- * Convert a netlink message type to a string for NETLINK_INET_DIAG.
- */
- @NonNull
- private static String stringForInetDiagMsgType(short nlmType) {
- switch (nlmType) {
- case SOCK_DIAG_BY_FAMILY: return "SOCK_DIAG_BY_FAMILY";
- default: return "unknown SOCK_DIAG type: " + String.valueOf(nlmType);
- }
- }
-
- /**
- * Convert a netlink message type to a string for NETLINK_NETFILTER.
- */
- @NonNull
- private static String stringForNfMsgType(short nlmType) {
- final byte subsysId = (byte) (nlmType >> 8);
- final byte msgType = (byte) nlmType;
- switch (subsysId) {
- case NFNL_SUBSYS_CTNETLINK:
- switch (msgType) {
- case IPCTNL_MSG_CT_NEW: return "IPCTNL_MSG_CT_NEW";
- case IPCTNL_MSG_CT_GET: return "IPCTNL_MSG_CT_GET";
- case IPCTNL_MSG_CT_DELETE: return "IPCTNL_MSG_CT_DELETE";
- case IPCTNL_MSG_CT_GET_CTRZERO: return "IPCTNL_MSG_CT_GET_CTRZERO";
- case IPCTNL_MSG_CT_GET_STATS_CPU: return "IPCTNL_MSG_CT_GET_STATS_CPU";
- case IPCTNL_MSG_CT_GET_STATS: return "IPCTNL_MSG_CT_GET_STATS";
- case IPCTNL_MSG_CT_GET_DYING: return "IPCTNL_MSG_CT_GET_DYING";
- case IPCTNL_MSG_CT_GET_UNCONFIRMED: return "IPCTNL_MSG_CT_GET_UNCONFIRMED";
- }
- break;
- }
- return "unknown NETFILTER type: " + String.valueOf(nlmType);
- }
-
- /**
- * Convert a netlink message type to a string by netlink family.
- */
- @NonNull
- public static String stringForNlMsgType(short nlmType, int nlFamily) {
- // Reserved control messages. The netlink family is ignored.
- // See NLMSG_MIN_TYPE in include/uapi/linux/netlink.h.
- if (nlmType <= NLMSG_MAX_RESERVED) return stringForCtlMsgType(nlmType);
-
- // Netlink family messages. The netlink family is required. Note that the reason for using
- // if-statement is that switch-case can't be used because the OsConstants.NETLINK_* are
- // not constant.
- if (nlFamily == OsConstants.NETLINK_ROUTE) return stringForRtMsgType(nlmType);
- if (nlFamily == OsConstants.NETLINK_INET_DIAG) return stringForInetDiagMsgType(nlmType);
- if (nlFamily == OsConstants.NETLINK_NETFILTER) return stringForNfMsgType(nlmType);
-
- return "unknown type: " + String.valueOf(nlmType);
- }
-
- private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- 'A', 'B', 'C', 'D', 'E', 'F' };
- /**
- * Convert a byte array to a hexadecimal string.
- */
- public static String toHexString(byte[] array, int offset, int length) {
- char[] buf = new char[length * 2];
-
- int bufIndex = 0;
- for (int i = offset; i < offset + length; i++) {
- byte b = array[i];
- buf[bufIndex++] = HEX_DIGITS[(b >>> 4) & 0x0F];
- buf[bufIndex++] = HEX_DIGITS[b & 0x0F];
- }
-
- return new String(buf);
- }
-}