Skip to content

Commit c1e04e9

Browse files
committed
Turns out we can perform bypassing by binding the interface now
1 parent c1699b5 commit c1e04e9

6 files changed

Lines changed: 2 additions & 531 deletions

File tree

macos/networkextension/CMakeLists.txt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,6 @@ add_custom_command(TARGET networkextension POST_BUILD
6464
target_link_libraries(networkextension PRIVATE ${FW_FOUNDATION})
6565
target_link_libraries(networkextension PRIVATE ${FW_NW_EXTENSION})
6666
target_sources(networkextension PRIVATE
67-
${CMAKE_CURRENT_SOURCE_DIR}/bypasstcpflow.h
68-
${CMAKE_CURRENT_SOURCE_DIR}/bypasstcpflow.mm
69-
${CMAKE_CURRENT_SOURCE_DIR}/bypassudpflow.h
70-
${CMAKE_CURRENT_SOURCE_DIR}/bypassudpflow.mm
7167
${CMAKE_CURRENT_SOURCE_DIR}/interfaceconfig.h
7268
${CMAKE_CURRENT_SOURCE_DIR}/interfaceconfig.mm
7369
${CMAKE_CURRENT_SOURCE_DIR}/main.mm

macos/networkextension/VPNSplitTunnelProvider.mm

Lines changed: 2 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44

55
#import <NetworkExtension/NetworkExtension.h>
66

7-
#import "bypasstcpflow.h"
8-
#import "bypassudpflow.h"
97
#import "interfaceconfig.h"
108
#import "wireguardtunnel.h"
119

@@ -316,58 +314,15 @@ - (BOOL)handleNewFlow:(NEAppProxyFlow*) flow {
316314
}
317315

318316
// Perform flow bypassing.
317+
flow.networkInterface = self.wireguard.virtualInterface;
319318
if ([flow isKindOfClass:[NEAppProxyTCPFlow class]]) {
320-
NEAppProxyTCPFlow* tcpFlow = (NEAppProxyTCPFlow*)flow;
321-
nw_endpoint_t dest = nil;
322-
if (@available(macOS 15, *)) {
323-
dest = tcpFlow.remoteFlowEndpoint;
324-
} else {
325-
dest = [VPNSplitTunnelProvider convertEndpoint:tcpFlow.remoteEndpoint];
326-
}
327-
328-
BypassTcpFlow* handler = [BypassTcpFlow createBypass:tcpFlow
329-
toEndpoint:dest
330-
withInterface:self.wireguard.virtualInterface];
331-
if (!handler) {
332-
return NO;
333-
}
334-
335-
[handler startBypass:^(NSError* error){
336-
if (error) {
337-
NSLog(@"flow closed with error: %@", error);
338-
}
339-
}];
340-
341319
std::atomic_fetch_add(&m_handledTcpFlows, 1);
342-
return YES;
343320
} else if ([flow isKindOfClass:[NEAppProxyUDPFlow class]]) {
344-
NEAppProxyUDPFlow* udpFlow = (NEAppProxyUDPFlow*)flow;
345-
nw_endpoint_t source;
346-
if (@available(macOS 15, *)) {
347-
source = udpFlow.localFlowEndpoint;
348-
} else {
349-
source = [VPNSplitTunnelProvider convertEndpoint:udpFlow.localEndpoint];
350-
}
351-
352-
BypassUdpFlow* handler = [BypassUdpFlow createBypass:udpFlow
353-
localEndpoint:source
354-
withInterface:self.wireguard.virtualInterface];
355-
if (!handler) {
356-
return NO;
357-
}
358-
359-
[handler startBypass:^(NSError* error){
360-
if (error) {
361-
NSLog(@"flow closed with error: %@", error);
362-
}
363-
}];
364-
365321
std::atomic_fetch_add(&m_handledUdpFlows, 1);
366-
return YES;
367322
} else {
368323
std::atomic_fetch_add(&m_handledUnknown, 1);
369324
}
370-
return NO;
325+
return YES;
371326
}
372327

373328
- (void)cancelProxyWithError:(NSError *)error {

macos/networkextension/bypasstcpflow.h

Lines changed: 0 additions & 16 deletions
This file was deleted.

macos/networkextension/bypasstcpflow.mm

Lines changed: 0 additions & 155 deletions
This file was deleted.

macos/networkextension/bypassudpflow.h

Lines changed: 0 additions & 15 deletions
This file was deleted.

0 commit comments

Comments
 (0)