1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# 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/"
'';
};
}