mirror of https://codeberg.org/CRXN/entitydb.git
64 lines
1.9 KiB
Bash
Executable File
64 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/bash
|
|
|
|
if ! jq --version &> /dev/null; then
|
|
echo "You need to install jq to run this script"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! "$1" ]; then
|
|
echo "Please specify format: (bird|babeld) [options]"
|
|
echo ""
|
|
echo "Options:"
|
|
echo "babeld - [with-deny]"
|
|
echo "babeld-uci - [with-deny]"
|
|
echo "bird - [prefix-list]"
|
|
echo "yaml"
|
|
exit 1
|
|
fi
|
|
|
|
filter=
|
|
|
|
for file in *.json; do
|
|
[[ $file =~ ^(schema.json)$ ]] && continue
|
|
for prefix in $(jq -r ".route | keys[]" "$file"); do
|
|
prefixlen=$(echo "$prefix" | cut -d "/" -f2)
|
|
maxlen=$(jq -r ".route.\"$prefix\".\"max-len\"" "$file")
|
|
if [ "$maxlen" == "null" ]; then
|
|
maxlen=64
|
|
fi
|
|
if [ "$1" == "bird" ]; then
|
|
ending="{$prefixlen,$maxlen}"
|
|
if [ "$2" == "prefix-list" ]; then
|
|
ending=+
|
|
fi
|
|
filter="$filter$prefix$ending,\n"
|
|
elif [ "$1" == "babeld" ]; then
|
|
filter="${filter}in ip $prefix le $maxlen allow\n"
|
|
if [ "$2" == "with-deny" ]; then
|
|
filter="${filter}in ip $prefix deny\n"
|
|
fi
|
|
elif [ "$1" == "babeld-uci" ]; then
|
|
filter="${filter}config filter\n\toption 'type'\t'in'\n\toption 'ip'\t'$prefix'\n\toption 'le'\t'$maxlen'\n\toption 'action'\t'allow'\n\n"
|
|
if [ "$2" == "with-deny" ]; then
|
|
filter="${filter}config filter\n\toption 'type'\t'in'\n\toption 'ip'\t'$prefix'\n\toption 'action'\t'deny'\n\n"
|
|
fi
|
|
elif [ "$1" == "yaml" ]; then
|
|
filter="${filter}- prefix: $prefix\n maxlen: $maxlen\n"
|
|
fi
|
|
done
|
|
done
|
|
|
|
if [ "$filter" == "" ]; then
|
|
echo "Failed: Filter seems empty"
|
|
exit 1
|
|
elif [ "$1" == "babeld-uci" ]; then
|
|
filter=${filter::-4}
|
|
elif [ "$1" == "bird" ]; then
|
|
filter=${filter::-3}
|
|
elif [ "$1" == "babeld" ] || [ "$1" == "yaml" ]; then
|
|
filter=${filter::-2}
|
|
fi
|
|
|
|
|
|
echo -e "$filter"
|