# dn42-roa.nix -rw-r--r-- 2.1 KiB View raw
                                                                                
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/"
    '';
  };
}