[PR #5845] [CLOSED] [client] Handle EEXIST when adding routes on macOS/BSD #24117

Open
opened 2026-08-05 06:08:17 -04:00 by saavagebueno · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/netbirdio/netbird/pull/5845
Author: @pappz
Created: 4/9/2026
Status: Closed

Base: mainHead: fix/macos-stale-route-eexist


📝 Commits (2)

  • 7a1c2f0 [client] Handle EEXIST when adding routes on macOS/BSD
  • 8f6e916 [client] Improve error reporting for route socket operations

📊 Changes

1 file changed (+15 additions, -2 deletions)

View changed files

📝 client/internal/routemanager/systemops/systemops_unix.go (+15 -2)

📄 Description

Describe your changes

On macOS, routes from a previous session can survive across sleep/wake cycles even though cleanup reports success. When the new engine instance tries to add the same route, it fails with "file exists" (EEXIST), leaving the route untracked by the route manager while the OS still has it pointing at a stale interface.

client/internal/routemanager/manager.go:560: No active handler found for route mynet|10.0.0.0/22
	* add route 10.0.0.0/22: failed to add for key 10.0.0.0/22: add route for 10.0.0.0/22: write: file exists

Handle this by detecting EEXIST on RTM_ADD, removing the stale route, and retrying.

Stack

Checklist

  • Is it a bug fix
  • Is a typo/documentation fix
  • Is a feature enhancement
  • It is a refactor
  • Created tests that fail without the change (if possible)

By submitting this pull request, you confirm that you have read and agree to the terms of the Contributor License Agreement.

Documentation

Select exactly one:

  • I added/updated documentation for this change
  • Documentation is not needed for this change (explain why)

Docs PR URL (required if "docs added" is checked)

Paste the PR link from https://github.com/netbirdio/docs here:

https://github.com/netbirdio/docs/pull/__

Summary by CodeRabbit

  • Bug Fixes
    • Enhanced route management to handle duplicate routes gracefully—the system now automatically detects existing routes, removes stale entries, and retries operations.
    • Improved error reporting for route operations with more precise error type identification.

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/netbirdio/netbird/pull/5845 **Author:** [@pappz](https://github.com/pappz) **Created:** 4/9/2026 **Status:** ❌ Closed **Base:** `main` ← **Head:** `fix/macos-stale-route-eexist` --- ### 📝 Commits (2) - [`7a1c2f0`](https://github.com/netbirdio/netbird/commit/7a1c2f08b81c8120170250e751c76120d8fa2b02) [client] Handle EEXIST when adding routes on macOS/BSD - [`8f6e916`](https://github.com/netbirdio/netbird/commit/8f6e91651786ee3414e80d0cdb83562837597811) [client] Improve error reporting for route socket operations ### 📊 Changes **1 file changed** (+15 additions, -2 deletions) <details> <summary>View changed files</summary> 📝 `client/internal/routemanager/systemops/systemops_unix.go` (+15 -2) </details> ### 📄 Description ## Describe your changes On macOS, routes from a previous session can survive across sleep/wake cycles even though cleanup reports success. When the new engine instance tries to add the same route, it fails with "file exists" (EEXIST), leaving the route untracked by the route manager while the OS still has it pointing at a stale interface. ``` client/internal/routemanager/manager.go:560: No active handler found for route mynet|10.0.0.0/22 * add route 10.0.0.0/22: failed to add for key 10.0.0.0/22: add route for 10.0.0.0/22: write: file exists ``` Handle this by detecting EEXIST on RTM_ADD, removing the stale route, and retrying. ## Issue ticket number and link ## Stack <!-- branch-stack --> ### Checklist - [x] Is it a bug fix - [ ] Is a typo/documentation fix - [ ] Is a feature enhancement - [ ] It is a refactor - [ ] Created tests that fail without the change (if possible) > By submitting this pull request, you confirm that you have read and agree to the terms of the [Contributor License Agreement](https://github.com/netbirdio/netbird/blob/main/CONTRIBUTOR_LICENSE_AGREEMENT.md). ## Documentation Select exactly one: - [ ] I added/updated documentation for this change - [x] Documentation is **not needed** for this change (explain why) ### Docs PR URL (required if "docs added" is checked) Paste the PR link from https://github.com/netbirdio/docs here: https://github.com/netbirdio/docs/pull/__ <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Enhanced route management to handle duplicate routes gracefully—the system now automatically detects existing routes, removes stale entries, and retries operations. * Improved error reporting for route operations with more precise error type identification. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
saavagebueno added the pull-request label 2026-08-05 06:08:17 -04:00
Sign in to join this conversation.
No Label pull-request
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: DYNR/netbird#24117