Добавлено кеширование привязки IP-mac.
[lua-squid-acl-helper.git] / src / arpcache.lua
index 1ae8136f09bb18d1bfa96ddaea99a6ae3e20baaa..b4b8478ec82c118cbf37dbe2abdf340dc5b02862 100644 (file)
@@ -4,19 +4,25 @@ config = require "config"
 
 _arpcache = {}
 _ARPCACHE4 = '/sbin/ip -4 n'
-_ARPCACHE6 = '/sbin/ip -6 n'
 
 function _match_v4(ip)
   return string.match(ip,"%d*%.%d*%.%d*%.%d*")
 end
 
+_arpcache.cache = {}
+
 function _arpcache.get_mac(ip)
 
+  local rec = _arpcache.cache[ip]
+  if rec and rec.timestamp+config.arp_ttl > os.time() then
+    return rec["mac"]
+  end
+
   local cmd
   if _match_v4(ip) then
     cmd = _ARPCACHE4
   else
-    cmd = _ARPCACHE6
+    return "OK"
   end
 
   local f = io.popen(cmd)
@@ -38,11 +44,16 @@ function _arpcache.get_mac(ip)
 
     if w[1]==ip then
       res = w[5]
+      
       break
     end
 
   end 
 
+  if res then
+    _arpcache.cache[ip] = { mac = res, timestamp = os.time() }
+  end
+
   f:close()
   return res