head 1.4; access; symbols pkgsrc-2026Q1:1.3.0.18 pkgsrc-2026Q1-base:1.3 pkgsrc-2025Q4:1.3.0.16 pkgsrc-2025Q4-base:1.3 pkgsrc-2025Q3:1.3.0.14 pkgsrc-2025Q3-base:1.3 pkgsrc-2025Q2:1.3.0.12 pkgsrc-2025Q2-base:1.3 pkgsrc-2025Q1:1.3.0.10 pkgsrc-2025Q1-base:1.3 pkgsrc-2024Q4:1.3.0.8 pkgsrc-2024Q4-base:1.3 pkgsrc-2024Q3:1.3.0.6 pkgsrc-2024Q3-base:1.3 pkgsrc-2024Q2:1.3.0.4 pkgsrc-2024Q2-base:1.3 pkgsrc-2024Q1:1.3.0.2 pkgsrc-2024Q1-base:1.3 pkgsrc-2017Q3:1.1.0.6 pkgsrc-2017Q3-base:1.1 pkgsrc-2017Q2:1.1.0.2; locks; strict; comment @# @; 1.4 date 2026.04.10.17.38.51; author he; state dead; branches; next 1.3; commitid SSj0FTijrVqWbrBG; 1.3 date 2024.02.19.12.54.09; author he; state Exp; branches; next 1.2; commitid qvlC8vGBwp0UJ2ZE; 1.2 date 2017.11.05.08.35.16; author he; state dead; branches; next 1.1; commitid wPWXy2OrC4Ut8PdA; 1.1 date 2017.07.04.12.35.12; author he; state Exp; branches 1.1.2.1; next ; commitid eU70tw2Gqy8UrUXz; 1.1.2.1 date 2017.07.04.12.35.12; author bsiegert; state dead; branches; next 1.1.2.2; commitid JHQiTsz52bT1cmZz; 1.1.2.2 date 2017.07.15.18.53.11; author bsiegert; state Exp; branches; next ; commitid JHQiTsz52bT1cmZz; desc @@ 1.4 log @net/exabgp: update to version 5.0.8. Pkgsrc changes: * Remove now-integrated patch. * Update PLIST. * Checksum updates. Upstream changes: Version 5.0.8: * Fix: handle OPEN message with zero capabilities without crashing Capabilities.unpack() read the parameter type byte before checking whether the Optional Parameters Length was zero, raising IndexError when a peer sent an OPEN with no optional parameters at all (a valid single 0x00 byte payload per RFC 4271). The early-return guard sat below the offending read so it never helped. Alternative to PR #1375. Version 5.0.7: * Fix: send zero-length capabilities in OPEN message (#1371) Route Refresh (RFC 2918), Enhanced Route Refresh (RFC 7313), and Extended Message (RFC 8654) capabilities were silently dropped from the wire OPEN message despite appearing in debug logs. These are valid zero-length capabilities that were incorrectly filtered out by a too-broad check added in PR #1221 (fcf6bb029). * Fix: do not send empty Hostname capability when hostname is not configured When hostname was None, HostName.extract() returned an invalid zero-length payload instead of suppressing the capability entirely. Also hardens the parser against truncated hostname data from peers. * Fix: wrap log message in lambda for lazy evaluation The named pipes error message in server.py triggered a non-callable log message warning at runtime. Version 5.0.6: * Feature: add --env-file flag and EXABGP_ENVFILE env var for custom env file (#1367) The exabgp 5.x CLI had no way to specify a custom exabgp.env file path, unlike the 4.x --env flag. Two override mechanisms are now available: exabgp --env-file /path/to/exabgp.env server config.conf EXABGP_ENVFILE=/path/to/exabgp.env exabgp server config.conf * Fix: show error details when configuration validation fails (#1367) Validation errors were silently swallowed with exit code 1 and no output. Now writes errors to stderr with the actual parse error. * Fix: accept wildcard * in healthcheck --neighbor option (#1367) The --neighbor argument rejected * which is common in 4.x config files. Adds neighbor_address() validator that accepts * as a wildcard. * Fix: show error on stderr when server can't find config file (#1367) The server silently exited with code 1 when given a nonexistent config file. Now writes the error to stderr. * Fix: healthcheck uses per-state as-path instead of ignoring it The locally-resolved as_path variable (from --up-as-path, --down-as-path, --disabled-as-path) was computed but never used. Version 5.0.5: * Fix: healthcheck --neighbor produced doubled neighbor prefix (#1366) * Fix: healthcheck crash when --ip-ifname not used (#1365) * Fix: Align column headers in show neighbor extensive * Fix: Route Refresh messages sent after new updates instead of before When flush adj-rib out and a new announce arrived in the same reactor cycle, the new route UPDATE was sent before the ROUTE_REFRESH start marker, violating the Enhanced Route Refresh sequence. * Fix: pytest collecting tests from wrong exabgp installation Added pythonpath to pyproject.toml so tests use local src/. Version 5.0.4: * Fix: Flaky test on slow CI runners (Alpine Linux) (#1359) Race condition in test_connection_lifecycle where client-side TCP handshake completes before server thread calls accept(). Added retry loop instead of bare assertion. * Fix: Release script no longer generates debian/changelog Version 5.0.3: * Fix: CLI hang on failing async commands ASYNC error handler now sends error response when callback fails, preventing the CLI from hanging indefinitely. * Fix: peer-id field in show neighbor extensive cli_data() now correctly uses peer['peer-id'] instead of peer['router-id']. * Fix: timedelta formatting error on Python 3.12+ Python 3.12+ timedelta.__format__ rejects alignment specs like :>15. Wrapping in str() before formatting fixes the TypeError. Version 5.0.2: * Fix: healthcheck (and other subcommands) not working when api.cli is enabled When exabgp.api.cli is true, the exabgp_cli_pipe environment variable was inherited by all child processes, causing 'python -m exabgp healthcheck' to run the CLI pipe code instead of the healthcheck subcommand. Only the internal CLI process now receives this variable. Version 5.0.1: * Fix: ImportError when running exabgp commands (--help, version, etc.) Missing get_root() and get_zipapp() functions in version.py that were removed during 5.0.0 release but still imported by application/version.py. This bug prevented the 5.0.0 container from starting. * Fix: Critical RIB iterator crash in delete_cached_family() (cache.py:37) Modified dictionary during iteration causing RuntimeError on configuration reload. Fixed by adding list() wrapper to snapshot keys before iteration. The list() wrapper prevents race condition when removing families from cache. * Fix: Critical RIB iterator safety in cached_changes() (cache.py:51) No snapshot of dictionary values during iteration could corrupt iterator state. Fixed by wrapping values() with list() to create snapshot before iteration. Prevents corruption when cache is modified during concurrent access. * Fix: Critical race condition in RIB updates() generator (outgoing.py:220-270) resend() could modify _refresh_changes and _refresh_families during iteration, causing missing or duplicate route updates when API flush commands arrive during peer sending. Fixed by snapshotting both lists at function start and clearing immediately before yielding. The list() wrapper creates atomic snapshot, preventing race conditions when resend() is called mid-iteration. * Feature: Added comprehensive RIB stress test suite (tests/unit/test_rib_stress.py) 18 tests covering critical bugs, race conditions, edge cases, and performance. Tests concurrent access patterns, empty/large RIBs, and validates that resend() during updates() doesn't interfere with current iteration. Version 5.0.0: * Compatibility: The text encoding of AS-SEQUENCE in the AS-PATH has changed * Compatibility: The AS-PATH JSON format has changed * Compatibility: The BGP-LS Adjacency SID JSON format has changed * Compatibility: The command line format has changed whilst trying to keep backward compatibility for most usual commands * Feature: drop support for python2, well it is classed as feature, your opinion may vary * Fix: support for more than one BGP-LS Adjacency SID per link patch: tomjshine * reported: the RIB code so withdraw message before any announce are sent this does change the RIB behaviour sending withdrawal when it was not previously * Fix: parsing of SID in BGP-LS * Change: do not include attribute infos in updates if only sending withdrawals patch: Denis Krienbuhl * Fix: Flowspec fragment (issue 1027) * Fix: left-over process (issue 1029 - can not be backported as python3 only) patch: Vincent Bernat * Feature: allow Ipv6 redirect patch: rzalamena * Fix: AddPath parsing issue (issue 1041) * Feature: Added show neighbor json to the CLI * Feature: use as-path with a series of [] () [{}]({}) : [] sequence, () set, {} for confed * Feature: support for Poetry patch: Ahmet Demir * Feature: drop support for deprecated Prefix-SID Sub-type (type-2, type-4) patch: proelbtn * Feature: add support for Prefix-SID Sub-type defined in draft-ietf-bess-srv6-services-11 (type-5, type-6) patch: proelbtn * Compatibility: Generic LSID are now returning lists (otherwise keys are not unique in JSON) * Compatibitily: Many TLV could be returned many times and were not given as list local-node-descriptors, remote-node-descriptors, interface-address, neighbor-address * Compatibility: General use of plural for the following keys interface-address -> interface-addresses, neighbor-address -> neighbor-addresses * Compatibility: change JSON for sr_capability_flags to be sr-capability-flags and data format * Compatibility: change node-descriptors to be list * Compatibility: remove L from target in JSON extended communities * Fix: issue with extended community generation (still not supporting ASN) * Feature: add support for setting BGP path ID for healthcheck.py advertised routes * Feature: allow routes advertised by healthcheck.py to be filtered to specific neighbors * Compatibility: now using 'daemon' instead of 'syslog' as syslog facility * Feature: Support for BGP-MUP SAFI and Extended Community defined in draft-mpmz-bess-mup-safi-02 patch: Takeru Hayasaka * Feature: Support for the 'ipv4' and 'ipv6' options in the Announce statement to exabgp-cli patch: Takeru Hayasaka * Compatibility: remove "alias" not-a-fragment which should be not expressed as !is-fragment * Compatibility: the JSON string changed * Compatibility: "route refresh" is now "route-refresh" * Compatibility: Hostname capability (FQDN) is no longer sent by default - must be explicitly enabled * Compatibility: Python 3.13.x is now supported * Feature: Complete SRv6 (Segment Routing over IPv6) support for BGP-LS - SRv6 Capabilities TLV and SRv6 Locator TLV - SRv6 End.X SID TLV and SRv6 LAN End.X SID - SRv6 Endpoint Behavior TLV - SRv6 SID NLRI patch: multiple contributors * Feature: RFC 9072 Extended Optional Parameters Length for BGP OPEN * Feature: Software version capability for BGP (draft-abraitis-bgp-version-capability) * Feature: RFC 6514 MCAST-VPN Route Types 5, 6, 7 support * Feature: MUP (Mobile User Plane) improvements - Add Source Address to MUP Type 1 ST Route - Improved MUP Type2SessionTransformedRoute encoding and parsing * Feature: Add 'source-interface' parameter to peer configuration for binding TCP connections * Feature: Add '--ip-ifname' argument to healthcheck for setting IP addresses on physical interfaces * Feature: Add '--debounce' flag to healthcheck.py * Feature: Add 'processes-match' keyword for regex-based process matching in configuration * Feature: Add 'neighbor <*>' support in API for bulk route announcements to all neighbors * Feature: Refactor 'tcp.once' to 'tcp.attempts' for configurable connection retry limits * Feature: Add ACK control API commands: 'disable-ack', 'enable-ack', 'silence-ack' for per-connection ACK management * Feature: Add API debug command for troubleshooting * Feature: Add '--pipename' CLI option to allow multiple CLI instances with different named pipes * Feature: Add '--label-exact-match' support for exact loopback interface label matching in healthcheck * Feature: Announce user-defined loopback IPs when '--ip' not configured in healthcheck * Feature: Official container support via GitHub Container Registry (ghcr.io/exa-networks/exabgp) * Fix: TOCTOU (Time-of-Check-Time-of-Use) race condition in configuration parser * Added comprehensive validation for process executables (setuid/setgid checks, file type validation) * Fix: Multiple bugs in EVPN implementation discovered during test coverage improvements * Fix: ADM/ASM unpacking issue (bytes vs string type mismatch) in operational messages * Fix: Shutdown communication bug (bytes/string formatting in RFC 8203 handling) in NOTIFICATION * Fix: Route-refresh handling (data type mismatch between reactor and API) * Fix: IPv6 route-target flowspec redirect encoding per RFC 8956/RFC 5701 * Fix: Handling of non-encapsulated IPv6 in flowspec * Fix: RIB injection with 'neighbor <*>' - only fail if NO peer can accept route * Fix: Allow 'withdraw' attribute in API announcements * Fix: Accept 'no_export' and 'no_advertise' community names as specified in RFCs * Fix: Do not fail on missing nexthop in JSON API responses * Fix: Do not JSON-encode ACK messages without explicit option * Fix: Version reporting when using zipapp * Fix: Parser.py to allow symlinks and correct executable permission checks * Fix: Provide warning when closing connection causes issues * Fix: Critical logging bugs that could affect error reporting * Fix: Various Python 3.8 compatibility issues @ text @$NetBSD: patch-lib_exabgp_application_healthcheck.py,v 1.3 2024/02/19 12:54:09 he Exp $ Change type of `--neighbor` argument from ip_address to str so that it can support '*' as a value. --- lib/exabgp/application/healthcheck.py.orig 2024-02-19 12:45:30.545761963 +0000 +++ lib/exabgp/application/healthcheck.py @@@@ -222,7 +222,7 @@@@ def parse(): help=("Instead of increasing the metric on health failure, " "withdraw the route"), ) g.add_argument("--path-id", metavar='PATHID', type=int, default=None, help="path ID to advertise for the route") - g.add_argument("--neighbor", metavar='NEIGHBOR', type=ip_address, dest="neighbors", action="append", help="advertise the route to the selected neigbors") + g.add_argument("--neighbor", metavar='NEIGHBOR', type=str, dest="neighbors", action="append", help="advertise the route to the selected neigbors") g = parser.add_argument_group("reporting") g.add_argument("--execute", metavar='CMD', type=str, action="append", help="execute CMD on state change") @ 1.3 log @Add a patch to exabgp-4.2.21: Allow "neighbor *" in route announce command, to match "all configured neighbors". Ref. https://github.com/Exa-Networks/exabgp/issues/1179 Adapt the healthcheck module to allow this argument. Bump PKGREVISION. @ text @d1 1 a1 1 $NetBSD$ @ 1.2 log @Upgrade to ExaBGP version 3.4.22. Pkgsrc changes: * Adapt PLIST * Remove now-integrated patch Upstream changes: Version 3.4.22 * Fix: issue with very fast route flapping patch by: Ravikumar Arunachalam Version 3.4.21 * Fix: make healthcheck work on netbsd patch by: he32 * Fix: re-fix issue #493 Multiple IPv6 MPREACH attributes in one UPDATE * Fix: issue #732 --test not working for eBGP setup * Fix: possibly missing API message when sent at high rate, issue #736 patch by: Ravikumar Arunachalam Version 3.4.20 * Fix: profiling * Fix: potential issue with networking (select on closed FD/TCP session) * Fix: issue with route replay order when sent fast patch by: Ravikumar Arunachalam @ text @d1 1 a1 1 $NetBSD: patch-lib_exabgp_application_healthcheck.py,v 1.1 2017/07/04 12:35:12 he Exp $ d3 2 a4 2 Provide a default syslog destination on NetBSD as well. Fix spelling... d6 1 a6 1 --- lib/exabgp/application/healthcheck.py.orig 2017-07-04 09:41:30.000000000 +0000 d8 6 a13 2 @@@@ -203,11 +203,13 @@@@ def setup_logging (debug, silent, name, """Setup logger""" d15 2 a16 12 def syslog_address(): - """Return a sensitive syslog address""" + """Return a sensible syslog address""" if sys.platform == "darwin": return "/var/run/syslog" if sys.platform.startswith("freebsd"): return "/var/run/log" + if sys.platform.startswith("netbsd"): + return "/var/run/log" if sys.platform.startswith("linux"): return "/dev/log" raise EnvironmentError("Unable to guess syslog address for your " @ 1.1 log @Patch the healthcheck.py script in its proper place. Provide a default syslog target of /var/run/log for NetBSD, so that the healthcheck.py script can run on NetBSD. Bump PKGREVISION. @ text @d1 1 a1 1 $NetBSD$ @ 1.1.2.1 log @file patch-lib_exabgp_application_healthcheck.py was added on branch pkgsrc-2017Q2 on 2017-07-15 18:53:11 +0000 @ text @d1 22 @ 1.1.2.2 log @Pullup ticket #5506 - requested by he net/exabgp: NetBSD build fix Revisions pulled up: - net/exabgp/Makefile 1.21 - net/exabgp/distinfo 1.13 - net/exabgp/patches/patch-lib_exabgp_application_healthcheck.py 1.1 --- Module Name: pkgsrc Committed By: he Date: Tue Jul 4 12:35:12 UTC 2017 Modified Files: pkgsrc/net/exabgp: Makefile distinfo Added Files: pkgsrc/net/exabgp/patches: patch-lib_exabgp_application_healthcheck.py Log Message: Patch the healthcheck.py script in its proper place. Provide a default syslog target of /var/run/log for NetBSD, so that the healthcheck.py script can run on NetBSD. Bump PKGREVISION. @ text @a0 22 $NetBSD: patch-lib_exabgp_application_healthcheck.py,v 1.1 2017/07/04 12:35:12 he Exp $ Provide a default syslog destination on NetBSD as well. Fix spelling... --- lib/exabgp/application/healthcheck.py.orig 2017-07-04 09:41:30.000000000 +0000 +++ lib/exabgp/application/healthcheck.py @@@@ -203,11 +203,13 @@@@ def setup_logging (debug, silent, name, """Setup logger""" def syslog_address(): - """Return a sensitive syslog address""" + """Return a sensible syslog address""" if sys.platform == "darwin": return "/var/run/syslog" if sys.platform.startswith("freebsd"): return "/var/run/log" + if sys.platform.startswith("netbsd"): + return "/var/run/log" if sys.platform.startswith("linux"): return "/dev/log" raise EnvironmentError("Unable to guess syslog address for your " @