#!/bin/sh nft_table="xray" nft_set="dst_list" nft_set_exclude="dst_exclude" ipset_dir="/etc/xray/ipset" ipnet_dir="/etc/xray/ipnet" for ipset_file in "$ipset_dir"/xray_ip*; do ipset_filename=$(basename "$ipset_file") ipnet_file="$ipnet_dir/$ipset_filename" if [ ! -s "$ipset_file" ] || ! grep -q "[^[:space:]]" "$ipset_file"; then logger -t xray-prepare_net "$ipset_dir/$ipset_filename: file is empty" continue fi if echo "$ipset_filename" | grep -qiE "exclude|white"; then target_set="$nft_set_exclude" else target_set="$nft_set" fi { echo -n "add element ip $nft_table $target_set { " awk ' /^[[:space:]]*#/ || /^[[:space:]]*$/ { next } { val = $0 if (val !~ /\//) val = val "/32" printf "%s%s", (count++ ? ", " : ""), val } ' "$ipset_file" echo " }" } > "$ipnet_file" if ! nft -c -f "$ipnet_file" >/dev/null 2>&1; then logger -t xray-prepare_net "$ipnet_dir/$ipset_filename has errors" fi done