# HG changeset patch # User Kim Alvefur # Date 1451926060 -3600 # Node ID 23de70d19e77c4484a5446fd6138fdc294856050 # Parent 94d5e2f33a1067cf4ba95b94c02f36dd7efb09d4 util.ip: Support zone id syntax in IPv6 addresses diff -r 94d5e2f33a10 -r 23de70d19e77 util/ip.lua --- a/util/ip.lua Tue Jun 18 23:02:20 2013 +0200 +++ b/util/ip.lua Mon Jan 04 17:47:40 2016 +0100 @@ -25,6 +25,10 @@ elseif proto ~= "IPv4" and proto ~= "IPv6" then return nil, "invalid protocol"; end + local zone; + if proto == "IPv6" and ipStr:find('%', 1, true) then + ipStr, zone = ipStr:match("^(.-)%%(.*)"); + end if proto == "IPv6" and ipStr:find('.', 1, true) then local changed; ipStr, changed = ipStr:gsub(":(%d+)%.(%d+)%.(%d+)%.(%d+)$", function(a,b,c,d) @@ -33,7 +37,7 @@ if changed ~= 1 then return nil, "invalid-address"; end end - return setmetatable({ addr = ipStr, proto = proto }, ip_mt); + return setmetatable({ addr = ipStr, proto = proto, zone = zone }, ip_mt); end local function toBits(ip)