Files
ferrix/scripts/in-namespace.sh
T
Rayhaan JaufeerallyandClaude Fable 5.1 175a13d506 Hygiene: scripts, CI, docs and manifests
- scripts/in-namespace.sh set CARGO_TARGET_DIR to the empty string when
  it was unset, which cargo refuses, and dropped RUSTFLAGS, so the run
  in the namespace rebuilt what kernel-tests.sh had just built. Each is
  passed on only where set.
- The README's list of unsupported features still had route reflection
  and graceful restart, both of which exist; the command-line reference
  lacked SIGUSR1 and exit status 75; the HTTP API reference did not say
  what errors look like.
- The event stream said "missed 0 events" for the best-routes stream,
  which does not count what it missed; it leaves the count out now.
- CI lints bgp-bench with its count-memory feature, which nothing built.
- bgp-bench had two unused dev-dependencies; bgp-integration-tests had
  three dependencies that only its tests and examples use.
- install.sh updates apt before installing; two-routers.sh loses an
  unused variable; small things in the web crate.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 11:15:58 +02:00

25 lines
1.2 KiB
Bash
Executable File

#!/bin/sh
# Runs a command on Linux in a network namespace made for it, as the
# calling user with CAP_NET_ADMIN and nothing else: what the tests that
# change a kernel's routes need. For running one of them by hand, e.g.
#
# FERRIX_ROUTES=1000000 scripts/in-namespace.sh cargo test --release \
# -p bgp-fib --test kernel many -- --include-ignored --nocapture
set -eu
namespace="ferrix-ns-$$"
sudo modprobe dummy 2>/dev/null || true
sudo ip netns add "$namespace"
trap 'sudo ip netns del "$namespace"' EXIT
sudo ip netns exec "$namespace" ip link set lo up
# Only the variables that are set are passed on: cargo refuses an empty
# CARGO_TARGET_DIR, and the build settings have to be the same as the
# prebuild's in scripts/kernel-tests.sh for it to be reused.
sudo ip netns exec "$namespace" \
setpriv --reuid "$(id -u)" --regid "$(id -g)" --init-groups \
--inh-caps +net_admin --ambient-caps +net_admin \
env PATH="$PATH" HOME="$HOME" \
${CARGO_TARGET_DIR:+CARGO_TARGET_DIR="$CARGO_TARGET_DIR"} \
${RUSTFLAGS:+RUSTFLAGS="$RUSTFLAGS"} \
${CARGO_TERM_COLOR:+CARGO_TERM_COLOR="$CARGO_TERM_COLOR"} \
${FERRIX_ROUTES:+FERRIX_ROUTES="$FERRIX_ROUTES"} "$@"