[PR #5738] [MERGED] [client] Add IPv6 dual-stack UI support for Android, iOS, and desktop #23771

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

📋 Pull Request Information

Original PR: https://github.com/netbirdio/netbird/pull/5738
Author: @lixmal
Created: 3/30/2026
Status: Merged
Merged: 4/9/2026
Merged by: @lixmal

Base: client-ipv6-iptablesHead: client-ipv6-android-ui


📝 Commits (8)

  • 95f4e90 Add IPv6 dual-stack support for Android, iOS, and desktop UI
  • a457faa Extract v6 exit node pairing into shared helpers
  • 07c7d26 Merge remote-tracking branch 'origin/client-ipv6-iptables' into client-ipv6-android-ui
  • 7538787 Merge remote-tracking branch 'origin/client-ipv6-iptables' into client-ipv6-android-ui
  • 1a2d93c Merge branch 'client-ipv6-iptables' into client-ipv6-android-ui
  • f42cbb4 Merge remote-tracking branch 'origin/client-ipv6-iptables' into client-ipv6-android-ui
  • bfccc20 Merge remote-tracking branch 'origin/client-ipv6-iptables' into client-ipv6-android-ui
  • 08b2318 Merge branch 'client-ipv6-iptables' into client-ipv6-android-ui

📊 Changes

8 files changed (+321 additions, -58 deletions)

View changed files

📝 client/android/client.go (+60 -19)
📝 client/android/route_command.go (+5 -2)
📝 client/internal/peer/status.go (+5 -1)
📝 client/ios/NetBirdSDK/client.go (+48 -26)
📝 client/server/network.go (+33 -9)
📝 client/ui/network.go (+1 -1)
📝 route/route.go (+61 -0)
route/route_test.go (+108 -0)

📄 Description

Describe your changes

Merge v4/v6 exit node route pairs into a single UI entry across all platforms (Android, iOS, desktop, daemon CLI). When the management server creates a paired exit node with -v6 suffix, the client now displays one combined entry (0.0.0.0/0, ::/0) with a single toggle that selects/deselects both.

  • Merge paired v4+v6 exit node routes into one display entry on Android, iOS, server daemon, and desktop UI
  • Add ExpandV6ExitPairs in the shared route package so select/deselect auto-includes the paired v6 route
  • Add IsV4DefaultRoute/IsV6DefaultRoute helpers using typed netip.Prefix comparisons
  • Show the peer actively routing traffic for HA route groups instead of always picking the first peer
  • Include IPv6 address in onAddressChanged notifications for dual-stack display on the home screen
  • Fix iOS nil-check ordering in GetRoutesSelectionDetails

Stacked on #5708.

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/__


🔄 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/5738 **Author:** [@lixmal](https://github.com/lixmal) **Created:** 3/30/2026 **Status:** ✅ Merged **Merged:** 4/9/2026 **Merged by:** [@lixmal](https://github.com/lixmal) **Base:** `client-ipv6-iptables` ← **Head:** `client-ipv6-android-ui` --- ### 📝 Commits (8) - [`95f4e90`](https://github.com/netbirdio/netbird/commit/95f4e90ae89d39032d4de71bb8f253504ed0c23f) Add IPv6 dual-stack support for Android, iOS, and desktop UI - [`a457faa`](https://github.com/netbirdio/netbird/commit/a457faa876262141b3d1e9da43085f5a00020e6a) Extract v6 exit node pairing into shared helpers - [`07c7d26`](https://github.com/netbirdio/netbird/commit/07c7d2698a10d337d7802f527e6f103240f4f6a3) Merge remote-tracking branch 'origin/client-ipv6-iptables' into client-ipv6-android-ui - [`7538787`](https://github.com/netbirdio/netbird/commit/7538787fb1b5221df3ea2d61c6e8f51f13ba99ff) Merge remote-tracking branch 'origin/client-ipv6-iptables' into client-ipv6-android-ui - [`1a2d93c`](https://github.com/netbirdio/netbird/commit/1a2d93c45d490fdf883e735f13990e1a26e078aa) Merge branch 'client-ipv6-iptables' into client-ipv6-android-ui - [`f42cbb4`](https://github.com/netbirdio/netbird/commit/f42cbb4ec3bc092f32d753326db1881df87366ee) Merge remote-tracking branch 'origin/client-ipv6-iptables' into client-ipv6-android-ui - [`bfccc20`](https://github.com/netbirdio/netbird/commit/bfccc20641a3238fa7b0c7970d8385ae42947f47) Merge remote-tracking branch 'origin/client-ipv6-iptables' into client-ipv6-android-ui - [`08b2318`](https://github.com/netbirdio/netbird/commit/08b2318058d6ecd3c6bf5a351cac290b6bdb31cf) Merge branch 'client-ipv6-iptables' into client-ipv6-android-ui ### 📊 Changes **8 files changed** (+321 additions, -58 deletions) <details> <summary>View changed files</summary> 📝 `client/android/client.go` (+60 -19) 📝 `client/android/route_command.go` (+5 -2) 📝 `client/internal/peer/status.go` (+5 -1) 📝 `client/ios/NetBirdSDK/client.go` (+48 -26) 📝 `client/server/network.go` (+33 -9) 📝 `client/ui/network.go` (+1 -1) 📝 `route/route.go` (+61 -0) ➕ `route/route_test.go` (+108 -0) </details> ### 📄 Description ## Describe your changes Merge v4/v6 exit node route pairs into a single UI entry across all platforms (Android, iOS, desktop, daemon CLI). When the management server creates a paired exit node with `-v6` suffix, the client now displays one combined entry (`0.0.0.0/0, ::/0`) with a single toggle that selects/deselects both. - Merge paired v4+v6 exit node routes into one display entry on Android, iOS, server daemon, and desktop UI - Add `ExpandV6ExitPairs` in the shared `route` package so select/deselect auto-includes the paired v6 route - Add `IsV4DefaultRoute`/`IsV6DefaultRoute` helpers using typed `netip.Prefix` comparisons - Show the peer actively routing traffic for HA route groups instead of always picking the first peer - Include IPv6 address in `onAddressChanged` notifications for dual-stack display on the home screen - Fix iOS nil-check ordering in `GetRoutesSelectionDetails` Stacked on #5708. ## Issue ticket number and link ## Stack - #5631 - #5675 - #5686 - #5687 - #5688 - #5706 - #5707 - #5708 - #5738 :point_left: <!-- branch-stack --> ### Checklist - [ ] Is it a bug fix - [ ] Is a typo/documentation fix - [x] Is a feature enhancement - [ ] It is a refactor - [x] 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/__ --- <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:07:49 -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#23771