projects
/
lua-squid-acl-helper.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Добавлено кеширование привязки IP-mac.
[lua-squid-acl-helper.git]
/
src
/
arpcache.lua
diff --git
a/src/arpcache.lua
b/src/arpcache.lua
index 1ae8136f09bb18d1bfa96ddaea99a6ae3e20baaa..b4b8478ec82c118cbf37dbe2abdf340dc5b02862 100644
(file)
--- a/
src/arpcache.lua
+++ b/
src/arpcache.lua
@@
-4,19
+4,25
@@
config = require "config"
_arpcache = {}
_ARPCACHE4 = '/sbin/ip -4 n'
_arpcache = {}
_ARPCACHE4 = '/sbin/ip -4 n'
-_ARPCACHE6 = '/sbin/ip -6 n'
function _match_v4(ip)
return string.match(ip,"%d*%.%d*%.%d*%.%d*")
end
function _match_v4(ip)
return string.match(ip,"%d*%.%d*%.%d*%.%d*")
end
+_arpcache.cache = {}
+
function _arpcache.get_mac(ip)
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
local cmd
if _match_v4(ip) then
cmd = _ARPCACHE4
else
- cmd = _ARPCACHE6
+ return "OK"
end
local f = io.popen(cmd)
end
local f = io.popen(cmd)
@@
-38,11
+44,16
@@
function _arpcache.get_mac(ip)
if w[1]==ip then
res = w[5]
if w[1]==ip then
res = w[5]
+
break
end
end
break
end
end
+ if res then
+ _arpcache.cache[ip] = { mac = res, timestamp = os.time() }
+ end
+
f:close()
return res
f:close()
return res