pyveth - veth driver for Docker Engine written in Python
Jacek Kowalski
2026-03-13 9f3c9ce503a1f983ee8fffeb6f1eaf571b976ca0
test_integration.sh
@@ -1,16 +1,21 @@
#!/bin/sh
#!/bin/bash
set -e
set -e -x
NAME=${NAME:-jacekkow/pyveth}
VERSION=${VERSION:-latest}
PLUGIN="${NAME}:${VERSION}"
docker plugin install jacekkow/pyipam:latest || true
docker network rm test1 || true
docker network rm test2 || true
docker plugin install jacekkow/pyipam:latest || true
##########################
# Test address assignment
docker network create \
  --internal \
  --driver "${PLUGIN}" \
@@ -28,8 +33,14 @@
  alpine \
  /sbin/ip addr show
)
echo "${ADDRESSES}" | grep 192.168.255.129/24
echo "${ADDRESSES}" | grep 2001:db8:aaaa:bbbb::1/32
if ! echo "${ADDRESSES}" | grep 192.168.255.129/24; then
   echo "ERROR: invalid IPv4 address assigned"
   exit 1
fi
if ! echo "${ADDRESSES}" | grep 2001:db8:aaaa:bbbb::1/32; then
   echo "ERROR: invalid IPv6 address assigned"
   exit 1
fi
ADDRESSES=$(docker run --rm --network test1 \
@@ -37,12 +48,21 @@
  alpine \
  /sbin/ip addr show
)
echo "${ADDRESSES}" | grep 192.168.255.25/24
echo "${ADDRESSES}" | grep 2001:db8:dddd:eeee:ffff:1:2:3/32
if ! echo "${ADDRESSES}" | grep 192.168.255.25/24; then
   echo "ERROR: invalid IPv4 address assigned"
   exit 1
fi
if ! echo "${ADDRESSES}" | grep 2001:db8:dddd:eeee:ffff:1:2:3/32; then
   echo "ERROR: invalid IPv6 address assigned"
   exit 1
fi
docker network rm test1
######################
# Test routing config
docker network create \
  --driver "${PLUGIN}" \
  --ipam-driver jacekkow/pyipam:latest \
@@ -57,12 +77,177 @@
  alpine \
  /sbin/ip route show
)
echo "${ROUTES}" | grep 192.168.255.254
if ! echo "${ROUTES}" | grep 192.168.255.254; then
   echo "ERROR: invalid IPv4 route"
   exit 1
fi
ROUTES=$(docker run --rm --network test2 \
  alpine \
  /sbin/ip -6 route show
)
echo "${ROUTES}" | grep 2001:db8:ffff:ffff:ffff:ffff:ffff:ffff
if ! echo "${ROUTES}" | grep 2001:db8:ffff:ffff:ffff:ffff:ffff:ffff; then
   echo "ERROR: invalid IPv6 route"
   exit 1
fi
docker network rm test2
##############
# Test nogw=1
docker network create \
  --driver "${PLUGIN}" \
  --opt nogw=1 \
  --ipam-driver jacekkow/pyipam:latest \
  --ipv6 \
  --subnet 192.168.255.0/24 \
  --subnet 2001:db8::/32 \
  test2
ROUTES=$(docker run --rm --network test2 \
  alpine \
  /sbin/ip route show
)
if echo "${ROUTES}" | grep 192.168.255.254; then
   echo "ERROR: IPv4 route assigned with nogw=1"
   exit 1
fi
ROUTES=$(docker run --rm --network test2 \
  alpine \
  /sbin/ip -6 route show
)
if echo "${ROUTES}" | grep 2001:db8:ffff:ffff:ffff:ffff:ffff:ffff; then
   echo "ERROR: IPv6 route assigned with nogw=1"
   exit 1
fi
docker network rm test2
###############
# Test nogw4=1
docker network create \
  --driver "${PLUGIN}" \
  --opt nogw4=1 \
  --ipam-driver jacekkow/pyipam:latest \
  --ipv6 \
  --subnet 192.168.255.0/24 \
  --subnet 2001:db8::/32 \
  --gateway 2001:db8:ffff:ffff:ffff:ffff:ffff:ffff \
  test2
ROUTES=$(docker run --rm --network test2 \
  alpine \
  /sbin/ip route show
)
if echo "${ROUTES}" | grep 192.168.255.254; then
   echo "ERROR: IPv4 route assigned with nogw4=1"
   exit 1
fi
ROUTES=$(docker run --rm --network test2 \
  alpine \
  /sbin/ip -6 route show
)
if ! echo "${ROUTES}" | grep 2001:db8:ffff:ffff:ffff:ffff:ffff:ffff; then
   echo "ERROR: IPv6 route not assigned with nogw4=1"
   exit 1
fi
docker network rm test2
################
# Test nogw6=1
docker network create \
  --driver "${PLUGIN}" \
  --opt nogw6=1 \
  --ipam-driver jacekkow/pyipam:latest \
  --ipv6 \
  --subnet 192.168.255.0/24 \
  --gateway 192.168.255.254 \
  --subnet 2001:db8::/32 \
  test2
ROUTES=$(docker run --rm --network test2 \
  alpine \
  /sbin/ip route show
)
if ! echo "${ROUTES}" | grep 192.168.255.254; then
   echo "ERROR: IPv4 route not assigned with nogw6=1"
   exit 1
fi
ROUTES=$(docker run --rm --network test2 \
  alpine \
  /sbin/ip -6 route show
)
if echo "${ROUTES}" | grep 2001:db8:ffff:ffff:ffff:ffff:ffff:ffff; then
   echo "ERROR: IPv6 route assigned with nogw6=1"
   exit 1
fi
docker network rm test2
###############
# Test gw4/gw6
docker network create \
  --internal \
  --driver "${PLUGIN}" \
  --opt nogw=1 \
  --opt gw4=192.168.254.1 \
  --ipam-driver jacekkow/pyipam:latest \
  --ipam-opt ptp=1 \
  --ipv6 \
  --subnet 192.168.255.0/24 \
  --subnet 2001:db8::/32 \
  test2
ADDRESSES=$(docker run --rm --network test2 \
  alpine \
  /sbin/ip addr show
)
if ! echo "${ADDRESSES}" | grep 192.168.255.0/32; then
   echo "ERROR: invalid PtP address assigned"
   exit 1
fi
if ! echo "${ADDRESSES}" | grep 2001:db8::/128; then
   echo "ERROR: invalid PtP address assigned"
   exit 1
fi
ROUTES=$(docker run --rm --network test2 \
  alpine \
  /sbin/ip route show
)
if ! echo "${ROUTES}" | grep "via 192.168.254.1"; then
   echo "ERROR: IPv4 route not assigned with gw4=..."
   exit 1
fi
ROUTES=$(docker run --rm --network test2 \
  alpine \
  /sbin/ip -6 route show
)
if echo "${ROUTES}" | grep default; then
   echo "ERROR: IPv6 route assigned with nogw=1"
   exit 1
fi
ROUTES=$(docker run --rm --network name=test2,driver-opt=gw6=fe80::1 \
  alpine \
  /sbin/ip -6 route show
)
if ! echo "${ROUTES}" | grep "via fe80::1"; then
   echo "ERROR: IPv6 route not assigned with per-container gw6=..."
   exit 1
fi
docker network rm test2