> On 25 Jan 2024, at 09:23, Maria Matejka <maria.mate...@nic.cz> wrote:
> 
> 
> 
> On 25 January 2024 08:34:36 CET, Jeroen Massar <jer...@massar.ch> wrote:
>> 
>> 
>>> On 24 Jan 2024, at 11:08, Maria Matejka <maria.mate...@nic.cz> wrote:
>>> 
>>> 
>>> 
>>> On 24 January 2024 08:53:19 CET, Jeroen Massar via Bird-users 
>>> <bird-users@network.cz> wrote:
>>>> 
>>>> 
>>>>> On 23 Jan 2024, at 14:13, Nico Schottelius via Bird-users 
>>>>> <bird-users@network.cz> wrote:
>>>>> 
>>>>> 
>>>>> Hello bird users,
>>>>> 
>>>>> I am wondering how you handle matching both IPv6 and IPv4 prefixes
>>>>> efficiently.
>>>>> 
>>>>> We have tons of blocks in our config like these:
>>>> 
>>>> Generate the configs.
>>> 
>>> Not only that, please split IPv6 and IPv4 filters, at least if these are 
>>> prone to frequent changes.
>>> 
>>>> Especially when doing IRR filtering, one simply lets bgpq4 generate the 
>>>> filters
>>>> and then drop those definitions into a bird include file, and generate the 
>>>> peers parts too.
>>> 
>>> When doing IRR filtering, please export it as JSON and load it through RTR 
>>> mechanism. We support multiple ROA tables and this is exactly the use case 
>>> for it
>> 
>> Mmm... do you mean IRR data (what bgpq4 generates from RPSL) or RPKI data 
>> (what rpki-client generates from ROAs) ?
>> 
>> As yes, RPKI data we generate into a JSON file and then pass that to a RTR 
>> which serves it up to bird; but IRR data becomes filter statements ("bgpq4 
>> -b" ;) )
> 
> Of course I mean IRR data. You setup two caches, one for actual RPKI data, 
> and another one for IRR data, feed it by SLURM, load both by two "protocol 
> rpki" instances into two different "roa[64] table"s and call "roa_check()" 
> twice.

Took a bit to wrap my mind around, but yes, I gotcha!


The clue in the tutorial was that 'protocol rpki' should have been 'protocol 
rtr' ;)


Thus the idea is to produce a "IRR" SLURM file with:

```
{
  "slurmVersion": 1,
  "validationOutputFilters": {
    "locallyAddedAssertions": {
      "prefixAssertions": [
        {
          "asn": <peer>,
          "prefix": "<prefix>",
          "comment": "IRR-data"
        },
```

and instead of RPKI where we check:

```
roa_check(rpki4, 192.0.2.0/24, originasn)  # (where ', originasn' is default 
and thus normally omitted)
```

we check:
```
roa_check(irr4, 192.0.2.0/24, peerasn)
```

which means every peer is more or less the same as the peerasn is a parameter 
to whatever peer check function one calls and that then just calls the above 
roa_check(...peerasn), thus a lot less config and thus more readable and 
maintainable. (even if generated, as it gets repetitive).



a quick stab at generating the slurm file:

```
#!/bin/bash

set -e

cat <<SLURMHEADER
{
  "slurmVersion": 1,
  "validationOutputFilters": {
    "locallyAddedAssertions": {
      "prefixAssertions": [
SLURMHEADER

# Test with three peers/test-ASNs
for i in AS-IPNG:8298 AS-SPACENET:5539 AS-MASSAR:57777;
do
        asset=$(echo $i | cut -f1 -d:)
        peeras=$(echo $i | cut -f2 -d:)

        bgpq4 -F "{ \"asn\": ${peeras}, \"prefix\": \"%n/%l\", \"comment\": 
\"IRR\" },\n"  $asset
done

# Insert a AS112 prefix that should always be valid
# If one does not peer with AS112 it has no effect
# and which avoids having to deal with the trailing comma above ;)
echo '{ "asn": 112, "prefix": "192.31.196.0/24", "comment": "IRR-static" }'

cat <<SLURMTRAILER
      ]
    }
  }
}
SLURMTRAILER

exit 0
```

which produces:
```
{
  "slurmVersion": 1,
  "validationOutputFilters": {
    "locallyAddedAssertions": {
      "prefixAssertions": [
{ "asn": 8298, "prefix": "44.31.3.0/24", "comment": "IRR" },
{ "asn": 8298, "prefix": "44.31.27.0/24", "comment": "IRR" },
{ "asn": 8298, "prefix": "44.154.130.0/24", "comment": "IRR" },
...
{ "asn": 57777, "prefix": "192.31.196.0/24", "comment": "IRR" },
{ "asn": 57777, "prefix": "192.175.48.0/24", "comment": "IRR" },
{ "asn": 112, "prefix": "192.31.196.0/24", "comment": "IRR-static" }
      ]
    }
  }
}

```

Though have to verify if one can do something with the min/max length for 
prefixes and that -A (aggregate) for bgpq4 can generate that so one has less 
prefixes there).

And I have to verify how happy stayrtr and bird handle double prefixes and 
different ASNs and what scaling of that is.


Will lab this out over the weekend/nights as this is for AS57777 and thus 
private and learning ;)

Greets,
 Jeroen



Reply via email to