TetherController - print iface names in bpf info

Test:
  adb shell dumpsys netd --short | sed -rn '/^  TetherController$/,/^ *Log:$/p'

  TetherController
    Forwarding requests: Tethering
    DNS: netId 100 servers [198.224.173.135, 198.224.174.135, 2001:4888:68:ff00:608:d::, 2001:4888:61:ff00:604:d::]
    dnsmasq PID: 4395
    Interface pairs:
      rmnet_data2 -> rndis0 ACTIVE

    BPF ingress map: iif(iface) v6addr -> oif(iface) srcmac dstmac ethertype [pmtu]
      12(rmnet_data2) 2600:1010:b009:76c8:b0fc:57ff:fe6e:8cc4 -> 33(rndis0) be:b2:04:f9:1a:98 b2:fc:57:6e:8c:c4 86dd [1500]
    BPF stats (downlink): iif(iface) -> packets bytes errors
      12(rmnet_data2) -> 1 104 0
    BPF limit: iif(iface) -> bytes
      12(rmnet_data2) -> 9223372036854775807

Bug: 150736748
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Original-Change: https://android-review.googlesource.com/1330559
Merged-In: I19148e4b079ac1fd2e8a5bf983bd9d8aa1dc4305
Change-Id: I19148e4b079ac1fd2e8a5bf983bd9d8aa1dc4305
diff --git a/server/TetherController.cpp b/server/TetherController.cpp
index a9038c1..2445fb7 100644
--- a/server/TetherController.cpp
+++ b/server/TetherController.cpp
@@ -1235,7 +1235,7 @@
         return;
     }
 
-    dw.println("BPF ingress map: iif v6addr -> oif srcmac dstmac ethertype [pmtu]");
+    dw.println("BPF ingress map: iif(iface) v6addr -> oif(iface) srcmac dstmac ethertype [pmtu]");
     const auto printIngressMap = [&dw](const TetherIngressKey& key, const TetherIngressValue& value,
                                        const BpfMap<TetherIngressKey, TetherIngressValue>&) {
         char addr[INET6_ADDRSTRLEN];
@@ -1243,8 +1243,12 @@
         std::string dst = l2ToString(value.macHeader.h_dest, sizeof(value.macHeader.h_dest));
         inet_ntop(AF_INET6, &key.neigh6, addr, sizeof(addr));
 
-        dw.println("%u %s -> %u %s %s %04x [%u]", key.iif, addr, value.oif, src.c_str(),
-                   dst.c_str(), ntohs(value.macHeader.h_proto), value.pmtu);
+        char iifStr[IFNAMSIZ] = "?";
+        char oifStr[IFNAMSIZ] = "?";
+        if_indextoname(key.iif, iifStr);
+        if_indextoname(value.oif, oifStr);
+        dw.println("%u(%s) %s -> %u(%s) %s %s %04x [%u]", key.iif, iifStr, addr, value.oif, oifStr,
+                   src.c_str(), dst.c_str(), ntohs(value.macHeader.h_proto), value.pmtu);
 
         return Result<void>();
     };
@@ -1256,11 +1260,13 @@
     }
     dw.decIndent();
 
-    dw.println("BPF stats (downlink): iif -> packets bytes errors");
+    dw.println("BPF stats (downlink): iif(iface) -> packets bytes errors");
     const auto printStatsMap = [&dw](const uint32_t& key, const TetherStatsValue& value,
                                      const BpfMap<uint32_t, TetherStatsValue>&) {
-        dw.println("%u -> %" PRIu64 " %" PRIu64 " %" PRIu64, key, value.rxPackets, value.rxBytes,
-                   value.rxErrors);
+        char iifStr[IFNAMSIZ] = "?";
+        if_indextoname(key, iifStr);
+        dw.println("%u(%s) -> %" PRIu64 " %" PRIu64 " %" PRIu64, key, iifStr, value.rxPackets,
+                   value.rxBytes, value.rxErrors);
 
         return Result<void>();
     };
@@ -1272,10 +1278,12 @@
     }
     dw.decIndent();
 
-    dw.println("BPF limit: iif -> bytes");
+    dw.println("BPF limit: iif(iface) -> bytes");
     const auto printLimitMap = [&dw](const uint32_t& key, const uint64_t& value,
                                      const BpfMap<uint32_t, uint64_t>&) {
-        dw.println("%u -> %" PRIu64, key, value);
+        char iifStr[IFNAMSIZ] = "?";
+        if_indextoname(key, iifStr);
+        dw.println("%u(%s) -> %" PRIu64, key, iifStr, value);
 
         return Result<void>();
     };