This directory contains the Patchpanel platform networking service daemon (formerly arc-networkd).
Patchpanel is the network control plane manager for all guest application platforms running inside virtual machines (ARCVM, Termina, PluginVM) or containers (ARC++). Patchpanel configures and controls the network datapath for these guest platforms and provides additional services and features:
- Creation and configuration of virtual ethernet interface pairs for ARC++.
- Creation and configuration of TAP devices for CrosVM (ARCVM, Termina and PluginVM).
- Configuration of source NAT and IP forwarding for all guest platforms, and configuration of inbound firewall destination NAT rules for ARC.
- IPv6 NDProxy forwarder implementing RFC 4389 and proxying ICMPv6 traffic between physical networks and guest platforms.
- mDNS forwarder proxying mDNS traffic between physical networks and guest platforms in both directions, with additional facilities for transparent traversal over IPv4 SNAT.
- SSDP forwarder proxying SSDP traffic between physical networks and guest platforms.
- ADB-over-TCP proxy relaying ADB inbound connections and Crostini ADB-sideloading connections to ARC.
- Broadcast forwarder proxying broadcast packets between physical networks and ARC.
Patchpanel's IPv6 NDProxy and mDNS/SSDP forwarders also run as standalone binaries inside Termina for providing these features to user lxd containers.
In addition Patchpanel implements other general networking services and features not associated with virtualization:
- A ConnectNamespace D-Bus API for creating a virtual datapath and configuring routing for a network namespace. This API is currently used by:
- The authenticated web proxy relay that transparently supports web proxy authentication for proxy aware web clients on the host platform or in guest application platforms.
- A ModifyPortRule D-Bus API for opening destination ports in the inbound firewall rules and for forwarding destination ports to guest application platforms.
- Traffic counters for measuring network usage for a variety of sources (Chrome, system, guest application platforms, ...). Counters are polled by shill with the GetTrafficCounters D-Bus API for implementing Service network usage metering.