--- /dev/null
+#!/bin/bash
+
+# check if netdev chains survive without a single device
+
+unshare -n bash -c "ip link add d0 type dummy; \
+ $NFT \"table netdev t { \
+ chain c { \
+ type filter hook ingress priority 0; devices = { d0 }; \
+ }; \
+ }\"; \
+ ip link del d0; \
+ $NFT list chain netdev t c"
$NFT add table netdev test { flags dormant\; }
$NFT add chain netdev test ingress { type filter hook ingress devices = { "dummy0", "dummy1" } priority 0\; policy drop\; }
ip link del dummy0
+if [ "$NFT_TEST_HAVE_ifname_based_hooks" = y ]; then
+ $NFT 'delete chain netdev test ingress { devices = { "dummy0" }; }'
+fi
set -e
+ft_deldev() {
+ $NFT "delete flowtable $1 $2 { devices = { $3 }; }"
+}
+
iface_cleanup() {
ip link del dummy1 &>/dev/null || :
+ if [ "$NFT_TEST_HAVE_ifname_based_hooks" = y ]; then
+ ft_deldev filter1 Main_ft1 dummy1
+ ft_deldev filter2 Main_ft2 dummy1
+ fi
}
trap 'iface_cleanup' EXIT
-iface_cleanup
ip link add name dummy1 type dummy
iface_cleanup() {
ip link del d0 &>/dev/null || :
}
-trap 'iface_cleanup' EXIT
+ft_cleanup() {
+ if [ "$NFT_TEST_HAVE_ifname_based_hooks" = y ]; then
+ $NFT 'delete flowtable ip filter f2 { devices = { d0 }; }'
+ $NFT 'delete flowtable inet filter f2 { devices = { d0 }; }'
+ fi
+}
+trap 'iface_cleanup; ft_cleanup' EXIT
iface_cleanup
ip link add d0 type dummy
set -e
+# The ruleset is supposed to fail due to non-existing interfaces,
+# hence depends on non-name-based interface hooks.
+[ "$NFT_TEST_HAVE_ifname_based_hooks" = y ] && exit 77
+
RULESET="table inet filter {
flowtable ftable {
hook ingress priority 0; devices = { eno1, eno0, x };