equal
deleted
inserted
replaced
213 end |
213 end |
214 self.private = private; |
214 self.private = private; |
215 return private; |
215 return private; |
216 end |
216 end |
217 |
217 |
|
218 local function parse_cidr(cidr) |
|
219 local bits; |
|
220 local ip_len = cidr:find("/", 1, true); |
|
221 if ip_len then |
|
222 bits = tonumber(cidr:sub(ip_len+1, -1)); |
|
223 cidr = cidr:sub(1, ip_len-1); |
|
224 end |
|
225 return new_ip(cidr), bits; |
|
226 end |
|
227 |
|
228 local function match(ipA, ipB, bits) |
|
229 local common_bits = commonPrefixLength(ipA, ipB); |
|
230 if not bits then |
|
231 return ipA == ipB; |
|
232 end |
|
233 if bits and ipB.proto == "IPv4" then |
|
234 common_bits = common_bits - 96; -- v6 mapped addresses always share these bits |
|
235 end |
|
236 return common_bits >= bits; |
|
237 end |
|
238 |
218 return {new_ip = new_ip, |
239 return {new_ip = new_ip, |
219 commonPrefixLength = commonPrefixLength}; |
240 commonPrefixLength = commonPrefixLength, |
|
241 parse_cidr = parse_cidr, |
|
242 match=match}; |