Dear Claudio,

On Fri, Sep 14, 2018 at 04:59:51PM +0200, Claudio Jeker wrote:
> This diff extends the existing trie code for prefix-set to also work with
> roa-set. Unlike prefix-set there is no need for a prefixlen mask during
> lookup, instead the source-as needs to be checked and also if the
> prefixlen of the prefix is allowed.
> The lookup can return 3 states:
> ROA_UNKNONW: prefix is not covered by any entry
> ROA_VALID: prefix is covered and the source-as matches as does the prefixlen
> ROA_INVALID: there was a covering ROA entry that did not match source-as
>       or prefixlen

I didn't test yet - but from your above description I have these three
questions.

Given this ROA file with two entries: 

    prefix 80.128.0.0/11 maxlen 11 source-as 0
    prefix 80.128.0.0/11 maxlen 11 source-as 3320

1/ The following announcement "80.128.0.0/11 AS_PATH 2914_3320" received
via (E)BGP must result in ROA_VALID state. An announcement must be
considered ROA_VALID if it correctly matches /any/ of the configured
ROAs. So the presence of "80.128.0.0/11 maxlen 11 source-as 0" should
not invalidate any other ROA. Does this match your understanding too?

> The source-as check is done with an as_set and should therefor scale
> well.  In general these lookups need to be quick since all prefixes
> will go through roa lookups.

2/ I take it that (iff a ROA file is defined) any and all announcements
will go through the lookup? (I think this is good.)

3/ If the contents of the roa_file are change, and a 'bgpctl reload' is
issued - the validation state should be reevaluated. For instance if we
start with:

    prefix 80.128.0.0/11 maxlen 11 source-as 0
    prefix 80.128.0.0/11 maxlen 11 source-as 3320

and have announcement 80.128.0.0/11 AS_PATH 2914_3320 (ROA_VALID) in
Loc-RIB, the moment the ROA file is changed to:

    prefix 80.128.0.0/11 maxlen 11 source-as 0
    prefix 80.128.0.0/11 maxlen 11 source-as 666

the announcement 80.128.0.0/11 AS_PATH 2914_3320 should become
ROA_INVALID. Should we get to the point where we can filter based on
validation state, and I configured something like:

    deny from ebgp validation-state invalid

The 80.128.0.0/11 AS_PATH 2914_3320 announcement should become an
infeasible/rejected path.

> The frontend code (parse.y and imsg passing) is missing, since this is
> already fairly large and it is tested by the unit tests I decided to
> send this out as an idividual step.

yes.

Kind regards,

Job

Reply via email to