// // ArpServer.swift // sdlan // // Created by 安礼成 on 2025/7/14. // import Foundation import Darwin final class ArpServer { private var known_macs: [UInt32:Data] = [:] private var lock = os_unfair_lock() init(known_macs: [UInt32:Data]) { self.known_macs = known_macs } func query(ip: UInt32) -> Data? { return withLock { return self.known_macs[ip] } } func append(ip: UInt32, mac: Data) { withLock { self.known_macs[ip] = mac } } func remove(ip: UInt32) { withLock { _ = self.known_macs.removeValue(forKey: ip) } } func clear() { withLock { self.known_macs = [:] } } private func withLock(_ body: () throws -> T) rethrows -> T { os_unfair_lock_lock(&lock) defer{ os_unfair_lock_unlock(&lock) } return try body() } }