diff --git a/common/nft.sh b/common/nft.sh index 1a325a8..da9cd13 100644 --- a/common/nft.sh +++ b/common/nft.sh @@ -99,14 +99,17 @@ nft_create_or_update_flowtable() # $1 = flags ('offload' for hw offload) # $2,$3,$4,... - interfaces # can be called multiple times to add interfaces. interfaces can only be added , not removed - local flags=$1 devices + local flags=$1 devices makelist shift - # warning ! tested on nft 1.0.1 . 0.9.6 has bug not allowing quotes in flowtable device list - # dont want to make KOSTIL here, pls upgrade - make_quoted_comma_list devices "$@" - [ -n "$devices" ] && devices="devices={$devices};" + # warning ! nft versions at least up to 1.0.1 do not allow interface names starting with digit in flowtable and do not allow quoting + # warning ! openwrt fixes this in post-21.x snapshots with special nft patch + # warning ! in traditional linux distros nft is unpatched and will fail with quoted interface definitions if unfixed [ -n "$flags" ] && flags="flags $flags;" - nft add flowtable inet $ZAPRET_NFT_TABLE ft "{ hook ingress priority -1; $flags $devices }" + for makelist in make_quoted_comma_list make_comma_list; do + $makelist devices "$@" + [ -n "$devices" ] && devices="devices={$devices};" + nft add flowtable inet $ZAPRET_NFT_TABLE ft "{ hook ingress priority -1; $flags $devices }" && break + done } nft_flush_ifsets() { diff --git a/docs/nftables_notes.txt b/docs/nftables_notes.txt index 58d7cb8..0378135 100644 --- a/docs/nftables_notes.txt +++ b/docs/nftables_notes.txt @@ -45,11 +45,9 @@ Swap позволяет немного сгладить проблему, но Боль N4 -Лишь самые последние версии nft (проверено 1.0.1) не имеют бага, который не разрешает названия интерфейсов в кавычках в -определении flowtable. На ubuntu 20.04 версия более старая. Пролетаем. -Без кавычек нельзя вставить интерфейсы , имя которых начинается с цифры. -Не хотелось городить костыли. Обновляйтесь. Иначе не будет работать flow offloading. -На самых первых OpenWRT снапшотах с firewall4 версия nft достаточно новая. +Все версии nft вплоть до как минимум 1.0.1 имеют баг, который не разрешает названия интерфейсов в кавычках в +определении flowtable. Без кавычек нельзя вставить интерфейсы , имя которых начинается с цифры. +OpenWRT решает эту проблему отдельным патчем в snapshot версии, но на традиционных системах и в openwrt 21.x- его нет. Почему бы не наплевать на интерфейсы, начинающиеся с цифры ? Потому что для openwrt 6to4-6to4, 6in4-he-net - обычное явление.