#!/bin/bash set -e #set -x # there is no legacy backend to test [[ $XT_MULTI == *xtables-nft-multi ]] || { echo "skip $XT_MULTI"; exit 0; } # fill ebtables manually $XT_MULTI ebtables --init-table $XT_MULTI ebtables -A INPUT -p IPv4 -i lo -j ACCEPT $XT_MULTI ebtables -P FORWARD DROP $XT_MULTI ebtables -A OUTPUT -s ff:ff:ff:ff:ff:ff/ff:ff:ff:ff:ff:ff -j DROP $XT_MULTI ebtables -N foo $XT_MULTI ebtables -A foo --802_3-sap 0x23 -j ACCEPT $XT_MULTI ebtables -A foo --802_3-sap 0xaa --802_3-type 0x1337 -j ACCEPT #$XT_MULTI ebtables -A foo --among-dst fe:ed:ba:be:00:01,fe:ed:ba:be:00:02,fe:ed:ba:be:00:03 -j ACCEPT $XT_MULTI ebtables -A foo -p ARP --arp-gratuitous -j ACCEPT $XT_MULTI ebtables -A foo -p ARP --arp-opcode Request -j ACCEPT $XT_MULTI ebtables -A foo -p ARP --arp-ip-src 10.0.0.1 -j ACCEPT $XT_MULTI ebtables -A foo -p ARP --arp-ip-dst 10.0.0.0/8 -j ACCEPT $XT_MULTI ebtables -A foo -p ARP --arp-mac-src fe:ed:ba:be:00:01 -j ACCEPT $XT_MULTI ebtables -A foo -p ARP --arp-mac-dst fe:ed:ba:be:00:01/ff:ff:ff:00:00:00 -j ACCEPT $XT_MULTI ebtables -A foo -p IPv4 --ip-src 10.0.0.1 -j ACCEPT $XT_MULTI ebtables -A foo -p IPv4 --ip-dst 10.0.0.0/8 -j ACCEPT $XT_MULTI ebtables -A foo -p IPv4 --ip-tos 0x10 -j ACCEPT $XT_MULTI ebtables -A foo -p IPv4 --ip-protocol tcp -j ACCEPT #$XT_MULTI ebtables -A foo -p IPv4 --ip-sport 23 -j ACCEPT #$XT_MULTI ebtables -A foo -p IPv4 --ip-dport 1024:4096 -j ACCEPT $XT_MULTI ebtables -A foo -p IPv6 --ip6-src feed:babe::1 -j ACCEPT $XT_MULTI ebtables -A foo -p IPv6 --ip6-dst feed:babe::/64 -j ACCEPT $XT_MULTI ebtables -A foo -p IPv6 --ip6-proto tcp -j ACCEPT #$XT_MULTI ebtables -A foo -p IPv6 --ip6-sport 23 -j ACCEPT #$XT_MULTI ebtables -A foo -p IPv6 --ip6-dport 1024:4096 -j ACCEPT $XT_MULTI ebtables -A foo --limit 100 --limit-burst 42 -j ACCEPT $XT_MULTI ebtables -A foo --log $XT_MULTI ebtables -A foo --mark-set 0x23 --mark-target ACCEPT $XT_MULTI ebtables -A foo --nflog $XT_MULTI ebtables -A foo --pkttype-type multicast -j ACCEPT $XT_MULTI ebtables -A foo --stp-type config -j ACCEPT #$XT_MULTI ebtables -A foo --vlan-id 42 -j ACCEPT $XT_MULTI ebtables -A foo --802_3-sap 0x23 --limit 100 -j ACCEPT $XT_MULTI ebtables -A foo --pkttype-type multicast --log $XT_MULTI ebtables -A foo --pkttype-type multicast --limit 100 -j ACCEPT $XT_MULTI ebtables -A FORWARD -j foo $XT_MULTI ebtables -N bar $XT_MULTI ebtables -P bar RETURN $XT_MULTI ebtables -t nat -A PREROUTING --redirect-target ACCEPT #$XT_MULTI ebtables -t nat -A PREROUTING --to-src fe:ed:ba:be:00:01 $XT_MULTI ebtables -t nat -A OUTPUT -j ACCEPT $XT_MULTI ebtables -t nat -P OUTPUT DROP $XT_MULTI ebtables -t nat -A POSTROUTING -j ACCEPT #$XT_MULTI ebtables -t nat -A POSTROUTING --to-dst fe:ed:ba:be:00:01 --dnat-target ACCEPT $XT_MULTI ebtables -t nat -N nat_foo -P DROP # compare against stored ebtables dump DUMP='*filter :INPUT ACCEPT :FORWARD DROP :OUTPUT ACCEPT :foo ACCEPT :bar RETURN -A INPUT -p IPv4 -i lo -j ACCEPT -A FORWARD -j foo -A OUTPUT -s Broadcast -j DROP -A foo --802_3-sap 0x23 -j ACCEPT -A foo --802_3-sap 0xaa --802_3-type 0x1337 -j ACCEPT -A foo -p ARP --arp-gratuitous -j ACCEPT -A foo -p ARP --arp-op Request -j ACCEPT -A foo -p ARP --arp-ip-src 10.0.0.1 -j ACCEPT -A foo -p ARP --arp-ip-dst 10.0.0.0/8 -j ACCEPT -A foo -p ARP --arp-mac-src fe:ed:ba:be:00:01 -j ACCEPT -A foo -p ARP --arp-mac-dst fe:ed:ba:00:00:00/ff:ff:ff:00:00:00 -j ACCEPT -A foo -p IPv4 --ip-src 10.0.0.1 -j ACCEPT -A foo -p IPv4 --ip-dst 10.0.0.0/8 -j ACCEPT -A foo -p IPv4 --ip-tos 0x10 -j ACCEPT -A foo -p IPv4 --ip-proto tcp -j ACCEPT -A foo -p IPv6 --ip6-src feed:babe::1 -j ACCEPT -A foo -p IPv6 --ip6-dst feed:babe::/64 -j ACCEPT -A foo -p IPv6 --ip6-proto tcp -j ACCEPT -A foo --limit 100/sec --limit-burst 42 -j ACCEPT -A foo --log-level notice --log-prefix "" -j CONTINUE -A foo -j mark --mark-set 0x23 --mark-target ACCEPT -A foo --nflog-group 1 -j CONTINUE -A foo --pkttype-type multicast -j ACCEPT -A foo --stp-type config -j ACCEPT -A foo --802_3-sap 0x23 --limit 100/sec --limit-burst 5 -j ACCEPT -A foo --pkttype-type multicast --log-level notice --log-prefix "" -j CONTINUE -A foo --pkttype-type multicast --limit 100/sec --limit-burst 5 -j ACCEPT *nat :PREROUTING ACCEPT :OUTPUT DROP :POSTROUTING ACCEPT :nat_foo DROP -A PREROUTING -j redirect -A OUTPUT -j ACCEPT -A POSTROUTING -j ACCEPT' diff -u <(echo -e "$DUMP") <($XT_MULTI ebtables-save | grep -v '^#') # make sure dump can be restored and check it didn't change $XT_MULTI ebtables --init-table $XT_MULTI ebtables-restore <<<$DUMP diff -u <(echo -e "$DUMP") <($XT_MULTI ebtables-save | grep -v '^#')