#!/usr/bin/bash

set -eu

interfaces=$(/usr/bin/ip link | /usr/bin/sed -En 's/.*(macvtap-.*)@.*/\1/p')
gateway=$(/usr/bin/ip route list default | /usr/bin/head -1 | /usr/bin/cut -f 3 -d " ")

filterchain=""
for interface in ${interfaces}; do
  filterchain=$(cat <<- EOF
${filterchain}

    chain filterin_${interface} {
        type filter hook ingress device ${interface} priority filter; policy drop;
        ip saddr \$allowed_ipv4 accept
        ip saddr ${gateway} accept
        ip saddr 255.255.255.255 accept
        ether type arp accept
    }

    chain filterout_${interface} {
        type filter hook egress device ${interface} priority filter; policy drop;
        ip daddr \$allowed_ipv4 accept
        ip daddr ${gateway} accept
        ip daddr 255.255.255.255 accept
        ether type arp accept
    }
EOF
)
done



nft_table=$(cat <<- EOF
define allowed_ipv4 = { {{ exam_destination_allowed_ipv4 | join(",") }} }

table netdev filtermacvtap {
${filterchain}
}
EOF
)

echo "$nft_table" | /usr/sbin/nft -f -
