# SPDX-License-Identifier: MIT { stdenv, ipcalc, source }: { dn42-roa-bird2-4 = stdenv.mkDerivation { pname = "dn42-roa-bird2-4"; inherit (source) version src; buildPhase = '' for f in data/route/*; do unset route maxlen action while read a b; do [[ "$a" = route: ]] && route="$b" [[ "$a" = max-length: ]] && maxlen="$b" done < "$f" while read nr faction fprefix _ fmaxlen _; do [[ ''${nr:0:1} != '#' && ''${nr:0:1} != "" && \ "$(${ipcalc}/bin/ipcalc --no-decorate -n "''${route%/*}/''${fprefix#*/}")" = "''${fprefix%/*}" ]] && { action="$faction" [[ -z "$maxlen" ]] && maxlen="$fmaxlen" break } done < data/filter.txt prefixlen="''${route#*/}" maxlen="$((maxlen>prefixlen ? maxlen : prefixlen))" maxlen="$((maxlen<32 ? maxlen : 32))" # An IP block might be announced by multiple AS [[ $action = permit ]] && while read a b; do [[ "$a" = origin: ]] && printf "route %s max %s as %s;\n" "$route" "$maxlen" "''${b:2}" done < "$f" true done > bird2-4.txt ''; installPhase = '' install -Dm444 bird2-4.txt -t "$out/share/dn42-roa/" ''; }; dn42-roa-bird2-6 = stdenv.mkDerivation { pname = "dn42-roa-bird2-6"; inherit (source) version src; buildPhase = '' for f in data/route6/*; do unset route6 maxlen while IFS= read line; do [[ "''${line:0:1}" != ' ' ]] && { read a b <<< "$line" [[ "$a" = route6: ]] && route6="$b" [[ "$a" = max-length: ]] && maxlen="$b" } done < "$f" [[ -z "$maxlen" ]] && maxlen=64 prefixlen="''${route6#*/}" maxlen="$((maxlen>prefixlen ? maxlen : prefixlen))" while read a b; do [[ "$a" = origin: ]] && printf "route %s max "$maxlen" as %s;\n" "$route6" "''${b:2}" done < "$f" true done > bird2-6.txt ''; installPhase = '' install -Dm444 bird2-6.txt -t "$out/share/dn42-roa/" ''; }; }