Skip to content

add a FirstAvailable mode for URLTest#3537

Closed
BeautyyuYanli wants to merge 84 commits intoSagerNet:dev-nextfrom
CraftBrewery:first_available
Closed

add a FirstAvailable mode for URLTest#3537
BeautyyuYanli wants to merge 84 commits intoSagerNet:dev-nextfrom
CraftBrewery:first_available

Conversation

@BeautyyuYanli
Copy link
Copy Markdown

@BeautyyuYanli BeautyyuYanli commented Nov 7, 2025

This PR introduces a new selection strategy for URLTest outbound groups. The changes add support for two selection modes (min_latency and first_available).

Currently, the URLTest group select the min latency outbound. In my cases, the quailty of outbounds is not only related to the latency, but also other aspects. The outbounds' priority is alreay sorted when defined them in the config file as an array, so the task is to check their health periodically and choose the first available one.

What changes in this PR

  • Added a new select_mode field to URLTestOutboundOptions in option/group.go, along with the URLTestMode type and validation logic.
  • Refactored the selection logic in protocol/group/urltest.go to support both min_latency and first_available strategies.
  • Updated docs/configuration/outbound/urltest.md
  • Propagated the select_mode option through constructors and struct fields.
  • Simplified import aliasing in protocol/group/urltest.go for clarity.

Zephyruso and others added 30 commits November 4, 2025 21:31
We mistakenly believed that `libresolv`'s `search` function worked correctly in NetworkExtension, but it seems only `getaddrinfo` does.

This commit changes the behavior of the `local` DNS server in NetworkExtension to prefer DHCP, falling back to `getaddrinfo` if DHCP servers are unavailable.

It's worth noting that `prefer_go` does not disable DHCP since it respects Dial Fields, but `getaddrinfo` does the opposite. The new behavior only applies to NetworkExtension, not to all scenarios (primarily command-line binaries) as it did previously.

In addition, this commit also improves the DHCP DNS server to use the same robust query logic as `local`.
We do not have the `com.apple.developer.networking.multicast` entitlement and are unable to obtain it for non-technical reasons.
@nekohasekai nekohasekai force-pushed the dev-next branch 21 times, most recently from 83b00a1 to daef974 Compare December 17, 2025 14:18
@nekohasekai nekohasekai force-pushed the dev-next branch 9 times, most recently from ba353b6 to 43ca677 Compare December 25, 2025 07:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants