2022-12-27 22:08:14 +00:00
|
|
|
#!/usr/bin/bash
|
2022-12-27 21:55:43 +00:00
|
|
|
|
|
|
|
if ! jq --version &> /dev/null; then
|
|
|
|
echo "You need to install jq to run this script"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2023-01-07 19:08:27 +00:00
|
|
|
if [ ! "$1" ]; then
|
2023-01-31 07:07:59 +00:00
|
|
|
echo "Please specify format: (bird|babeld) [options]"
|
|
|
|
echo ""
|
|
|
|
echo "Options:"
|
|
|
|
echo "babeld - [with-deny]"
|
2023-04-11 21:58:02 +01:00
|
|
|
echo "babeld-uci - [with-deny]"
|
2023-01-31 07:07:59 +00:00
|
|
|
echo "bird - [prefix-list]"
|
2023-07-02 16:44:04 +01:00
|
|
|
echo "yaml"
|
2023-01-07 19:05:45 +00:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2023-01-01 17:40:07 +00:00
|
|
|
filter=
|
|
|
|
|
2022-12-27 21:55:43 +00:00
|
|
|
for file in *.json; do
|
2022-12-31 21:20:22 +00:00
|
|
|
[[ $file =~ ^(schema.json)$ ]] && continue
|
2022-12-27 22:08:14 +00:00
|
|
|
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
|
2022-12-27 21:55:43 +00:00
|
|
|
maxlen=64
|
|
|
|
fi
|
2023-01-07 19:05:45 +00:00
|
|
|
if [ "$1" == "bird" ]; then
|
2023-01-31 07:07:59 +00:00
|
|
|
ending="{$prefixlen,$maxlen}"
|
|
|
|
if [ "$2" == "prefix-list" ]; then
|
|
|
|
ending=+
|
|
|
|
fi
|
|
|
|
filter="$filter$prefix$ending,\n"
|
2023-01-07 19:05:45 +00:00
|
|
|
elif [ "$1" == "babeld" ]; then
|
2023-01-29 14:23:35 +00:00
|
|
|
filter="${filter}in ip $prefix le $maxlen allow\n"
|
2023-01-31 07:07:59 +00:00
|
|
|
if [ "$2" == "with-deny" ]; then
|
|
|
|
filter="${filter}in ip $prefix deny\n"
|
|
|
|
fi
|
2023-04-11 21:58:02 +01:00
|
|
|
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
|
2023-07-02 16:44:04 +01:00
|
|
|
elif [ "$1" == "yaml" ]; then
|
|
|
|
filter="${filter}- prefix: $prefix\n maxlen: $maxlen\n"
|
2023-01-07 19:05:45 +00:00
|
|
|
fi
|
2022-12-27 21:55:43 +00:00
|
|
|
done
|
|
|
|
done
|
2023-01-01 17:40:07 +00:00
|
|
|
|
2023-01-07 19:05:45 +00:00
|
|
|
if [ "$filter" == "" ]; then
|
|
|
|
echo "Failed: Filter seems empty"
|
|
|
|
exit 1
|
2023-04-11 21:58:02 +01:00
|
|
|
elif [ "$1" == "babeld-uci" ]; then
|
|
|
|
filter=${filter::-4}
|
2023-01-07 19:05:45 +00:00
|
|
|
elif [ "$1" == "bird" ]; then
|
|
|
|
filter=${filter::-3}
|
2023-07-02 16:44:04 +01:00
|
|
|
elif [ "$1" == "babeld" ] || [ "$1" == "yaml" ]; then
|
2023-01-07 19:05:45 +00:00
|
|
|
filter=${filter::-2}
|
|
|
|
fi
|
|
|
|
|
2023-01-01 17:40:07 +00:00
|
|
|
|
2023-01-07 19:08:27 +00:00
|
|
|
echo -e "$filter"
|