Skip to content

A permit-everything clause inserted before the peer export filter

Case 26 of the Network Change Verdict Corpus. Category: route-leak. Expected verdict: unsafe (an experienced operator would reject it).

Why it is expected unsafe

Sequence 5 matches everything, so upstream routes and the default leak to the peer.

The config change

Against the FRR configs of the base lab:

--- a/pe2.conf
+++ b/pe2.conf
@@ -41,3 +41,5 @@
   neighbor 10.0.4.2 route-map TO-PEER out
  exit-address-family
 !
+route-map TO-PEER permit 5
+!

What each strategy said

The expected verdict was committed to git before any run. All three strategies tested the same running lab (method).

Strategy Verdict Result Checks that failed
Ping only safe ❌ approved a bad change none
All BGP sessions up safe ❌ approved a bad change none
Netdryrun intent checks unsafe ✅ I4 no upstream route leaked to peer, I4 no default leaked to peer, I5 peer receives exactly our 2 prefixes

What Netdryrun flagged

These checks from the intent spec failed:

  • I4 no upstream route leaked to peer: 203.0.113.0/24 must not be in peer1's routing table as a bgp route
  • I4 no default leaked to peer: 0.0.0.0/0 must not be in peer1's routing table as a bgp route
  • I5 peer receives exactly our 2 prefixes: peer1 receives exactly 2 prefixes from 10.0.4.1

Reproduce it

On Linux or WSL2 with Docker and containerlab, from a checkout of the repository:

python corpus/run.py --case 26

Case file: corpus/cases/26-route-map-order-bug.yml. Published result: netdryrun 0.2.0, containerlab 0.81.1, FRR quay.io/frrouting/frr:10.4.1, commit ec23379, run on 2026-10-26.