This commit is contained in:
anlicheng 2026-05-20 18:02:19 +08:00
parent c5c06cbb1f
commit fbeb8d1a09
4 changed files with 19 additions and 19 deletions

View File

@ -1,5 +1,5 @@
//
// ArpServer.swift
// ArpResolver.swift
// sdlan
// 1. ipmac
// 2. ip
@ -8,7 +8,7 @@
import Foundation
import Darwin
actor ArpServer {
actor ArpResolver {
//
struct ArpEntry {
var mac: Data

View File

@ -79,7 +79,7 @@ actor SDLContextActor {
private var ipv6AssistClient: SDLIPV6AssistClient?
private let sessionManager: SessionManager
nonisolated private let arpServer: ArpServer
nonisolated private let arpResolver: ArpResolver
// socket
// App Group + Darwin Notification
@ -100,7 +100,7 @@ actor SDLContextActor {
let puncherActor = SDLPuncherActor()
let proberActor = SDLNATProberActor(addressArray: config.stunProbeSocketAddressArray)
let sessionManager = SessionManager()
let arpServer = ArpServer()
let arpResolver = ArpResolver()
let flowTracer = SDLFlowTracer()
let policyService = PolicyService(identityId: config.identityId)
let superServiceProxy = SDLSuperServiceProxy()
@ -110,7 +110,7 @@ actor SDLContextActor {
config: config,
dataCipher: nil,
sessionManager: sessionManager,
arpServer: arpServer,
arpResolver: arpResolver,
puncherActor: puncherActor,
policyService: policyService,
superServiceProxy: superServiceProxy,
@ -123,7 +123,7 @@ actor SDLContextActor {
dataCipher: nil,
policyService: policyService,
packetOutboundActor: packetOutboundActor,
arpServer: arpServer,
arpResolver: arpResolver,
superServiceProxy: superServiceProxy,
flowTracer: flowTracer
)
@ -136,7 +136,7 @@ actor SDLContextActor {
self.proberActor = proberActor
self.sessionManager = sessionManager
self.arpServer = arpServer
self.arpResolver = arpResolver
self.flowTracer = flowTracer
//
@ -152,7 +152,7 @@ actor SDLContextActor {
// arp
await self.puncherActor.start()
await self.arpServer.start()
await self.arpResolver.start()
let dnsService = SDLDNSService(serverHost: self.config.serverHost, publicDnsServers: self.publicDnsServers) { [weak self] event in
await self?.handleDNSEvent(event)
@ -180,7 +180,7 @@ actor SDLContextActor {
// context
public func stop() async {
await self.puncherActor.stop()
await self.arpServer.stop()
await self.arpResolver.stop()
await self.sessionManager.clear()
await self.stunRequestWorker?.stop()
@ -298,7 +298,7 @@ extension SDLContextActor {
await self.policyService.applyPolicyResponse(policyResponse)
case .arpResponse(let arpResponse):
SDLLogger.log("[SDLContext] get arp response: \(arpResponse)")
await self.arpServer.handleArpResponse(arpResponse: arpResponse)
await self.arpResolver.handleArpResponse(arpResponse: arpResponse)
}
}

View File

@ -12,7 +12,7 @@ actor PacketInboundActor {
private let provider: NEPacketTunnelProvider
private let policyService: PolicyService
private let packetOutboundActor: PacketOutboundActor
private let arpServer: ArpServer
private let arpResolver: ArpResolver
private let superServiceProxy: SDLSuperServiceProxy
private let flowTracer: SDLFlowTracer
@ -25,7 +25,7 @@ actor PacketInboundActor {
dataCipher: CCDataCipher?,
policyService: PolicyService,
packetOutboundActor: PacketOutboundActor,
arpServer: ArpServer,
arpResolver: ArpResolver,
superServiceProxy: SDLSuperServiceProxy,
flowTracer: SDLFlowTracer) {
self.provider = provider
@ -34,7 +34,7 @@ actor PacketInboundActor {
self.dataCipher = dataCipher
self.policyService = policyService
self.packetOutboundActor = packetOutboundActor
self.arpServer = arpServer
self.arpResolver = arpResolver
self.superServiceProxy = superServiceProxy
self.flowTracer = flowTracer
}
@ -64,7 +64,7 @@ actor PacketInboundActor {
await self.packetOutboundActor.routeLayerPacket(dstMac: dstMac, type: .arp, data: responseData)
case .appendARP(let ip, let mac):
SDLLogger.log("[PacketInboundActor] get arp response packet")
await self.arpServer.append(ip: ip, mac: mac)
await self.arpResolver.append(ip: ip, mac: mac)
case .writeToTun(let packetData, let identityID):
let packet = NEPacket(data: packetData, protocolFamily: 2)
self.provider.packetFlow.writePacketObjects([packet])

View File

@ -14,7 +14,7 @@ actor PacketOutboundActor {
private let provider: NEPacketTunnelProvider
private let sessionManager: SessionManager
private let arpServer: ArpServer
private let arpResolver: ArpResolver
private let puncherActor: SDLPuncherActor
private let policyService: PolicyService
private let superServiceProxy: SDLSuperServiceProxy
@ -34,7 +34,7 @@ actor PacketOutboundActor {
config: SDLConfiguration,
dataCipher: CCDataCipher?,
sessionManager: SessionManager,
arpServer: ArpServer,
arpResolver: ArpResolver,
puncherActor: SDLPuncherActor,
policyService: PolicyService,
superServiceProxy: SDLSuperServiceProxy,
@ -47,7 +47,7 @@ actor PacketOutboundActor {
self.stunSocketAddress = config.stunSocketAddress
self.dataCipher = dataCipher
self.sessionManager = sessionManager
self.arpServer = arpServer
self.arpResolver = arpResolver
self.puncherActor = puncherActor
self.policyService = policyService
self.superServiceProxy = superServiceProxy
@ -195,12 +195,12 @@ actor PacketOutboundActor {
SDLLogger.log("[PacketOutboundActor] use exit_node: \(SDLUtil.int32ToIp(ip))", for: .trace)
}
if let dstMac = self.arpServer.snapshot().lookup(ip) {
if let dstMac = self.arpResolver.snapshot().lookup(ip) {
SDLLogger.log("[PacketOutboundActor] dstIp: \(SDLUtil.int32ToIp(ip)), dst_mac is: \(SDLUtil.formatMacAddress(mac: dstMac))", for: .trace)
await self.routeLayerPacket(dstMac: dstMac, type: type, data: data)
} else {
SDLLogger.log("[PacketOutboundActor] dstIp: \(SDLUtil.int32ToIp(ip)) arp query not found, broadcast", for: .trace)
if let arpRequest = try? await self.arpServer.makeArpRequest(targetIp: ip) {
if let arpRequest = try? await self.arpResolver.makeArpRequest(targetIp: ip) {
await self.superServiceProxy.send(type: .arpRequest, data: arpRequest)
}
}