Skip to content

build: enable IP_BOUND_IF outbound binding on iOS#492

Open
BoringApp wants to merge 1 commit into
eycorsican:masterfrom
BoringApp:ios-bind-interface
Open

build: enable IP_BOUND_IF outbound binding on iOS#492
BoringApp wants to merge 1 commit into
eycorsican:masterfrom
BoringApp:ios-bind-interface

Conversation

@BoringApp

Copy link
Copy Markdown

Upstream's #[cfg(target_os = "macos")] gates on the IP_BOUND_IF setsockopt path (and supporting imports/traits) exclude iOS, even though iOS shares the Darwin kernel and supports IP_BOUND_IF identically. iOS targets fall through to the catch-all and return "binding to interface is not supported on this platform" at runtime.

Extend the cfg sets to include target_os = "ios" in:

  • CString / AsRawFd imports
  • trait BindSocket (and its fallback definition)
  • the setsockopt(IP_BOUND_IF) call site
  • the unreachable error branch

Also add libc as a dependency for the ios target (previously only gated for macos + linux).

Verified on iPhone via NEPacketTunnelProvider: OUTBOUND_INTERFACE= pdp_ip0 setenv before leaf_run, leaf logs "socket bind pdp_ip0" and outbound TCP/UDP correctly egress over the cellular interface without going back into the tun.

Upstream's #[cfg(target_os = "macos")] gates on the IP_BOUND_IF
setsockopt path (and supporting imports/traits) exclude iOS, even
though iOS shares the Darwin kernel and supports IP_BOUND_IF
identically. iOS targets fall through to the catch-all and return
"binding to interface is not supported on this platform" at runtime.

Extend the cfg sets to include target_os = "ios" in:
  - CString / AsRawFd imports
  - trait BindSocket (and its fallback definition)
  - the setsockopt(IP_BOUND_IF) call site
  - the unreachable error branch

Also add libc as a dependency for the ios target (previously only
gated for macos + linux).

Verified on iPhone via NEPacketTunnelProvider: OUTBOUND_INTERFACE=
pdp_ip0 setenv before leaf_run, leaf logs "socket bind pdp_ip0" and
outbound TCP/UDP correctly egress over the cellular interface
without going back into the tun.
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.

1 participant