tests: new test for PIM filteringImplement tests for the new PIM join route-map filtering.
Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
doc: document new PIM filtering commandsDocument the command `join-filter route-map RMAP_NAME` for both PIM and
PIMv6.
Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
pimd,pim6d,yang: support filtering PIM joinsNew configuration for selecting a route map to filter PIM joins.
Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
lib: fix route map multicast interface outputMulticast interface doesn't belong to any IP type and the commands don't
have the IP specification either.
Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
tests: use munet provided `wait_for_match()` function- The previous `scan_for_match()` function used the timeout object incorrectly,
and the new version of munet exposed this. Just swap out the custom local
scanning function for the munet provided version.
Signed-off-by: Christian Hopps <chopps@labn.net>
tests: update munet to latest version 0.17.2**Infrastructure**
- Removed truncation of debug-level stdout/stderr in logging (better for
triaging issues)
**Timeout Class Improvements**
- Reversed `Timeout().__bool__()` logic - `True` now means expired, enabling
cleaner code: `while not timeout: ...`
**WatchLog Improvements**
- New synchronous `wait_for_match()` method
- Option to not update content during `snapshot()` calls
- `snapshot_...
mgmtd: fix xpath prefix matching problem- Restrict prefix matching to path segment boundaries ('/' and ':').
- We want want `/aa/bb` to match `/aa/bb/cc` but not `/aa/bbzzz/cc` as it was
doing previously.
- Also, during init-config don't call the generic function that scans through
all prefix maps to gather all clients to then check the result for the
initializing client presence. Instead just scan for the initializing client
and re...
mgmtd: lib: improve some mgmtd debug logs- add a couple debugs for notify_filters updates.
- improve debug on mgmt_be_interested_clients() from triaging experience.
Signed-off-by: Christian Hopps <chopps@labn.net>
lib: printfrr: add `d` (darr) option to %pSA (print string array)- Add a `d` option to allow passing a darr of strings so no array length is
required.
Signed-off-by: Christian Hopps <chopps@labn.net>
tests: mgmtd: fix a couple test issues- tests: remove erroneous trailing from sysctl command '\n'
- mgmtd: add missed cleanup in mgmtd test client
Signed-off-by: Christian Hopps <chopps@labn.net>
bgpd: handle changes to sender-aspath-loop-detectionWhen the config changes, the update-group needs to be adjusted.
The simplistic approach, e.g., resetting the peer, is taken for
this once-only event.
Signed-off-by: Enke Chen <enchen@paloaltonetworks.com>
bgpd: fix update-group issues with sender-aspath-loop-detectionWhen the config is enabled, the remote-as needs to be identical
for peers in an update-group as it impacts outbound updates.
Currently the remote-as is included in updgrp_hash_key_make(),
but it is missing in updgrp_hash_cmp().
As the config impacts outbound updates, we cannot mix peers with
the config and the ones without the config in an update-group.
Currently the flag PEER_FLAG_AS_LOOP_DET...
pimd: Fix race condition on transitioning to joinI'm seeing the test_pim_no_path_to_rp.py fail very rarely.
This test sets up both a S,G sender and a *,G receiver
on the same route. When certain conditions are hit pim
does not converge on the correct state.
Upon examination of the output we are seeing this race condition:
Working:
S,G stream seen
*,G igmp join seen
state transitions from NotJoined -> Joined
Not Working:
*,G igmp join se...
tests: Add a test for pim that shows that registers work with no path to rpAdd a test that creates a test router r1 that does not actually have a path
to the rp at first, start a *,G and a S,G stream on r1 and *then* introduce
the ability to actually reach the RP.
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
pimd: Immediately remove the join/prune from the nbr on ifp changeWhen the outgoing interface for a upstream is changed, for whatever
reason, the upstream was not always being removed from the j/p agg
list. This leaves situations where we send the wrong data to
our neighbors as part of the consolidated sending of j/p's to the
neighbor. Let's just immediately remove it from the interface's
list when this happens. There are paths where the removal is
not pro...
pimd: Allow for FHR to send register in some casesWhen a FHR is also a LHR, and the S,G upstream is
created before any multicast packets for the S,G
have flown, we need to be able to let the pim state
machine handle the registration towards the RP.
Modify the code to notice that packets are flowing on
the S,G stream and that we are a LHR. This will
allow us to send register messages when this happens,
to allow other parts of the *,G tree par...
lib: Fix if_lookup_by_address to work with v6This function was modified to allow you to use v4/v6
but the last step to allow this to work under v6 was
never taken. Let's rectify that.
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
pimd: Keep track of how long the S,G rpt Prune has been aroundThe S,G rpt prune ifchannel was not tracking uptime. Let's
do so.
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
tests: add test for 'bgp bestpath use-imported-attributes' configAdd test to verify that
'bgp bestpath use-imported-attributes' works correctly with
VRF route leaking and AS path manipulation via route-maps.
Signed-off-by: Soumya Roy <souroy@nvidia.com>
bgpd: use destination path attribute under a configWhen a BGP route is leaked from source VRF foo to destination VRF bar,
a route-map can be configured to strip off AS path attributes during
the import process. Consider a scenario, a route in VRF foo has an
AS path length of 5 hops. After the route-map strips certain ASes
during the leak to VRF bar, the resulting route/path has an AS path
length of 1 hop. The problem occurs during bestpath sele...
tests: Allow connected routes to come up in zebra_rnh_testingThis topotest is failing locally for me occassionally because the
sharp installation of routes can happen before the connected routes
nexthop is provably there by zebra. Since sharpd has no retry
mechanism this test will fail occassionally.
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
bgpd: use local path attribute for imported paths under a configAdd new configuration to select between source or imported path attributes
during bestpath comparison for imported routes. Default uses source
attributes; configuration enables imported attributes
Signed-off-by: Soumya Roy <souroy@nvidia.com>
bgpd: reduce ibuf_work ring buffer sizeRestore the size reduction for ibuf_work after the allocation moved to
bgp_peer_connection_new. This aligns with the original size-reduction
commit (fe1c72a573, cherry-pick 91e95112e8) and avoids the 10x sizing
from e27bf2b9bd6 in the new allocation site.
History:
- fe1c72a573 / 91e95112e8: reduce ibuf_work ringbuf size
- e27bf2b9bd6: introduce bgp_peer_connection_new allocation
Signed-off-by...
github: Rename PR templateGithub expects pull_request_template.md (default) to be found, otherwise it's
not working (the way as it works with issues).
To select the template, the author MUST define it, e.g.:
https://github.com/FRRouting/frr/compare/stable/10.4?expand=1&template=pr.md
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
pimd: compute inherited_olist before checking for (S,G,rpt) prune decisionProblem description:
1) In some corner cases in PIM, incorrect (S,G,rpt) prunes were sent causing
traffic blackholing to downstream receivers.
2) The inherited_olist emptiness check was performed before the list was
computed due to lazy population of channel_oil, causing it to incorrectly
appear empty and prune is incorrectly propogated.
Fix:
Ensure inherited_olist is computed before ...