fix arp
This commit is contained in:
parent
c5c06cbb1f
commit
fbeb8d1a09
@ -1,5 +1,5 @@
|
||||
//
|
||||
// ArpServer.swift
|
||||
// ArpResolver.swift
|
||||
// sdlan
|
||||
// 1. 通过ip地址查找mac地址
|
||||
// 2. 要限制单位时间内,同一个ip的查询
|
||||
@ -8,7 +8,7 @@
|
||||
import Foundation
|
||||
import Darwin
|
||||
|
||||
actor ArpServer {
|
||||
actor ArpResolver {
|
||||
// 增加缓存时间逻辑
|
||||
struct ArpEntry {
|
||||
var mac: Data
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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])
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user