Files
moby/internal/testutil/libnetworkutils
Cory Snider 4748c63074 libnetwork: keep the netns directory in the controller config
OptionExecRoot did not configure the controller it was passed to: it set
the directory for all network namespaces in package osl, which every
controller in the process shared. The overlay driver found that
directory by generating a sandbox key for a made-up ID and taking the
key's parent directory.

Replace it with OptionNetnsDir, available on Linux and FreeBSD, which
sets the directory in the controller's config. OptionExecRoot was a
no-op on Windows. The controller generates its sandboxes' keys from the
directory, and the overlay driver is given the directory when it is
registered and builds its own keys. Each overlay driver instance scans
its own directory for the VNIs of the sandboxes a previous run of the
daemon left behind. The controller creates the directory when it is
created, instead of osl creating the package-wide directory when it
first creates a namespace.

The daemon still keeps the namespaces in <exec-root>/netns. The
directory has no default: on Linux and FreeBSD, the controller refuses
to create a sandbox when none is configured, as does the overlay driver,
so a test which leaves out the option fails instead of leaving network
namespaces behind in a directory shared with the host. Tests which
create sandboxes keep them in a temporary directory, and unmount the
namespaces left in it when they end.

The key formats do not change on Linux. On FreeBSD, sandbox keys become
paths in the directory, as on Linux. Drop GenerateKey's lookup of an
existing key for an ID starting with "-": no caller passes such an ID.

Signed-off-by: Cory Snider <csnider@mirantis.com>
Assisted-By: Claude Opus 5.5
2026-10-09 14:31:01 -04:00
..