mirror of
https://github.com/quantum5/bird-filter.git
synced 2025-04-24 17:11:57 -04:00
33 lines
758 B
Plaintext
33 lines
758 B
Plaintext
|
#!/bin/bash
|
||
|
set -euo pipefail
|
||
|
|
||
|
# Change this to a PeeringDB mirror
|
||
|
PEERINGDB=https://www.peeringdb.com
|
||
|
|
||
|
PEER_SOURCE=/etc/bird/prefix-limits
|
||
|
LIMIT_OUTPUT=/etc/bird/prefix_limits.conf
|
||
|
|
||
|
[ -f "$PEER_SOURCE" ] || exit
|
||
|
|
||
|
tmpdir="$(mktemp -d /tmp/bird-prefix-limit.XXXXXX)"
|
||
|
cleanup() {
|
||
|
rm -rf "$tmpdir"
|
||
|
}
|
||
|
trap cleanup EXIT
|
||
|
|
||
|
join_by() {
|
||
|
local d=${1-} f=${2-}
|
||
|
if shift 2; then
|
||
|
printf %s "$f" "${@/#/$d}"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
readarray -t asns < <(grep -vE '^#|^$' "$PEER_SOURCE")
|
||
|
|
||
|
curl -s "$PEERINGDB/api/net?asn__in=$(join_by , "${asns[@]}")" | \
|
||
|
jq -r '(.data // [])[] | "define LIMIT_AS\(.asn)_V4 = \(.info_prefixes4);\ndefine LIMIT_AS\(.asn)_V6 = \(.info_prefixes6);"' \
|
||
|
> "$tmpdir/limits.conf"
|
||
|
|
||
|
mv "$tmpdir/limits.conf" "$LIMIT_OUTPUT"
|
||
|
chmod a+r "$LIMIT_OUTPUT"
|