# Patchpanel

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](../system-proxy) that transparently
         supports web proxy authentication for proxy aware web clients on the
         host platform or in guest application platforms.
    *    The [DNS proxy service](../dns-proxy) that manages DNS functionality
         including providing Chrome OS with DNS-over-HTTPS.
    *    Various Tast test packages including those for VPN and [system-proxy](../system-proxy).
*   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](../shill) with the GetTrafficCounters D-Bus API for implementing
    Service network usage metering.

[RFC 4389]: https://tools.ietf.org/html/rfc4389
