util/ip.lua
changeset 5552 40e7a6cf15ff
parent 4433 f0e72fbe4d6a
child 5587 e108c3f97f26
child 5597 6fe09707c73b
equal deleted inserted replaced
5550:557583904dc5 5552:40e7a6cf15ff
    62 	if fields[1] == 127 then
    62 	if fields[1] == 127 then
    63 		return 0x2;
    63 		return 0x2;
    64 	-- Link-local unicast:
    64 	-- Link-local unicast:
    65 	elseif fields[1] == 169 and fields[2] == 254 then
    65 	elseif fields[1] == 169 and fields[2] == 254 then
    66 		return 0x2;
    66 		return 0x2;
    67 	-- Site-local unicast:
       
    68 	elseif (fields[1] == 10) or (fields[1] == 192 and fields[2] == 168) or (fields[1] == 172 and (fields[2] >= 16 and fields[2] < 32)) then
       
    69 		return 0x5;
       
    70 	-- Global unicast:
    67 	-- Global unicast:
    71 	else
    68 	else
    72 		return 0xE;
    69 		return 0xE;
    73 	end
    70 	end
    74 end
    71 end
    95 local function label(ip)
    92 local function label(ip)
    96 	if commonPrefixLength(ip, new_ip("::1", "IPv6")) == 128 then
    93 	if commonPrefixLength(ip, new_ip("::1", "IPv6")) == 128 then
    97 		return 0;
    94 		return 0;
    98 	elseif commonPrefixLength(ip, new_ip("2002::", "IPv6")) >= 16 then
    95 	elseif commonPrefixLength(ip, new_ip("2002::", "IPv6")) >= 16 then
    99 		return 2;
    96 		return 2;
       
    97 	elseif commonPrefixLength(ip, new_ip("2001::", "IPv6")) >= 32 then
       
    98 		return 5;
       
    99 	elseif commonPrefixLength(ip, new_ip("fc00::", "IPv6")) >= 7 then
       
   100 		return 13;
       
   101 	elseif commonPrefixLength(ip, new_ip("fec0::", "IPv6")) >= 10 then
       
   102 		return 11;
       
   103 	elseif commonPrefixLength(ip, new_ip("3ffe::", "IPv6")) >= 16 then
       
   104 		return 12;
   100 	elseif commonPrefixLength(ip, new_ip("::", "IPv6")) >= 96 then
   105 	elseif commonPrefixLength(ip, new_ip("::", "IPv6")) >= 96 then
   101 		return 3;
   106 		return 3;
   102 	elseif commonPrefixLength(ip, new_ip("::ffff:0:0", "IPv6")) >= 96 then
   107 	elseif commonPrefixLength(ip, new_ip("::ffff:0:0", "IPv6")) >= 96 then
   103 		return 4;
   108 		return 4;
   104 	else
   109 	else
   109 local function precedence(ip)
   114 local function precedence(ip)
   110 	if commonPrefixLength(ip, new_ip("::1", "IPv6")) == 128 then
   115 	if commonPrefixLength(ip, new_ip("::1", "IPv6")) == 128 then
   111 		return 50;
   116 		return 50;
   112 	elseif commonPrefixLength(ip, new_ip("2002::", "IPv6")) >= 16 then
   117 	elseif commonPrefixLength(ip, new_ip("2002::", "IPv6")) >= 16 then
   113 		return 30;
   118 		return 30;
       
   119 	elseif commonPrefixLength(ip, new_ip("2001::", "IPv6")) >= 32 then
       
   120 		return 5;
       
   121 	elseif commonPrefixLength(ip, new_ip("fc00::", "IPv6")) >= 7 then
       
   122 		return 3;
       
   123 	elseif commonPrefixLength(ip, new_ip("fec0::", "IPv6")) >= 10 then
       
   124 		return 1;
       
   125 	elseif commonPrefixLength(ip, new_ip("3ffe::", "IPv6")) >= 16 then
       
   126 		return 1;
   114 	elseif commonPrefixLength(ip, new_ip("::", "IPv6")) >= 96 then
   127 	elseif commonPrefixLength(ip, new_ip("::", "IPv6")) >= 96 then
   115 		return 20;
   128 		return 1;
   116 	elseif commonPrefixLength(ip, new_ip("::ffff:0:0", "IPv6")) >= 96 then
   129 	elseif commonPrefixLength(ip, new_ip("::ffff:0:0", "IPv6")) >= 96 then
   117 		return 10;
   130 		return 35;
   118 	else
   131 	else
   119 		return 40;
   132 		return 40;
   120 	end
   133 	end
   121 end
   134 end
   122 
   135