diff --git a/src/main.rs b/src/main.rs index d6eb3b9..c0c8800 100644 --- a/src/main.rs +++ b/src/main.rs @@ -159,20 +159,36 @@ fn roa_filter(roas: Vec, filters: Vec) -> Vec { } } - print!("1"); + println!("# warning: dropped {:?}", roa); return None; - }).filter(|(_roa, filter)| + }).filter(|(roa, filter)| /* drop roa if the filter isn't permit */ match filter.action { ROAFilterAction::Permit => true, - ROAFilterAction::Deny => false, + ROAFilterAction::Deny => { + println!("# warning: dropped {:?}", roa); + return false; + } } - ).map(|(roa, filter)| { - ROA { + ).filter_map(|(roa, filter)| { + if roa.route.network_length() > filter.maxlen { + println!("# warning: dropped {:?}", roa); + return None; + } + + let mut maxlen = filter.maxlen; + if roa.maxlen != 0 { + if (roa.maxlen < maxlen) && (roa.maxlen > filter.minlen) { + maxlen = roa.maxlen; + } + // maxlen = std::cmp::max(std::cmp::min(maxlen, roa.maxlen), filter.minlen); + } + + return Some(ROA { route: roa.route, origins: roa.origins, - maxlen: std::cmp::min(std::cmp::max(filter.minlen, roa.maxlen), filter.maxlen), - } + maxlen: maxlen, + }); }).collect(); // roas }