IP metrics: update link layer mapping

Properly map transport nan and lowpan to their corresponding link layer
enum. Also do so for interface names

Bug: 34901696
Test: runtest frameworks-net
Change-Id: I44a1cb3b6d21881b64adda7744360e4dfc519b12
This commit is contained in:
Hugo Benichi
2017-07-18 11:35:18 +09:00
parent fed5d370a1
commit f7f7ed013c

View File

@@ -20,6 +20,7 @@ import static android.net.NetworkCapabilities.MAX_TRANSPORT;
import static android.net.NetworkCapabilities.TRANSPORT_BLUETOOTH;
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.net.NetworkCapabilities.TRANSPORT_ETHERNET;
import static android.net.NetworkCapabilities.TRANSPORT_LOWPAN;
import static android.net.NetworkCapabilities.TRANSPORT_VPN;
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
import static android.net.NetworkCapabilities.TRANSPORT_WIFI_AWARE;
@@ -362,29 +363,46 @@ final public class IpConnectivityEventBuilder {
TRANSPORT_LINKLAYER_MAP[TRANSPORT_BLUETOOTH] = IpConnectivityLogClass.BLUETOOTH;
TRANSPORT_LINKLAYER_MAP[TRANSPORT_ETHERNET] = IpConnectivityLogClass.ETHERNET;
TRANSPORT_LINKLAYER_MAP[TRANSPORT_VPN] = IpConnectivityLogClass.UNKNOWN;
// TODO: change mapping TRANSPORT_WIFI_AWARE -> WIFI_AWARE
TRANSPORT_LINKLAYER_MAP[TRANSPORT_WIFI_AWARE] = IpConnectivityLogClass.UNKNOWN;
TRANSPORT_LINKLAYER_MAP[TRANSPORT_WIFI_AWARE] = IpConnectivityLogClass.WIFI_NAN;
TRANSPORT_LINKLAYER_MAP[TRANSPORT_LOWPAN] = IpConnectivityLogClass.LOWPAN;
};
private static int ifnameToLinkLayer(String ifname) {
// Do not try to catch all interface names with regexes, instead only catch patterns that
// are cheap to check, and otherwise fallback on postprocessing in aggregation layer.
for (int i = 0; i < IFNAME_LINKLAYER_MAP.size(); i++) {
String pattern = IFNAME_LINKLAYER_MAP.valueAt(i);
for (int i = 0; i < KNOWN_PREFIX; i++) {
String pattern = IFNAME_PREFIXES[i];
if (ifname.startsWith(pattern)) {
return IFNAME_LINKLAYER_MAP.keyAt(i);
return IFNAME_LINKLAYERS[i];
}
}
return IpConnectivityLogClass.UNKNOWN;
}
private static final SparseArray<String> IFNAME_LINKLAYER_MAP = new SparseArray<String>();
private static final int KNOWN_PREFIX = 7;
private static final String[] IFNAME_PREFIXES = new String[KNOWN_PREFIX];
private static final int[] IFNAME_LINKLAYERS = new int[KNOWN_PREFIX];
static {
IFNAME_LINKLAYER_MAP.put(IpConnectivityLogClass.CELLULAR, "rmnet");
IFNAME_LINKLAYER_MAP.put(IpConnectivityLogClass.WIFI, "wlan");
IFNAME_LINKLAYER_MAP.put(IpConnectivityLogClass.BLUETOOTH, "bt-pan");
// TODO: rekey to USB
IFNAME_LINKLAYER_MAP.put(IpConnectivityLogClass.ETHERNET, "usb");
// TODO: add mappings for nan -> WIFI_AWARE and p2p -> WIFI_P2P
// Ordered from most likely link layer to least likely.
IFNAME_PREFIXES[0] = "rmnet";
IFNAME_LINKLAYERS[0] = IpConnectivityLogClass.CELLULAR;
IFNAME_PREFIXES[1] = "wlan";
IFNAME_LINKLAYERS[1] = IpConnectivityLogClass.WIFI;
IFNAME_PREFIXES[2] = "bt-pan";
IFNAME_LINKLAYERS[2] = IpConnectivityLogClass.BLUETOOTH;
IFNAME_PREFIXES[3] = "p2p";
IFNAME_LINKLAYERS[3] = IpConnectivityLogClass.WIFI_P2P;
IFNAME_PREFIXES[4] = "aware";
IFNAME_LINKLAYERS[4] = IpConnectivityLogClass.WIFI_NAN;
IFNAME_PREFIXES[5] = "eth";
IFNAME_LINKLAYERS[5] = IpConnectivityLogClass.ETHERNET;
IFNAME_PREFIXES[6] = "wpan";
IFNAME_LINKLAYERS[6] = IpConnectivityLogClass.LOWPAN;
}
}