From e1ee59f176c2acb01eefa8b83e54e1d0377930b1 Mon Sep 17 00:00:00 2001
From: Jacek Kowalski <Jacek@jacekk.info>
Date: Thu, 12 Mar 2026 23:58:38 +0000
Subject: [PATCH] Add nogw/nogw4/nogw6 options to prevent assignment of gateway

---
 test_integration.sh |  162 ++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 145 insertions(+), 17 deletions(-)

diff --git a/test_integration.sh b/test_integration.sh
index ea095a2..9f1744c 100755
--- a/test_integration.sh
+++ b/test_integration.sh
@@ -1,14 +1,21 @@
-#!/bin/sh
+#!/bin/bash
 
-set -e
+set -e -x
 
 NAME=${NAME:-jacekkow/pyveth}
 VERSION=${VERSION:-latest}
 
 PLUGIN="${NAME}:${VERSION}"
 
+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}" \
@@ -23,26 +30,40 @@
   test1
 
 ADDRESSES=$(docker run --rm --network test1 \
-  debian \
-  /bin/ip addr show
+  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 \
   --ip 192.168.255.25 --ip6 2001:db8:dddd:eeee:ffff:1:2:3 \
-  debian \
-  /bin/ip addr show
+  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 \
-  --internal \
   --driver "${PLUGIN}" \
   --ipam-driver jacekkow/pyipam:latest \
   --ipv6 \
@@ -53,15 +74,122 @@
   test2
 
 ROUTES=$(docker run --rm --network test2 \
-  debian \
-  /bin/ip route show
+  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 \
-  debian \
-  /bin/ip -6 route show
+  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

--
Gitblit v1.10.0